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 cannot be cast to com.sun.xml.messaging.saaj.soap.MessageImpl

旧服务器使用jre 1.5,新服务器使用较新的1.8。在 jre 1.5 中,我们有单独的 saaj jar

java 6 开始,saaj 实现在 jre 本身中提供,我们不需要单独的 jar。 因此,我得到了类广播异常。我想通过强制类路径从外部获取 saaj jar 而不是 jre 本身中的 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 - 如何告诉 Java 8 使用我自己的库而不是内部库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44774390/

相关文章:

java - Netbeans 8.0 中未设置 libs.CopyLibs.classpath 属性

java - Spring Boot 2.0.x 禁用某些配置文件的安全性

java - 请帮助我了解 java1.8 与安全功能的向后兼容性

Java @Contended 与类层次结构

java - 使用非对称加密(公共(public)私钥 Enc)时出现 IllegalBlockSize 异常

java - 使用 Jackson 将 JSON 数据读取到数组/列表中

java - jlabel/按钮格式问题

具有批处理功能的 Java 8 Stream

java - 如何在 lambda 迭代和普通循环之间做出决定?

concurrency - 如果并行处理,为什么在无限的数字流中按素性过滤会永远持续下去?