打包为 JAR 后无法创建 SAAJ 元工厂

新手上路,请多包涵

为了测试应用程序,我正在创建 SOAP 消息。这在直接从 Eclipse (Oxygen.1a) 运行时有效,但在打包为可运行的 jar 后(选项:将所需的库打包到生成的 jar 中)我收到以下错误:

 javax.xml.soap.SOAPException: Unable to create SAAJ meta-factoryProvider com.sun.xml.internal.messaging.saaj.soap.SAAJMetaFactoryImpl not found
    at javax.xml.soap.SAAJMetaFactory.getInstance(SAAJMetaFactory.java:94)
    at javax.xml.soap.MessageFactory.newInstance(MessageFactory.java:138)

触发:

 MessageFactory factory = MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL);

所以我知道 MessageFactory 使用了 sun 包

static private final String DEFAULT_META_FACTORY_CLASS =
    "com.sun.xml.internal.messaging.saaj.soap.SAAJMetaFactoryImpl";

但是我完全不知道为什么在打包到可运行的 JAR 后找不到这个类。任何提示或指示将不胜感激。

原文由 Hakello 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 928
2 个回答

我刚刚将以下 依赖 项添加到我的项目中:

 <dependency>
    <groupId>com.sun.xml.messaging.saaj</groupId>
    <artifactId>saaj-impl</artifactId>
    <version>1.5.1</version>
</dependency>

如果您使用的是早于 1.5.1 的版本,则需要创建文件 META-INF/services/javax.xml.soap.SAAJMetaFactory 并使用以下行来提供 SAAJ 工厂类的完全限定名称并且它有效:

 com.sun.xml.messaging.saaj.soap.SAAJMetaFactoryImpl

javax.xml.soap.saaj-api 似乎已被放弃。非常奇怪的是,一个名为 com.sun 的包可以工作。无论如何,它有效。

原文由 Manoel Campos 发布,翻译遵循 CC BY-SA 4.0 许可协议

将我的 jdk 切换到 11 后,我遇到了同样的问题。将 apache.cxf jar 升级到 3.5.1 解决了我的问题。使用 3.1.2 和 jdk 1.8

原文由 Arif K. 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题