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