You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by bu...@apache.org on 2003/04/23 10:30:01 UTC
DO NOT REPLY [Bug 19244] New: -
catalina ApplicationFilterChain exception wrapping causes coyote Http11Processor to not log or report real exception
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=19244>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=19244
catalina ApplicationFilterChain exception wrapping causes coyote Http11Processor to not log or report real exception
Summary: catalina ApplicationFilterChain exception wrapping
causes coyote Http11Processor to not log or report real
exception
Product: Tomcat 4
Version: 4.0 Beta 1
Platform: Other
OS/Version: Windows NT/2K
Status: NEW
Severity: Normal
Priority: Other
Component: Connector:Coyote HTTP/1.1
AssignedTo: tomcat-dev@jakarta.apache.org
ReportedBy: david@pastornet.net.au
I am experiencing situations where an exception happens in tomcat 4 and the
browser receives a totally blank page when it happens, and no substantial detail
of the cause is logged. Tomcat is not at fault for the exception, but I think
that tomcat is at fault for not making the full detail of the exception available.
The fault might be at lines 408-412 (of the coyote rc2 release) of coyote's
Http11Processor.java where it doesn't explicitly handle ServletExceptions with
wrapped content.
My investigations show that ApplicationFilterChain.java rethrows various
exceptions with a ServletException and this causes the detail of the exception
to not be logged because the logging mechanism doesn't realise that the
exception is a wrapper, and it doesn't log the underlying exception.
For example, the following code from ApplicationFilterChain.java throws a
wrapped exception:
} catch (Throwable e) {
support.fireInstanceEvent(InstanceEvent.AFTER_SERVICE_EVENT,
servlet, request, response, e);
throw new ServletException
(sm.getString("filterChain.servlet"), e);
}
There seem to be other places where this is done too [in the same source file at
least].
I'm getting exceptions like the one below logged, but the wrapped exception is
escaping being logged [it is shown after the one below - I had to hack the
tomcat source to get it].
StandardWrapperValve[AxisServlet]: Servlet.service() for servlet AxisServlet
threw exception
javax.servlet.ServletException: Servlet execution threw an exception
javax.servlet.ServletException: Servlet execution threw an exception
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:263)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at
org.apache.catalina.authenticator.AuthenticatorBase.invokeAnonymous(AuthenticatorBase.java:597)
at
com.borland.catalina.authenticator.AnonymousValve.invoke(AnonymousValve.java:37)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2489)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:413)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:380)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:537)
at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:533)
at java.lang.Thread.run(Thread.java:536)
Below is the exception that was being wrapped, but I had to hack the tomcat
source to get the detail of it (this stack trace below is a problem that I have
to solve - just reporting it for good measure). I wouldn't have known the cause
without hacking the tomcat sources.
java.lang.NoClassDefFoundError: javax/ejb/_EJBHome_Stub
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:502)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
at
com.borland.enterprise.module.reflection.classes.custom.CustomClassLoader.findClassInternal(CustomClassLoader.java:371)
at
com.borland.enterprise.module.reflection.classes.custom.CustomClassLoader.findClass(CustomClassLoader.java:248)
at
com.borland.enterprise.module.reflection.classes.custom.CustomClassLoader.loadClass(CustomClassLoader.java:864)
at
com.borland.enterprise.module.reflection.classes.custom.CustomClassLoader.loadClass(CustomClassLoader.java:719)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:217)
at com.inprise.vbroker.rmi.CORBA.UtilImpl._loadClass(UtilImpl.java:724)
at com.inprise.vbroker.rmi.CORBA.UtilImpl.loadClass(UtilImpl.java:1022)
at javax.rmi.CORBA.Util.loadClass(Util.java:233)
at
com.inprise.vbroker.rmi.CORBA.PortableRemoteObjectImpl.narrow(PortableRemoteObjectImpl.java:222)
at javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:134)
at org.apache.axis.providers.java.EJBProvider.getServiceClass(EJBProvider.java:234)
at
org.apache.axis.providers.java.JavaProvider.initServiceDesc(JavaProvider.java:535)
at org.apache.axis.providers.java.EJBProvider.initServiceDesc(EJBProvider.java:382)
at
org.apache.axis.handlers.soap.SOAPService.getInitializedServiceDesc(SOAPService.java:322)
at
org.apache.axis.deployment.wsdd.WSDDService.makeNewInstance(WSDDService.java:477)
at
org.apache.axis.deployment.wsdd.WSDDDeployableItem.getNewInstance(WSDDDeployableItem.java:312)
at
org.apache.axis.deployment.wsdd.WSDDDeployableItem.getInstance(WSDDDeployableItem.java:298)
at
org.apache.axis.deployment.wsdd.WSDDDeployment.getService(WSDDDeployment.java:492)
at org.apache.axis.configuration.FileProvider.getService(FileProvider.java:262)
at org.apache.axis.AxisEngine.getService(AxisEngine.java:275)
at org.apache.axis.MessageContext.setTargetService(MessageContext.java:586)
at org.apache.axis.handlers.http.URLMapper.invoke(URLMapper.java:89)
at org.apache.axis.handlers.http.URLMapper.generateWSDL(URLMapper.java:97)
at org.apache.axis.strategies.WSDLGenStrategy.visit(WSDLGenStrategy.java:72)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:156)
at org.apache.axis.SimpleChain.generateWSDL(SimpleChain.java:143)
at org.apache.axis.server.AxisServer.generateWSDL(AxisServer.java:456)
at
org.apache.axis.transport.http.AxisServlet.processWsdlRequest(AxisServlet.java:428)
at org.apache.axis.transport.http.AxisServlet.doGet(AxisServlet.java:280)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:335)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:122)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:72)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:263)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at
org.apache.catalina.authenticator.AuthenticatorBase.invokeAnonymous(AuthenticatorBase.java:597)
at com.borland.catalina.authenticator.AnonymousValve.invoke(AnonymousValve.java:37)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2489)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:413)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:380)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:537)
at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:533)
at java.lang.Thread.run(Thread.java:536)
---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org