【问题标题】:Migration to Jakarta: ClassNotFoundException: com.sun.xml.internal.ws.spi.ProviderImpl迁移到雅加达:ClassNotFoundException:com.sun.xml.internal.ws.spi.ProviderImpl
【发布时间】:2019-09-08 22:20:07
【问题描述】:

根据https://wiki.eclipse.org/New_Maven_Coordinates 和 Maven central 从 Java 8 迁移到 Java 11 并从 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$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 的问题?

提前致谢!

【问题讨论】:

    标签: soap java-11 jakarta-ee


    【解决方案1】:

    我终于找到了解决我的问题的方法。根据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>
    

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

    【讨论】:

    • 您好!我自己遇到了这个问题并尝试了您的解决方法,但仍然遇到问题。有关如何解决此确切问题的任何更新?我尝试使用所有不同类型的依赖项和版本,但 Provider.class 仍然指向错误的 ProviderImpl.class。谢谢!
    【解决方案2】:

    因为我有“同样的问题”,所以把我的 5 美分扔进了戒指。解决这个问题的方法是坚持使用 jaxws-rt 包的第二版,因为 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'
    

    【讨论】:

    • 谢谢!这是唯一对我有用的解决方案!
    猜你喜欢
    • 2022-01-24
    • 1970-01-01
    • 2021-09-20
    • 2023-02-14
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多