soap - 迁移到 Jakarta : ClassNotFoundException: com. sun.xml.internal.ws.spi.ProviderImpl

标签 soap java-11 jakarta-ee

根据 https://wiki.eclipse.org/New_Maven_Coordinates 从 Java 8 迁移到 Java 11 并从 EE 切换到最新的 Jakarta 库和 Maven 中心,我们在(仍然基于 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

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 显然仍然如此引用此类:

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中给出的提示进行工作。 ,与附加依赖项(即也在 jaxws-ripom.xml 中链接的 resolver)相结合,以避免后续的 >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>

也许这可以帮助遇到同样问题的人。

关于soap - 迁移到 Jakarta : ClassNotFoundException: com. sun.xml.internal.ws.spi.ProviderImpl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55748392/

相关文章:

java - 使用 Maven 构建 Soap web 项目

java - Android 使用带有 HTTPS 的 Ksoap2 请求

java - 如何使用 Java 的 HttpClient 在慢速流响应主体上超时

web-services - 所有组件的共享 tomcat 服务器或单独的单独实例?

使用 jMeter 3.3 未到达 WCF 端点

php - 带有 ssl 证书和密码的 Soap 服务 (PHP)

java 11 和 spring boot 错误 : this_class should be module-info

java - Tomcat套接字监听超时

java - 使用 Apache Mahout 生成建议的数据模型

java - 测试我的简单 HTTPS 服务器的客户端