2015-04-28 3 views
2

Мне нужен класс DocumentImpl, который доступен в xercesImpl.jar по пути org/apache/xerces/dom/DocumentImpl. Но мой код не работает из-за отсутствия com/sun/org/apache/xerces/internal/dom/DocumentImpl. Если я добавлю jaxp-ri.jar к classpath, он работает, но я не хочу использовать jaxp-ri.jar, если у меня уже есть класс.Параметр Java для загрузки класса из не внутреннего пути

Из политики загрузки, сначала загружается мой xercesImpl.jar. Есть ли способ сказать моему коду использовать путь org/apache/xerces/dom/ вместо com/sun/org/apache/xerces/internal/dom/? Через JVM args?

Почему в любом случае используется второй путь?

Я запускаю свой сервлет на сервере приложений websphere. Спасибо

Edit: Вот мой след:

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 
+0

Кто называет DocumentImpl, какую библиотеку вы используете? не зная этих деталей, мы не можем помочь .. боюсь .. – SMA

+0

Я подозреваю, что у вас возникли проблемы с не-Oracle JVM (IBM J9?). Попробуйте установить DocumentBuilderFactory (см. Q14 https://jaxp.java.net/1.4/JAXP-FAQ.html) – artbristol

+0

Да, не Oracle-JVM. Я попытался установить его через: -Djavax.xml.parsers.DocumentBuilderFactory = org.apache.xerces.jaxp.DocumentBuilderFactoryImpl, но этого было недостаточно. – user30137

ответ

0

Я хотел бы попробовать ссылки на класс через его полный путь явно в коде.

Это может быть так же тривиально, как и ваша IDE, автоматически разрешающая нежелательный импорт.

org.apache.xerces.dom.DocumentImpl myVariable;