确切的问题:
我有一个在Windows 2003(jre 1.5)中运行的应用程序
现在,它已迁移到Windows 2012(jre 1.8)服务器。在发生以下异常时,

Caller.main:com.sun.xml.internal.messaging.saaj.soap.ver1_1.Message1_1Impl无法转换为com.sun.xml.messaging.saaj.soap.MessageImpl

旧服务器使用 jre 1.5 ,而新服务器使用较新的1.8 。在 jre 1.5 中,我们分别拥有 saaj jars

java 6 起,saaj实现在jre本身中提供,因此我们不需要单独的jar。
因此,我得到了classcast异常。我想通过强制类路径从外部获取saaj jar而不是jre本身中的一个来解决此问题。

最佳答案

嗯...我在weblogic中遇到问题,不得不更改SAAJ的默认实现(默认实现已损坏!)

为了在weblogic中实现这一点,我将其添加到了启动weblogic的命令行中:

-Djavax.xml.soap.MessageFactory=com.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl

因此,对您来说,应该是这样的:
-Djavax.xml.soap.MessageFactory=com.sun.xml.messaging.saaj.soap.MessageFactoryImpl

它应该工作。这样,您就可以告知JVM,这将是SAAJ消息的默认工厂。

PS:嗯,说实话,他们是在weblogic中更改此内容的更多方法,而无需触摸启动脚本,我结束了代码的更改并手动实例化了没有破损的MessageFactoryImpl版本。我发现-Djavax.xml.soap.MessageFactory解决了我的问题,但不允许更改生产服务器的启动脚本。

关于java - 如何告诉Java 8使用我自己的库而不是内部库?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44774390/

10-09 01:29