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

2022-09-01 22:34:47

为了测试应用程序,我正在创建 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后找不到这个类。任何提示或指示都将大大赞赏。


答案 1

我刚刚向我的项目添加了以下依赖项

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

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

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

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


答案 2

我正在使用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'


推荐