2

我需要类 DocumentImpl,它可以通过 path在xercesImpl.jarorg/apache/xerces/dom/DocumentImpl中获得。但是我的代码由于缺少com/sun/org/apache/xerces/internal/dom/DocumentImpl. 如果我将jaxp-ri.jar添加到类路径中,它可以工作,但我不想使用jaxp-ri.jar,如果我已经有了这个类。

根据类加载策略,我的 xercesImpl.jar 是首先加载的。有没有办法告诉我的代码使用路径org/apache/xerces/dom/而不是com/sun/org/apache/xerces/internal/dom/?通过 JVM 参数?

为什么仍然使用第二条路径?

我在 websphere 应用程序服务器上运行我的 servlet。谢谢

编辑: 这是我的踪迹:

Caused by: java.lang.NoClassDefFoundError: com.sun.org.apache.xerces.internal.dom.DocumentImpl
    at java.lang.ClassLoader.defineClassImpl(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:275)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:74)
    at com.ibm.ws.classloader.CompoundClassLoader._defineClass(CompoundClassLoader.java:833)
    at com.ibm.ws.classloader.CompoundClassLoader.localFindClass(CompoundClassLoader.java:746)
    at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:587)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:665)
    at com.sun.xml.messaging.saaj.soap.SOAPPartImpl.<init>(SOAPPartImpl.java:96)
    at com.sun.xml.messaging.saaj.soap.ver1_1.SOAPPart1_1Impl.<init>(SOAPPart1_1Impl.java:68)
    at com.sun.xml.messaging.saaj.soap.ver1_1.Message1_1Impl.getSOAPPart(Message1_1Impl.java:88)
    at myclass.CreateMessage(myclass.java:1337)

Edit2: 我使用非 Oracle-JVM。我还添加了这些 JVM 参数:

-Dorg.xml.sax.parser=org.apache.xerces.parsers.SAXParser
-Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl
-Djavax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
-Djavax.xml.transform.TransformerFactory=org.apache.xalan.processor.TransformerFactoryImpl
-Djavax.xml.soap.MessageFactory=com.sun.xml.messaging.saaj.soap.MessageFactoryImpl
4

1 回答 1

0

我会尝试通过代码中明确的完整路径引用该类。

它可能就像您的 IDE 自动解决不需要的导入一样微不足道。

org.apache.xerces.dom.DocumentImpl myVariable;
于 2015-04-28T08:15:00.753 回答