Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何告诉Java8使用我自己的库而不是内部库?_Java_Java 8 - Fatal编程技术网

如何告诉Java8使用我自己的库而不是内部库?

如何告诉Java8使用我自己的库而不是内部库?,java,java-8,Java,Java 8,精确问题: 我有一个在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中,

精确问题: 我有一个在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 JAR

Java6开始,saaj实现是在jre本身中提供的,我们不需要单独的jar。
由于这个原因,我得到了classcast异常。我想通过强制类路径从外部而不是jre本身获取saaj JAR来解决这个问题。

好吧。。。我在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选项-Xbootclasspath我们可以实现这一点

解决方案:

java -Xbootclasspath/p:.\jaxrpc16\saaj-api.jar;.\jaxrpc16\saaj-impl.jar -classpath <myClasses> <myMainClass>
java-Xbootclasspath/p:.\jaxrpc16\saaj api.jar\jaxrpc16\saaj-impl.jar-classpath
参考:

java -Xbootclasspath/p:.\jaxrpc16\saaj-api.jar;.\jaxrpc16\saaj-impl.jar -classpath <myClasses> <myMainClass>

p.S:需要对此做更多的研究,以确保此选项是否安全可靠地使用。

首先,您能否编译自己的
java.lang.String
?@Eugene我不想做任何代码级别的更改,比如更改导入。我想通过命令行调用使用选项来覆盖它。@holi java我刚才提到的字符串库只是一个示例。@idioticarvinth您不能声明其包以
java
开头的类。它们无法编译。@idioticarvinth,既然您已经提到了确切的问题,您可能可以从问题中删除
java.lang.String
的示例。