打包为 JAR 后无法创建 SAAJ 元工厂
Unable to create SAAJ meta-factory after packaging as JAR
为了测试应用程序,我正在创建 SOAP 消息。这在 运行 直接从 Eclipse (Oxygen.1a) 中工作但在打包为 运行nable 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";
但我完全不知道为什么在打包到 运行nable JAR 后找不到这个 class。任何提示或指示将不胜感激。
我刚刚将以下 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 工厂的完全限定名称 class 并且它工作:
com.sun.xml.messaging.saaj.soap.SAAJMetaFactoryImpl
javax.xml.soap.saaj-api好像被弃用了。
非常奇怪的是,一个名为 com.sun
的包可以正常工作。
无论如何,它有效。
我添加下面两个依赖已经解决了问题
<dependency>
<groupId>com.sun.xml.messaging.saaj</groupId>
<artifactId>saaj-impl</artifactId>
<version>1.5.1</version>
</dependency>
<dependency>
<groupId>javax.xml.soap</groupId>
<artifactId>saaj-api</artifactId>
<version>1.3.5</version>
</dependency>
我正在使用 Spring Boot 2.4.0 和 Java 11。这对我有用:
implementation 'javax.xml.ws:jaxws-api:2.3.1'
implementation 'javax.jws:javax.jws-api:1.1'
implementation 'com.sun.xml.messaging.saaj:saaj-impl:1.5.1'
implementation 'jakarta.xml.bind:jakarta.xml.bind-api:2.3.2'
implementation 'org.glassfish.jaxb:jaxb-runtime:2.3.2'
上面的答案(添加 saaj-impl 和 saak-api)适用于大多数项目,但我发现如果您的项目依赖于 javax.xml webservices-api,您还需要删除该依赖项,以停止在 Java 11.
中出现该错误
Maven 中删除 的依赖示例:
<dependency>
<groupId>javax.xml</groupId>
<artifactId>webservices-api</artifactId>
<version>2.0.1</version>
</dependency>
我正在使用 Java 11 以及
implementation group: 'com.sun.xml.messaging.saaj', name: 'saaj-impl', version: '1.5.2'
添加
implementation group: 'javax.xml.soap', name: 'javax.xml.soap-api', version: '1.4.0'
但必须关闭 implementation group: 'com.sun.xml.messaging.saaj', name: 'saaj-impl', version: '1.5.2'
将我的 jdk 切换到 11 后,我遇到了同样的问题。
将 apache.cxf jar 升级到 3.5.1 解决了我的 problem.Was 使用 3.1.2 和 jdk 1.8
为了测试应用程序,我正在创建 SOAP 消息。这在 运行 直接从 Eclipse (Oxygen.1a) 中工作但在打包为 运行nable 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";
但我完全不知道为什么在打包到 运行nable JAR 后找不到这个 class。任何提示或指示将不胜感激。
我刚刚将以下 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 工厂的完全限定名称 class 并且它工作:
com.sun.xml.messaging.saaj.soap.SAAJMetaFactoryImpl
javax.xml.soap.saaj-api好像被弃用了。
非常奇怪的是,一个名为 com.sun
的包可以正常工作。
无论如何,它有效。
我添加下面两个依赖已经解决了问题
<dependency>
<groupId>com.sun.xml.messaging.saaj</groupId>
<artifactId>saaj-impl</artifactId>
<version>1.5.1</version>
</dependency>
<dependency>
<groupId>javax.xml.soap</groupId>
<artifactId>saaj-api</artifactId>
<version>1.3.5</version>
</dependency>
我正在使用 Spring Boot 2.4.0 和 Java 11。这对我有用:
implementation 'javax.xml.ws:jaxws-api:2.3.1'
implementation 'javax.jws:javax.jws-api:1.1'
implementation 'com.sun.xml.messaging.saaj:saaj-impl:1.5.1'
implementation 'jakarta.xml.bind:jakarta.xml.bind-api:2.3.2'
implementation 'org.glassfish.jaxb:jaxb-runtime:2.3.2'
上面的答案(添加 saaj-impl 和 saak-api)适用于大多数项目,但我发现如果您的项目依赖于 javax.xml webservices-api,您还需要删除该依赖项,以停止在 Java 11.
中出现该错误Maven 中删除 的依赖示例:
<dependency>
<groupId>javax.xml</groupId>
<artifactId>webservices-api</artifactId>
<version>2.0.1</version>
</dependency>
我正在使用 Java 11 以及
implementation group: 'com.sun.xml.messaging.saaj', name: 'saaj-impl', version: '1.5.2'
添加
implementation group: 'javax.xml.soap', name: 'javax.xml.soap-api', version: '1.4.0'
但必须关闭 implementation group: 'com.sun.xml.messaging.saaj', name: 'saaj-impl', version: '1.5.2'
将我的 jdk 切换到 11 后,我遇到了同样的问题。 将 apache.cxf jar 升级到 3.5.1 解决了我的 problem.Was 使用 3.1.2 和 jdk 1.8