首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ClassNotFoundException: com.sun.xml.internal.ws.spi.ProviderImpl

ClassNotFoundException: com.sun.xml.internal.ws.spi.ProviderImpl
EN

Stack Overflow用户
提问于 2021-12-23 11:48:40
回答 1查看 6.7K关注 0票数 1

我在build.gradle文件中添加了所有相关的依赖项。尽管如此,当我尝试运行调用SOAP服务时,仍然会出现以下错误。共享依赖项和错误详细信息。使用Java 11,互联网上已经有了很多答案,但似乎都没有用。任何帮助/建议都是值得赞赏的。

代码语言:javascript
运行
复制
dependencies {
    implementation 'org.codehaus.groovy:groovy-all:3.0.2'
    implementation 'javax.jws:javax.jws-api:1.1'

    cxfCodegen "jakarta.annotation:jakarta.annotation-api:1.3.5"
    cxfCodegen "jakarta.xml.ws:jakarta.xml.ws-api:2.3.3"
    cxfCodegen "jakarta.xml.bind:jakarta.xml.bind-api:2.3.3"

    //implementation 'org.apache.cxf:cxf-spring-boot-starter-jaxws:3.5.0'
    //implementation 'javax.xml.bind:jaxb-api:2.3.1'
    compile 'javax.xml.ws:jaxws-api:2.3.1'

    implementation 'com.sun.xml.messaging.saaj:saaj-impl:2.0.1'
    implementation 'javax.xml.soap:javax.xml.soap-api:1.4.0'
    implementation 'javax.xml.soap:saaj-api:1.3.5'

    implementation 'com.sun.xml.ws:jaxws-rt:3.0.2'
    implementation 'com.sun.xml.ws:rt:3.0.2'
    implementation 'com.sun.xml.ws:jaxws-ri:3.0.2'
}

低于错误堆栈跟踪

代码语言:javascript
运行
复制
Exception in thread "main" javax.xml.ws.WebServiceException: Provider com.sun.xml.internal.ws.spi.ProviderImpl not found
    at javax.xml.ws.spi.FactoryFinder$1.createException(FactoryFinder.java:61)
    at javax.xml.ws.spi.FactoryFinder$1.createException(FactoryFinder.java:58)
    at javax.xml.ws.spi.ServiceLoaderUtil.newInstance(ServiceLoaderUtil.java:103)
    at javax.xml.ws.spi.FactoryFinder.find(FactoryFinder.java:112)
    at javax.xml.ws.spi.Provider.provider(Provider.java:96)
    at javax.xml.ws.Service.<init>(Service.java:112)
    at com.example.BLZService.<init>(BLZService.java:40)
    at dummypackage.DummySOAPClient.main(DummySOAPClient.java:21)
Caused by: java.lang.ClassNotFoundException: com.sun.xml.internal.ws.spi.ProviderImpl
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
Caused by: java.lang.ClassNotFoundException: com.sun.xml.internal.ws.spi.ProviderImpl

    at javax.xml.ws.spi.ServiceLoaderUtil.nullSafeLoadClass(ServiceLoaderUtil.java:90)
    at javax.xml.ws.spi.ServiceLoaderUtil.safeLoadClass(ServiceLoaderUtil.java:123)
    at javax.xml.ws.spi.ServiceLoaderUtil.newInstance(ServiceLoaderUtil.java:101)
    ... 5 more
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-23 11:58:12

A2A:在内部引用中可能存在一些问题。

您可以这样回答:JDK 11; JAX-WS; Provider com.sun.xml.internal.ws.spi.ProviderImpl not found

基本上,答案是,您也可以尝试包含一个较老的rt依赖项:

代码语言:javascript
运行
复制
<dependency>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>rt</artifactId>
    <version>2.3.1</version>
</dependency>

以上是maven pom xml格式。

这是您的gradle格式:

代码语言:javascript
运行
复制
implementation 'com.sun.xml.ws:rt:2.3.1'

这很可能解决你的问题。

编辑:在下面的评论中发表讨论:

起作用的依赖关系是:

代码语言:javascript
运行
复制
implementation 'com.sun.xml.ws:jaxws-rt:2.3.2'
implementation 'com.sun.xml.ws:rt:2.3.2'
implementation 'com.sun.xml.ws:jaxws-ri:2.3.2'

在上述依赖项之后,出现了一个与

com.sun.xml.internal.messaging.saaj.soap.SAAJMetaFactoryImpl not found

可以使用兼容的SAAJ依赖项解决以下问题:

代码语言:javascript
运行
复制
implementation 'com.sun.xml.messaging.saaj:saaj-impl:1.5.1'

此外,在添加上述saaj依赖项之后,在添加标题到请求时也会出现问题:

以前的代码:

代码语言:javascript
运行
复制
SOAPMessageContext context; 
SOAPEnvelope envelope = context.getMessage().getSOAPPart().getEnvelope();
SOAPHeader header = envelope.addHeader();

更新的代码,其工作方式:

代码语言:javascript
运行
复制
SOAPHeader header = envelope.getHeader();

关于jaxws-rt运行时依赖关系,请参阅下面的链接:

https://mvnrepository.com/artifact/com.sun.xml.ws/jaxws-rt/2.3.2

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70461758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档