Alexander Klimetschek schrieb:
IMHO this might happen any time again and having the flexibility of classloading in Java is perfect for solving those problems. I have implemented that shielded groups stuff in the old BootstrapClassLoaderManager, right now, I am writing on a ShieldingBlockServlet as a proof of concept and to be up-to-date with the cocoon trunk.

The new ShieldingBlockServlet works except for one annoying thing: when serving JSPs I get this exception:

java.lang.ClassCastException: org.apache.xerces.jaxp.DocumentBuilderFactoryImpl

(see full stacktrace below at the end of the mail).

This actually worked before when I used the shielding classloading stuff from cocoon-bootstrap, i.e. exactly the same shielded classloading code as used for the shielding of cocoon, only with an additional lib/ directory inside the block.

Now I have a ShieldingBlockServlet which is like the current o.a.c.maven.deployer.servlet.ShieldingServlet and it uses the o.a.c.classloader.DefaultClassLoader, which is setup only with lib and classes directory from the block (well, this might be different to the previous case, where also the standard WEB-INF/lib etc. were set, but IIRC they couldn't be found anyway, since they were looked up from the BlockContext).

The classloader hierarchy also seems to be ok, my DefaultClassLoader has the o.a.c.maven.deployer.servlet.ShieldedClassLoader as parent and that one has the WebappClassLoader as its parent.

With a look at Carsten ;-), what could be wrong?


Alex


The full stacktrace:

java.lang.ClassCastException: org.apache.xerces.jaxp.DocumentBuilderFactoryImpl at javax.xml.parsers.DocumentBuilderFactory.newInstance(DocumentBuilderFactory.java:98) at org.apache.jasper.xmlparser.ParserUtils.parseXMLDocument(ParserUtils.java:188) at org.apache.jasper.compiler.JspConfig.processWebDotXml(JspConfig.java:110)
        at org.apache.jasper.compiler.JspConfig.init(JspConfig.java:282)
        at 
org.apache.jasper.compiler.JspConfig.findJspProperty(JspConfig.java:347)
        at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:220)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:620)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:602)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:618) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:329)
        at 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:440)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:335)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.cocoon.components.jsp.JSPEngineImpl.executeJSP(JSPEngineImpl.java:74)
        at org.apache.cocoon.reading.JSPReader.generate(JSPReader.java:115)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.cocoon.core.container.spring.avalon.PoolableFactoryBean$ProxyHandler.invoke(PoolableFactoryBean.java:349)
        at $Proxy5.generate(Unknown Source)
at org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.processReader(AbstractProcessingPipeline.java:649) at org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.process(AbstractProcessingPipeline.java:429)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.cocoon.core.container.spring.avalon.PoolableFactoryBean$ProxyHandler.invoke(PoolableFactoryBean.java:349)
        at $Proxy4.process(Unknown Source)
at org.apache.cocoon.components.treeprocessor.sitemap.ReadNode.invoke(ReadNode.java:94) at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:55) at org.apache.cocoon.components.treeprocessor.sitemap.MatchNode.invoke(MatchNode.java:87) at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:77) at org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke(PipelineNode.java:152) at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:77) at org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke(PipelinesNode.java:93) at org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process(ConcreteTreeProcessor.java:239) at org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process(ConcreteTreeProcessor.java:170) at org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:232) at org.apache.cocoon.servlet.RequestProcessor.process(RequestProcessor.java:397) at org.apache.cocoon.servlet.RequestProcessor.service(RequestProcessor.java:162)
        at 
org.apache.cocoon.sitemap.SitemapServlet.service(SitemapServlet.java:61)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.cocoon.blocks.BlockContext$PathDispatcher.forward(BlockContext.java:529) at org.apache.cocoon.blocks.BlockContext$PathDispatcher.forward(BlockContext.java:511) at org.apache.cocoon.blocks.ShieldingBlockServlet.service(ShieldingBlockServlet.java:136)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.cocoon.blocks.DispatcherServlet.service(DispatcherServlet.java:127)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.cocoon.maven.deployer.servlet.ShieldingServlet.service(ShieldingServlet.java:95)
        at 
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:445)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1050) at com.mindquarry.webapp.servlet.AuthenticationFilter.doFilter(AuthenticationFilter.java:216) at org.apache.cocoon.maven.deployer.servlet.ShieldingServletFilter.doFilter(ShieldingServletFilter.java:50) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1041) at org.apache.cocoon.servlet.multipart.MultipartFilter.doFilter(MultipartFilter.java:104) at org.apache.cocoon.maven.deployer.servlet.ShieldingServletFilter.doFilter(ShieldingServletFilter.java:50) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1041)
        at 
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:354)
        at 
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:226)
        at 
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:627)
at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:149) at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:123)
        at 
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:141)
        at org.mortbay.jetty.Server.handle(Server.java:269)
        at 
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:430)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:687)
        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:492)
        at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:199)
        at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:339)
at org.mortbay.jetty.nio.HttpChannelEndPoint.run(HttpChannelEndPoint.java:270) at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:475)



--
Alexander Klimetschek
http://www.mindquarry.com

Reply via email to