2

path を介してxercesImpl.jarで利用できるクラス DocumentImpl が必要ですorg/apache/xerces/dom/DocumentImpl。しかし、コードが見つからないために失敗しますcom/sun/org/apache/xerces/internal/dom/DocumentImpljaxp-ri.jarをクラスパスに追加すると機能しますが、すでにクラスがある場合はjaxp-ri.jarを使用したくありません。

クラスローディング ポリシーから、xercesImpl.jar が最初にロードされます。org/apache/xerces/dom/の代わりにパスを使用するようにコードに指示する方法はありcom/sun/org/apache/xerces/internal/dom/ますか? JVM引数経由?

とにかく 2 番目のパスが使用されるのはなぜですか?

Websphere アプリケーション サーバーでサーブレットを実行しています。ありがとうございました

編集: これが私のトレースです:

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 に答える