我们的产品基于 eclipse RCP 和 OSGi 框架构建。 我已将代码从 JDK1.8 升级到 JDK11。在代码中,我使用
MessageFactory.newInstance().createMessage()
创建 SOAP 消息,但在 JDK11 上运行时出现以下情况。
javax.xml.soap.SOAPException: Unable to create message factory for SOAP: Unable to create SAAJ meta-factoryProvider com.sun.xml.messaging.saaj.soap.SAAJMetaFactoryImpl not found
我知道 JDK11 没有 JDK1.8 早期就有的包
com.sun.xml.messaging.saaj.soap
。因此,我添加了 saaj-impl-1.5.1
的依赖项及其所需的传递依赖项。
我还尝试添加系统属性来指定 MessageFactory
的实现,但仍然遇到相同的错误。也尝试过较低版本的saaj-impl
,但错误仍然存在。
我已经尝试了打包为 JAR 后无法创建 SAAJ 元工厂和无法创建 SAAJ 元工厂:未找到提供程序 com.sun.xml.internal.messaging.saaj.soap.SAAJMetaFactoryImpl 中提到的解决方案
注意:如果我使用基于 jar 的依赖项,它工作正常,但当使用相同版本的基于插件的依赖项时,它不起作用。类加载器似乎出了问题。
能够通过添加依赖项来解决此问题https://mvnrepository.com/artifact/org.glassfish.hk2/osgi-resource-locator。 Saaj-impl 还具有以 OSGi 方式加载服务的机制,为了使其正常工作,我们需要这种依赖关系。 在您使用 saaj-api 和 saaj-impl 的插件的 manifest.mf 中添加此依赖项
我也有同样的问题!使用Maven,只需在pom.xml中添加这个依赖即可?