Tomcat 6: JSP-Exception beinhaltet nicht den wahren Ursprungsort

tme

Aktives Mitglied
Hallo,

bei uns ist das globale Fangen von Exceptions für JSP-Dateien so konfiguriert, dass die Datei "error.jsp" aufgerufen wird. Von Zeit zu Zeit kommt es vor, dass dort jedoch Exceptions ankommen, die einen sehr generischen Stacktrace beinhalten, der absolut keine Rückschlüsse auf die tatsächliche Ursache der Exception erlaubt.

Beispiel:

Ich habe soeben in einer JSP-Datei auf einen Button geklickt. Dieser ruft ein JavaScript auf, welches einen Redirect mit einer langen URL zu derselben JSP-Seite macht. Die Routine, die als Resultat in eben jener JSP-Seite aufgerufen wird, löscht ein Datenobjekt, springt also direkt in Java-Code.

Die Exception sieht so aus:

Java:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:522)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
de.branion.filter.LogFilter.doFilter(LogFilter.java:34)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
javawebparts.filter.SessionInactivityFilter.doFilter(SessionInactivityFilter.java:204)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
de.branion.filter.ShopFilter.doFilter(ShopFilter.java:38)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
de.branion.filter.StartupFilter.doFilter(StartupFilter.java:41)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
de.branion.filter.BotFilter.doFilter(BotFilter.java:64)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:769)
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:698)
org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:891)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
java.lang.Thread.run(Thread.java:636)

Vor 2 Tagen ist mir dasselbe schon einmal passiert. Dort bin ich dann auf blutigen Knöcheln dem Fehler gefolgt mit Anpassung -> Deployment -> Fehler produzieren -> Ergebnis überprüfen. Der fehlerhafte Code (tatsächlich wie hier auch eine NullPointerException) war tief in unserem Java-Code. Die Exception sah jedoch genauso aus wie hier.

Kennt jemand die Ursache für solch einen generischen Stacktrace? Wie kann ich an die Ursache der Exception herankommen?

Danke.
 
M

maki

Gast
Kennt jemand die Ursache für solch einen generischen Stacktrace?
Sowas kann zB. passieren, wenn es in der error.jsp selber zu einer NullPointerException kommt, zB. weil dort auf die Session zugegriffen wird, obwohl diese nicht mehr existiert.
 

tme

Aktives Mitglied
Sowas kann zB. passieren, wenn es in der error.jsp selber zu einer NullPointerException kommt, zB. weil dort auf die Session zugegriffen wird, obwohl diese nicht mehr existiert.

Danke, Maki,

aber würde in solch einem Falle nicht die error.jsp (respektive error_jsp.java) in der Exception auftauchen?

Edit: Die error.jsp ist die Datei, die den Stacktrace in dieser Art ausgibt. Ich habe nicht die ganze Seite kopiert, sondern nur den Loop, der die Stacktraceelemente aus der Exception durchgeht und diese untereinander hinschreibt. Der Rahmenbau zeigt, dass die error.jsp anscheinend korrekt ihre Arbeit tut.
 
M

maki

Gast
Ist zwar lange her, aber ich erinnere mich daran ,dass es da keine rekursion gab.

Ob das auch dein Problem ist kann ist natürlich nciht sagen.
 

tme

Aktives Mitglied
Für alle, die den Thread über die Suchfunktion finden, will ich die Lösung posten:

Die an die error.jsp gelieferte Exception liefert mit der Methode getCause() ein Objekt vom Typ java.lang.Throwable mit, welches die Exception ist, die ich suchte. Nachdem wir unsere error.jsp so angepaßt haben, dass auch von dieser Exception der Stacktrace ausgegeben wurde, können wir jetzt auch feststellen, wo das Problem liegt.
 

Ähnliche Java Themen

Neue Themen


Oben