迁移到雅加达:ClassNotFoundException:com.sun.xml.internal.ws.spi.ProviderImpl
Migration to Jakarta: ClassNotFoundException: com.sun.xml.internal.ws.spi.ProviderImpl
从 Java 8 迁移到 Java 11 并根据 https://wiki.eclipse.org/New_Maven_Coordinates 和 Maven Central 从 EE 切换到最新的 Jakarta 库时,我们在 (仍然基于 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.createException(FactoryFinder.java:31)
at javax.xml.ws.spi.FactoryFinder.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
Getting java.lang.ClassNotFoundException: com.sun.xml.internal.ws.spi.ProviderImpl despite the dependencies are defined 中描述的解决方案不起作用且未使用 Jakarta。
如果我没记错的话,Jarkarta 库不应包含 "com.sun.xml." 包或引用此类,但 javax.xml.ws.spi.Provider 显然仍然引用此类class:
private static final String DEFAULT_JAXWSPROVIDER =
"com.sun"+".xml.internal.ws.spi.ProviderImpl";
那么,有人知道是否有 Jakarta 与包含 ProviderImpl 的缺失库等效,或者我如何解决 Jakarta 的问题?
提前致谢!
我终于找到了解决问题的方法。根据 How to use WebServices on Java 11? package javax.jws does not exist 中给出的答案,JAX-WS 的参考实现应包含在 Java 11:
中
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-ri</artifactId>
<version>2.3.2</version>
<type>pom</type>
</dependency>
不幸的是,使用最新的 maven-compile-plugin 3.8.0 编译具有此依赖项的项目会导致 https://jira.apache.org/jira/browse/MCOMPILER-355 中描述的异常。应该在3.8.1中修复,但是版本还没有。
作为一种解决方法,我让我们的项目使用 Getting java.lang.ClassNotFoundException: com.sun.xml.internal.ws.spi.ProviderImpl despite the dependencies are defined 中给出的提示,并结合了一个额外的依赖项(即 resolver,它也在 pom.xml of jaxws-ri) 以避免后续 java.lang.ClassNotFoundException: com.sun.org.apache.xml.internal.resolver.CatalogManager:
<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>
也许这可以帮助 运行 遇到同样问题的人。
因为我遇到了“同样的问题”,所以把我的 5 美分扔进了戒指。对我来说解决这个问题的是坚持使用 jaxws-rt 包的版本 2,因为版本 3.0.0 确实失败了,结果与上面提到的相同。
所以我以前得到我的 JDK 8 来源 运行 没有任何修改的是:
// https://mvnrepository.com/artifact/com.sun.xml.ws/jaxws-rt
implementation group: 'com.sun.xml.ws', name: 'jaxws-rt', version: '2.3.3' //3.0.0 did not work!
// https://mvnrepository.com/artifact/javax.xml.ws/jaxws-api
implementation group: 'javax.xml.ws', name: 'jaxws-api', version: '2.3.1'
// https://mvnrepository.com/artifact/javax.jws/javax.jws-api
implementation group: 'javax.jws', name: 'javax.jws-api', version: '1.1'
从 Java 8 迁移到 Java 11 并根据 https://wiki.eclipse.org/New_Maven_Coordinates 和 Maven Central 从 EE 切换到最新的 Jakarta 库时,我们在 (仍然基于 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.createException(FactoryFinder.java:31)
at javax.xml.ws.spi.FactoryFinder.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
Getting java.lang.ClassNotFoundException: com.sun.xml.internal.ws.spi.ProviderImpl despite the dependencies are defined 中描述的解决方案不起作用且未使用 Jakarta。
如果我没记错的话,Jarkarta 库不应包含 "com.sun.xml." 包或引用此类,但 javax.xml.ws.spi.Provider 显然仍然引用此类class:
private static final String DEFAULT_JAXWSPROVIDER =
"com.sun"+".xml.internal.ws.spi.ProviderImpl";
那么,有人知道是否有 Jakarta 与包含 ProviderImpl 的缺失库等效,或者我如何解决 Jakarta 的问题?
提前致谢!
我终于找到了解决问题的方法。根据 How to use WebServices on Java 11? package javax.jws does not exist 中给出的答案,JAX-WS 的参考实现应包含在 Java 11:
中<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-ri</artifactId>
<version>2.3.2</version>
<type>pom</type>
</dependency>
不幸的是,使用最新的 maven-compile-plugin 3.8.0 编译具有此依赖项的项目会导致 https://jira.apache.org/jira/browse/MCOMPILER-355 中描述的异常。应该在3.8.1中修复,但是版本还没有。
作为一种解决方法,我让我们的项目使用 Getting java.lang.ClassNotFoundException: com.sun.xml.internal.ws.spi.ProviderImpl despite the dependencies are defined 中给出的提示,并结合了一个额外的依赖项(即 resolver,它也在 pom.xml of jaxws-ri) 以避免后续 java.lang.ClassNotFoundException: com.sun.org.apache.xml.internal.resolver.CatalogManager:
<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>
也许这可以帮助 运行 遇到同样问题的人。
因为我遇到了“同样的问题”,所以把我的 5 美分扔进了戒指。对我来说解决这个问题的是坚持使用 jaxws-rt 包的版本 2,因为版本 3.0.0 确实失败了,结果与上面提到的相同。
所以我以前得到我的 JDK 8 来源 运行 没有任何修改的是:
// https://mvnrepository.com/artifact/com.sun.xml.ws/jaxws-rt
implementation group: 'com.sun.xml.ws', name: 'jaxws-rt', version: '2.3.3' //3.0.0 did not work!
// https://mvnrepository.com/artifact/javax.xml.ws/jaxws-api
implementation group: 'javax.xml.ws', name: 'jaxws-api', version: '2.3.1'
// https://mvnrepository.com/artifact/javax.jws/javax.jws-api
implementation group: 'javax.jws', name: 'javax.jws-api', version: '1.1'