Foros del Web » Programación para mayores de 30 ;) » Java »

puntero nulo, pero no se donde

Estas en el tema de puntero nulo, pero no se donde en el foro de Java en Foros del Web. hola, os pongo el stacktrace: excepción org.apache.jasper.JasperException: java.lang.NullPointerException org.apache.jasper.servlet.JspServletWrapper.handle JspException(JspServletWrapper.java:532) org.apache.jasper.servlet.JspServletWrapper.servic e(JspServletWrapper.java:426) org.apache.jasper.servlet.JspServlet.serviceJspFil e(JspServlet.java:320) org.apache.jasper.servlet.JspServlet.service(JspSe rvlet.java:266) javax.servlet.http.HttpServlet.service(HttpServlet .java:803) causa raíz java.lang.NullPointerException org.apache.jsp.form.gestionE_jsp._jspService(gesti onE_jsp.java:152) org.apache.jasper.runtime.HttpJspBase.service(Http JspBase.java:70) ...
  #1 (permalink)  
Antiguo 01/10/2007, 11:24
Avatar de cris_maco  
Fecha de Ingreso: abril-2007
Ubicación: Salamanca
Mensajes: 254
Antigüedad: 17 años
Puntos: 0
puntero nulo, pero no se donde

hola, os pongo el stacktrace:

excepción

org.apache.jasper.JasperException: java.lang.NullPointerException
org.apache.jasper.servlet.JspServletWrapper.handle JspException(JspServletWrapper.java:532)
org.apache.jasper.servlet.JspServletWrapper.servic e(JspServletWrapper.java:426)
org.apache.jasper.servlet.JspServlet.serviceJspFil e(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspSe rvlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet .java:803)

causa raíz

java.lang.NullPointerException
org.apache.jsp.form.gestionE_jsp._jspService(gesti onE_jsp.java:152)
org.apache.jasper.runtime.HttpJspBase.service(Http JspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet .java:803)
org.apache.jasper.servlet.JspServletWrapper.servic e(JspServletWrapper.java:384)
org.apache.jasper.servlet.JspServlet.serviceJspFil e(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspSe rvlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet .java:803)

pues eso, que no se donde podra ser, en principio pienso en que deberia ser algo del servidor, ya que este error me sale a veces cuando doy a volver en el navegador(mozilla) y luego abro otra vez la aplicacion web y no da o hago un deploy al proyecto y tambien se va, pero la cuestion es que me da a veces y no se porque?

gracias
  #2 (permalink)  
Antiguo 01/10/2007, 14:59
 
Fecha de Ingreso: noviembre-2003
Mensajes: 59
Antigüedad: 20 años, 5 meses
Puntos: 0
Re: puntero nulo, pero no se donde

Yo creo que es un Parametro ó String nulo que recoges de un jsp.
  #3 (permalink)  
Antiguo 02/10/2007, 00:47
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: puntero nulo, pero no se donde

Cita:
org.apache.jsp.form.gestionE_jsp._jspService(gesti onE_jsp.java:152)
El problema ocurre aquí. Es todo lo que se puede decir con esa información. Así que mirando esa linea en el fichero java generado a partir de la JSP podrás averiguar mas cosas.

S!
  #4 (permalink)  
Antiguo 02/10/2007, 10:39
Avatar de cris_maco  
Fecha de Ingreso: abril-2007
Ubicación: Salamanca
Mensajes: 254
Antigüedad: 17 años
Puntos: 0
Re: puntero nulo, pero no se donde

Cita:
Iniciado por GreenEyed Ver Mensaje
El problema ocurre aquí. Es todo lo que se puede decir con esa información. Así que mirando esa linea en el fichero java generado a partir de la JSP podrás averiguar mas cosas.

S!
va a ser que soy un poco tontita porque no encuentro ese fichero. Es mas me ha vuelto a dar el error pero esta vez al cargar una pagina jsp que hace de formulario para introducir datos y si desde el output de eclipse pincho en la linea que me decias me sale
"source not found for org.apache.jsp.form.altaIngreso_jsp"

asi que por eso pense que podria ser del servidor Tomcat porque antes todo me iba bien, lo unico que cambie yo creo fue el tiempo de sesion(a 24 horas).

Esto es lo que me aparece en la consola de eclipse con el error que he puesto ahora:
GRAVE: Servlet.service() para servlet jsp lanzó excepción
java.lang.NullPointerException
at org.apache.jsp.form.altaIngreso_jsp._jspService(al taIngreso_jsp.java:199)
at org.apache.jasper.runtime.HttpJspBase.service(Http JspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet .java:803)
at org.apache.jasper.servlet.JspServletWrapper.servic e(JspServletWrapper.java:384)
at org.apache.jasper.servlet.JspServlet.serviceJspFil e(JspServlet.java:320)
at org.apache.jasper.servlet.JspServlet.service(JspSe rvlet.java:266)
at javax.servlet.http.HttpServlet.service(HttpServlet .java:803)
at org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invo ke(StandardWrapperValve.java:228)
at org.apache.catalina.core.StandardContextValve.invo ke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke( StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invok e(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.servic e(CoyoteAdapter.java:216)
at org.apache.coyote.http11.Http11AprProcessor.proces s(Http11AprProcessor.java:866)
at org.apache.coyote.http11.Http11AprProtocol$Http11C onnectionHandler.process(Http11AprProtocol.java:71 6)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run( AprEndpoint.java:1498)
at java.lang.Thread.run(Thread.java:619)

Y no es cosa de la pagina porque dandole atras y cargando otra pagina me da el mismo tipo de error.
  #5 (permalink)  
Antiguo 02/10/2007, 13:37
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: puntero nulo, pero no se donde

Cuando el servidor compila tus paginas jsp, crea ficheros .java, los compila y luego los ejecuta. Si el servidor es listo, cuando hay un error te dice la linea del .jsp original, pero cuando no lo es, como parece ser tu caso, entonces te da la del .java generado.

Para ver ese fichero tendras que mirar en los ficheros temporales que te crea el tomcat y averiguar si te los deja en algun sitio para poderlos mirar. Hay servidores que solo te graban el .class y el .java no te lo graban en disco si no se lo indicas explicitamente.

Como no uso el Tomcat, no te puedo decir donde los pone, ni como hacer para que te los guarde en disco en caso de que no lo haga. Quiza alguien que si use el Tomcat si lo sepa, y si no te tocara mirar la documentacion.

Una opcion facil es poner en marcha el tomcat, acceder a esa pagina y buscar a través del sistema operativo en los directorios de la aplicacion y el servidor a ver si hay un fichero con ese nombre, sin parar el Tomcat, por si los borrar al pararse.

S!

PD: Que te de el mismo tipo de error no significa mucho en este caso especifico, ya que es un error muy comun y generico asi que puede ser el mismo error en el codigo o varios errores muy parecidos.
  #6 (permalink)  
Antiguo 03/10/2007, 04:41
Avatar de cris_maco  
Fecha de Ingreso: abril-2007
Ubicación: Salamanca
Mensajes: 254
Antigüedad: 17 años
Puntos: 0
Re: puntero nulo, pero no se donde

hola!!

Ya averigue donde era, al final no era tan dificil buscar ese archivo java....
Despues de estar contando lineas...(no se como poner los numeros de linea que aparezcana la izquierda en el bloc de notas) pues creo que es con esta linea:

if(session.getAttribute("user").equals("director") ){

lo que en parte pensaba que pudiera ser por este tipo de atributos. Bueno, cuento un poco la historia:
creo un atributo de este tipo para cuando el usuario haga el login, dependiendo del tipo de usuario tenga unos privilegios u otros y claro lo del puntero nulo sera porque la sesion se acabe o cierre, pero yo pensaba que lo habia hecho bien cuando puse esto en el web.xml:

<session-config>
<session-timeout>1440</session-timeout>
</session-config>
porque segun vi por internet ese tiempo era en minutos, me estoy equivocando?
entonces si yo lo tengo puesto para 24 horas porque se me cierra la sesion?

ademas al hacer cuando se registra el usuario y empieza la sesion:
session.getMaxInactiveInterval() y sacarlo por pantalla sale 86400 (logico)

Última edición por cris_maco; 03/10/2007 a las 05:21 Razón: añadir info
  #7 (permalink)  
Antiguo 04/10/2007, 01:05
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: puntero nulo, pero no se donde

Ahi hay dos cosas para hacer.
.- Si el objeto session es null, te saltara un NullPointerException lo pongas como lo pongas, asi que tienes que asegurarte antes que session no es null. Por ejemplo usando request.getSession(true).

.- Para evitar un NullPointerException si el atributo es nulo, puedes usar "director".equals(session.getAttribute("user") ). Invirtiendo el orden consigues que el metodo se aplique siempre a un objeto no null y si el atributo es nulo, simplemente el equals devuelve false, pero no salta una excepcion.

Que el atributo sea nulo no tiene por que ser por que la sesion caduco, si algo borra ese atributo o se hace un session.invalidate()... daria ese error.

S!
  #8 (permalink)  
Antiguo 04/10/2007, 03:41
Avatar de cris_maco  
Fecha de Ingreso: abril-2007
Ubicación: Salamanca
Mensajes: 254
Antigüedad: 17 años
Puntos: 0
Re: puntero nulo, pero no se donde

para asegurarme no tiene que ver el que yo haga esto?:
en cada operacion de alta baja, ...
lo meto en un bucle try-catch-finally y en el finally siempre incluyo el session.close()

yo creo que no hago session.invalidate , pero lo buscare y mirare que no se borre el atributo.
por asegurarme: yo puedo crearme los Httpsession cuando quiera en cualquier parte del programa? de normal los hago en el action... y aunque yo creee otro dentro del programa con el mismo nombre para obtener una variable de sesion me estaria modificando el valor de la primera variable? Me explico mejor que ha quedado un poco enredado.
HttpSession session = request.getSession(); //action
session.setAttribute("user", usuario);

y luego en otro lado:

HttpSession session = request.getSession();
session.setAttribute("mes", request.getParameter("mes"));

mi variable de session con el atributo user se habra borrado su valor o no deberia? porque si es que si se borra entonces deberia ser por eso lo que me pasa con los punteros nulos....
gracias!!!!

Última edición por cris_maco; 04/10/2007 a las 14:26
  #9 (permalink)  
Antiguo 04/10/2007, 14:00
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: puntero nulo, pero no se donde

¿De que session estamos hablando? Por que la clase HttpSession no tiene un metodo close() y es esa clase la que estas usando en ese trozo de codigo.

S!
  #10 (permalink)  
Antiguo 04/10/2007, 14:17
Avatar de cris_maco  
Fecha de Ingreso: abril-2007
Ubicación: Salamanca
Mensajes: 254
Antigüedad: 17 años
Puntos: 0
Re: puntero nulo, pero no se donde

Cita:
Iniciado por GreenEyed Ver Mensaje
¿De que session estamos hablando? Por que la clase HttpSession no tiene un metodo close() y es esa clase la que estas usando en ese trozo de codigo.

S!
vale, vale... perdon si es Httpsession, era por si tenia algo que ver y asi descartar posibilidades.
gracias
  #11 (permalink)  
Antiguo 05/10/2007, 00:00
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: puntero nulo, pero no se donde

Cita:
Iniciado por cris_maco Ver Mensaje
por asegurarme: yo puedo crearme los Httpsession cuando quiera en cualquier parte del programa? de normal los hago en el action... y aunque yo creee otro dentro del programa con el mismo nombre para obtener una variable de sesion me estaria modificando el valor de la primera variable? Me explico mejor que ha quedado un poco enredado.
HttpSession session = request.getSession(); //action
session.setAttribute("user", usuario);

y luego en otro lado:

HttpSession session = request.getSession();
session.setAttribute("mes", request.getParameter("mes"));

mi variable de session con el atributo user se habra borrado su valor o no deberia? porque si es que si se borra entonces deberia ser por eso lo que me pasa con los punteros nulos....
gracias!!!!
Ahora que lo veo de nuevo... eso no deberia ser un problema. Cuando haces la segunda llamada a getSession, te ha de devolver la misma sesion que antes asi que el valor "user" ha de seguir ahi.

Antes de llamar a la linea donde te da el error simplemente haz un
System.err.println("session: " + session);
System.err.println("session.getAttribute(user): " + session.getAttribute("user")); y a ver cual de los dos es nulo y te esta dando el error.

S!
  #12 (permalink)  
Antiguo 05/10/2007, 11:30
Avatar de cris_maco  
Fecha de Ingreso: abril-2007
Ubicación: Salamanca
Mensajes: 254
Antigüedad: 17 años
Puntos: 0
Re: puntero nulo, pero no se donde

comprobado el error y lo da en el atributo.
session: org.apache.catalina.session.StandardSessionFacade@ 8e3115
session.getAttribute(user): null
No se como me has entendido porque lo que me contestaste lo añadi mal en el post (deberia ser en el ultimo que escribi)

revisare el codigo para ver si cambio el valor en algun lado o sin darme cuenta uso el mismo nombre para dos atributos diferentes pero yo creo que no, entonces a que se podria deber???

Última edición por cris_maco; 05/10/2007 a las 11:52
  #13 (permalink)  
Antiguo 08/10/2007, 04:45
 
Fecha de Ingreso: agosto-2007
Ubicación: Ponferrada / La Coruña
Mensajes: 12
Antigüedad: 16 años, 8 meses
Puntos: 0
Re: puntero nulo, pero no se donde

Hola cris,
yo creo que te estás cargando por alguna parte la sesión, y al acceder a ella mediante el "request.getSession()" te está creando una nueva que no tiene el atributo ese... No sé dónde, si en esa página o en algua otra parte...

Yo cambiaría esa forma de recoger el objeto session de la request y utilizaría "request.getSession(false)", así no te va a crear una sesión nueva aunque no exista.
Y utilizaría "request.getSession(true) cuando sea necesario obtener una sesión aunque no exista, es decir, al hacer login o cosas así. Al menos de esta manera te aseguras que el programa haga SOLO lo que tú quieras, y no que pueda hacer alguna cosa inesperada como crear una sesión nueva donde no debe...

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:16.