Soap 迁移到雅加达:ClassNotFoundException:com.sun.xml.internal.ws.spi.ProviderImpl

Soap 迁移到雅加达:ClassNotFoundException:com.sun.xml.internal.ws.spi.ProviderImpl,soap,java-11,jakarta-ee,Soap,Java 11,Jakarta Ee,根据和Maven central从Java 8迁移到Java 11并从EE切换到最新的雅加达库时,我们(仍然基于SOAP)客户端应用程序中出现以下运行时异常: 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.creat

根据和Maven central从Java 8迁移到Java 11并从EE切换到最新的雅加达库时,我们(仍然基于SOAP)客户端应用程序中出现以下运行时异常:

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:31)
        at javax.xml.ws.spi.FactoryFinder$1.createException(FactoryFinder.java:28)
        at javax.xml.ws.spi.ServiceLoaderUtil.newInstance(ServiceLoaderUtil.java:73)
        at javax.xml.ws.spi.FactoryFinder.find(FactoryFinder.java:82)
        at javax.xml.ws.spi.Provider.provider(Provider.java:66)
        at javax.xml.ws.Service.<init>(Service.java:82)
        at [...]
Caused by: java.lang.ClassNotFoundException: com.sun.xml.internal.ws.spi.ProviderImpl
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
        at javax.xml.ws.spi.ServiceLoaderUtil.nullSafeLoadClass(ServiceLoaderUtil.java:60)
        at javax.xml.ws.spi.ServiceLoaderUtil.safeLoadClass(ServiceLoaderUtil.java:93)
        at javax.xml.ws.spi.ServiceLoaderUtil.newInstance(ServiceLoaderUtil.java:71)
        ... 5 more
那么,有人知道是否有一个雅加达等价于包含ProviderImpl的缺少的库,或者我如何解决雅加达的问题吗


提前谢谢

我终于找到了解决问题的方法。根据JAX-WS参考实现中给出的答案,JAX-WS应该包含在Java 11中:

<dependency>
  <groupId>com.sun.xml.ws</groupId>
  <artifactId>jaxws-ri</artifactId>
  <version>2.3.2</version>
  <type>pom</type>
</dependency>

com.sun.xml.ws
. 它应该在3.8.1中修复,但该版本尚未提供

作为一种解决方法,我让我们的项目使用中给出的提示,并结合一个额外的依赖项(即解析程序,它也链接在jaxws ri的pom.xml中),以避免随后出现java.lang.ClassNotFoundException:com.sun.org.apache.xml.internal.resolver.CatalogManager:


com.sun.xml.ws
rt
2.3.2
com.sun.org.apache.xml.internal
分解器
20050927

也许这有助于某人遇到同样的问题。

像我遇到“同样的问题”一样把我的5美分扔进拳击场。解决这个问题的方法是坚持使用jaxws rt包的版本2,因为版本3.0.0确实失败了,结果与上面提到的相同

因此,我过去在不做任何修改的情况下运行JDK 8源代码的方法是:


// https://mvnrepository.com/artifact/com.sun.xml.ws/jaxws-rt
实现组:“com.sun.xml.ws”,名称:“jaxws-rt”,版本:“2.3.3”//3.0.0不起作用!
// https://mvnrepository.com/artifact/javax.xml.ws/jaxws-api
实现组:“javax.xml.ws”,名称:“jaxws-api”,版本:“2.3.1”
// https://mvnrepository.com/artifact/javax.jws/javax.jws-api
实现组:“javax.jws”,名称:“javax.jws api”,版本:“1.1”

问候!我自己也遇到了这个问题,并尝试了您的解决方法,但仍然存在问题。有关如何解决此问题的任何更新?我尝试使用所有不同类型的依赖项和版本,但Provider.class仍然指向错误的ProviderImpl.class。谢谢
<dependency>
  <groupId>com.sun.xml.ws</groupId>
  <artifactId>jaxws-ri</artifactId>
  <version>2.3.2</version>
  <type>pom</type>
</dependency>
<dependency>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>rt</artifactId>
    <version>2.3.2</version>
</dependency>

<dependency>
    <groupId>com.sun.org.apache.xml.internal</groupId>
    <artifactId>resolver</artifactId>
    <version>20050927</version>
</dependency>