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/01/17 17:10:40 UTC

DO NOT REPLY [Bug 16211] New: - Classloader problems with Xerces

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: tomcat-dev@jakarta.apache.org
        ReportedBy: tomy@softwaredesign.com.br


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:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>