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

标签 java eclipse 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 后找不到这个类。任何提示或指示将不胜感激。

最佳答案

我刚刚添加了以下 dependency到我的项目:

<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 的包可以正常工作。 无论如何,它有效。

关于java - 打包为 JAR 后无法创建 SAAJ 元工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47199846/

相关文章:

java - Selenium Webdriver 错误 "Element is not clickable at point"PrimeFaces SelectOneMenu

java - Eclipse 中的调试点进入 .class 文件

java - android.support.v7.internal.widget.AdapterViewICS 类型不可见

当我运行 .jnlp 文件时,Java 镜像困惑

java - 访问从另一个 jar 调用的方法

java - VTD-XML 大数据 xPathExpression 不适用于 namespace

java - 无法通过 ReSTLet StringRepresentation 类将 xml 字符串中的属性 "type"转换为 json 字符串

Java:在 Eclipse 中导出 Java 项目(不是作为 JAR)时包含外部 jar

java - 如何通过正则表达式找到特殊模式

python - Python 中的重构(在 Eclipse 中提取新方法)