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=16211>. 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=16211 Classloader problems with Xerces Summary: Classloader problems with Xerces Product: Tomcat 4 Version: 4.1.18 Platform: PC OS/Version: Windows NT/2K Status: NEW Severity: Major Priority: Other Component: Unknown AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] Hi, I'm running a JSP application, and have got some problems with the Tomcat's classloader. My application uses Xerces 2.0.1 (located on the application's WEB-INF/lib directory), and Tomcat seems to use Xerces 2.2.0 (located on Tomcat's common/endorsed directory). The exception I get when try to do some DOM serialization using Xerces is: -- java.lang.NoSuchMethodError at org.apache.xml.serialize.XMLSerializer.reset(XMLSerializer.java:1516) at org.apache.xml.serialize.BaseMarkupSerializer.setOutputCharStream(BaseMarkupSerializer.java:335) at org.apache.xml.serialize.XMLSerializer.<init>(XMLSerializer.java:207) at com.sdspb.messaging.client.XPathWrapper.toXML(Unknown Source) at com.sdspb.messaging.client.XPathWrapper.toXML(Unknown Source) at com.sdspb.messaging.client.XPathWrapper.writeExternal(Unknown Source) at java.io.ObjectOutputStream.outputObject(ObjectOutputStream.java:1167) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:361) at java.io.ObjectOutputStream.outputClassFields(ObjectOutputStream.java:1822) at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:475) at java.io.ObjectOutputStream.outputObject(ObjectOutputStream.java:1209) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:361) at java.io.ObjectOutputStream.outputClassFields(ObjectOutputStream.java:1822) at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:475) at java.io.ObjectOutputStream.outputObject(ObjectOutputStream.java:1209) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:361) at sun.rmi.server.UnicastRef.marshalValue(UnicastRef.java:263) at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:101) at com.sdspb.messaging.rmi.server.RMIMessagingServer_Stub.send(Unknown Source) at com.sdspb.messaging.rmi.client.RMIMessaging.send(Unknown Source) at com.sdspb.messaging.presentation.MessageDispatcher.run(Unknown Source) -- It seems that the classloader is trying to use the wrong Xerces classes, not applying the precedence defined for Tomcat, which says that the application local libraries are searched first: * /WEB-INF/classes of your web application * /WEB-INF/lib/*.jar of your web application * Bootstrap classes of your JVM * System class loader classses (described above) * $CATALINA_HOME/common/classes * $CATALINA_HOME/common/endorsed/*.jar * $CATALINA_HOME/common/lib/*.jar * $CATALINA_HOME/shared/classes * $CATALINA_HOME/shared/lib/*.jar I've tried to move the endorsed Xerces libraries to the Tomcat's "server/lib" directory, to make sure only the Tomcat internals use the Xerces 2.2.0, but then I get the following startup exception: -- 2003-01-17 11:36:23 ContextConfig[/contingency] Parse error in default web.xml java.lang.NullPointerException at org.apache.commons.digester.Digester.getXMLReader(Digester.java:892) at org.apache.commons.digester.Digester.parse(Digester.java:1495) at org.apache.catalina.startup.ContextConfig.defaultConfig(ContextConfig.java:548) at org.apache.catalina.startup.ContextConfig.start(ContextConfig.java:638) at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:243) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:166) at org.apache.catalina.core.StandardContext.start(StandardContext.java:3567) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1188) at org.apache.catalina.core.StandardHost.start(StandardHost.java:738) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1188) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:347) at org.apache.catalina.core.StandardService.start(StandardService.java:497) at org.apache.catalina.core.StandardServer.start(StandardServer.java:2189) at org.apache.catalina.startup.Catalina.start(Catalina.java:512) at org.apache.catalina.startup.Catalina.execute(Catalina.java:400) at org.apache.catalina.startup.Catalina.process(Catalina.java:180) at java.lang.reflect.Method.invoke(Native Method) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:203) -- Finally, I've replaced the Xerces 2.2.0 libs by the Xerces 2.0.1 libs, in the "common/endorsed" directory, and it all worked fine. But this does not look like the best solution, as it may not be applicable to all cases. Thanks! []'s Tomy Inhauser -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>