为了测试应用程序,我创建了SOAP消息。这在直接从Eclipse(Oxygen.1a)运行时有效,但在打包为可运行的jar(选项:package required libraries into generated 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";
但我绝对不知道为什么它是无法找到这个类后, Package 到一个可运行的插件。任何提示或方向将大大appreciated。
8条答案
按热度按时间cgvd09ve1#
我刚刚将以下dependency添加到我的项目中:
如果您使用的是1.5.1之前的版本,则需要使用以下行创建文件
META-INF/services/javax.xml.soap.SAAJMetaFactory
,以提供SAAJ工厂类的完全限定名,并且它可以工作:javax.xml.soap.saaj-api似乎被抛弃了。非常奇怪的是,一个名为
com.sun
的软件包是可以工作的。不管怎么说,它起作用了。agyaoht72#
当我把jdk换成11的时候,我也遇到了同样的问题。将apache.cxf jar升级到3.5.1解决了我的问题。
kyxcudwk3#
我使用Java 11,除了
添加
但必须关闭
implementation group: 'com.sun.xml.messaging.saaj', name: 'saaj-impl', version: '1.5.2'
2uluyalo4#
我通过添加以下两个依赖项解决了这个问题
ezykj2lf5#
Sping Boot 2.4.0和Java 11。这就是我的工作:
uajslkp66#
上面的答案(添加saaj-impl和saak-api)适用于大多数项目,但我发现,如果您的项目依赖于javax.xml webservices-api,则还需要删除该依赖项,以防止在Java 11中出现该错误。
Maven中要remove的依赖示例:
h4cxqtbf7#
如果您使用的是Weblogic,请在weblogic.xml文件中更改参数
prefer-web-inf-classes
的值。对我很有效。im9ewurl8#
另一个让它工作的答案是...
我正在从Springboot 2更改到版本3。我包含了一个库,它通过/在外部交付的Jar中使用一些SOAP请求。
为了解决这个问题,我必须包括这两个**jar:
没有
jaxb-impl
工件给了我一个异常:java.lang.NoClassDefFoundError; message=com/sun/xml/bind/api/TypeReference
。我刚查了缺少的类包含在哪个Jar中。参见https://stackoverflow.com/a/45429691/845117
这个pom versions 的设置确实对我有用。有较新的库列出,但他们不工作,但导致瘫痪。公平的问题,由Houcem Berrayana在另一个评论,为什么只是 * 这个版本 * 不工作,但没有更大的主要之一.