簡體   English   中英

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

[英]ClassNotFoundException: com.sun.xml.internal.ws.spi.ProviderImpl

我已經在 build.gradle 文件中添加了所有相關的依賴項。 盡管如此,當我嘗試運行 Invoke SOAP 服務時仍然出現錯誤。 共享依賴項部分和錯誤詳細信息。 使用 Java 11. 互聯網上已經有很多答案,但似乎都沒有。 任何幫助/建議都將是可觀的。

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'
}

低於錯誤堆棧跟蹤

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

A2A:內部引用可能存在一些問題。

您可以遵循以下答案: JDK 11; JAX-WS; 未找到提供程序 com.sun.xml.internal.ws.spi.ProviderImpl

基本上答案說您也可以嘗試包含較舊的 rt 依賴項:

<dependency>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>rt</artifactId>
    <version>2.3.1</version>
</dependency>

以上是 maven pom xml 格式。

這是為您准備的 gradle 格式:

implementation 'com.sun.xml.ws:rt:2.3.1'

這很可能會解決您的問題。

編輯:在下面的評論中發表討論:

起作用的依賴項是:

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 依賴項來解決:

implementation 'com.sun.xml.messaging.saaj:saaj-impl:1.5.1'

此外,在添加 header 時,在添加上述 saaj 依賴項后添加 header 以請求時出現問題:

以前的代碼:

SOAPMessageContext context; 
SOAPEnvelope envelope = context.getMessage().getSOAPPart().getEnvelope();
SOAPHeader header = envelope.addHeader();

更新的代碼有效:

SOAPHeader header = envelope.getHeader();

請參閱以下鏈接了解 jaxws-rt 運行時依賴項:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM