Uploaded image for project: 'Application Server 3  4  5 and 6'
  1. Application Server 3 4 5 and 6
  2. JBAS-1283

Tomcat Unable to Compile JSPs when Separate ClassLoader Namespace Used for Webapp

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Obsolete
    • Icon: Minor Minor
    • No Release
    • JBossAS-3.2.6 Final
    • Web (Tomcat) service
    • None
    • Stock JBoss 3.2.6 running on Linux (kernel 2.4.26), Sun JDK and JRE version 1.4.2_04

      See my initial forum post at "http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3861452#3861452".

      The dom4j libs provided by JBoss do not work correctly with my web application, so I attempted to configure my webapp's "jboss-web.xml"-as per the wiki page at "http://www.jboss.org/wiki/Wiki.jsp?page=ClassLoadingConfiguration"-so that my webapp would essentially be in a different classloader namspace and would be able to override the server dom4j implementation with its own. Now, Tomcat bails out during JSP compilation with a dom4j-related ClassCastException, leading me to believe there might some problem with the sort of setup I'm trying to attempt...for example, Tomcat's JSP compiler might be trying to link with the dom4j in my application's namespace while its classes have been loaded next to (and probably are already using) dom4j in the server namespace.

      I'll attach a .war file exhibiting this behavior to this bug report.

      Here's the specific exception for this .war file:

      java.lang.ClassCastException
      at javax.xml.parsers.DocumentBuilderFactory.newInstance(DocumentBuilderFactory.java:93)
      at org.apache.jasper.xmlparser.ParserUtils.parseXMLDocument(ParserUtils.java:91)
      at org.apache.jasper.compiler.JspConfig.processWebDotXml(JspConfig.java:70)
      at org.apache.jasper.compiler.JspConfig.init(JspConfig.java:188)
      at org.apache.jasper.compiler.JspConfig.findJspProperty(JspConfig.java:240)
      at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:160)
      at org.apache.jasper.compiler.Compiler.compile(Compiler.java:470)
      at org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
      at org.apache.jasper.compiler.Compiler.compile(Compiler.java:439)
      at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:511)
      at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:295)
      at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
      at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
      at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:75)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
      at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
      at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
      at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
      at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
      at org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:66)
      at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
      at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:158)
      at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
      at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
      at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
      at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
      at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
      at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
      at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
      at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929) at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
      at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
      at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
      at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
      at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
      at java.lang.Thread.run(Thread.java:534)

      Interestingly enough, I can copy my app-specific "dom4j-full.jar" over the JBoss-provided "dom4j.jar" in "/lib", and everything works great.

        1. test.war
          4.02 MB
          Jeremy Brown

              starksm64 Scott Stark (Inactive)
              brownjava_jira Jeremy Brown (Inactive)
              Votes:
              1 Vote for this issue
              Watchers:
              1 Start watching this issue

                Created:
                Updated:
                Resolved: