获取java.lang.ClassNotFoundException:com.sun.xml.internal.ws.spi.ProviderImpl,尽管定义了依赖项

获取java.lang.ClassNotFoundException:com.sun.xml.internal.ws.spi.ProviderImpl,尽管定义了依赖项,java,maven,tomcat,jax-ws,webservice-client,Java,Maven,Tomcat,Jax Ws,Webservice Client,尽管我已经定义了下面添加的相关依赖项,但当我的应用程序调用web服务时,会得到java.lang.ClassNotFoundException:com.sun.xml.internal.ws.spi.ProviderImpl异常 <dependency> <groupId>javax.xml.ws</groupId> <artifactId>jaxws-api</artifactId> <version>2.2.

尽管我已经定义了下面添加的相关依赖项,但当我的应用程序调用web服务时,会得到
java.lang.ClassNotFoundException:com.sun.xml.internal.ws.spi.ProviderImpl
异常

<dependency>
  <groupId>javax.xml.ws</groupId>
  <artifactId>jaxws-api</artifactId>
  <version>2.2.10</version>
</dependency>

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

javax.xml.ws
JAXWSAPI
2.2.10
com.sun.xml.ws
jaxws-rt
2.2.10
聚甲醛
p、 servlet容器是ApacheTomcat9.0.4


p、 美国Java版本:
9.0.1
似乎类
com.sun.xml.internal.ws.spi.ProviderImpl
jdk-9

jshell> Class.forName("com.sun.xml.internal.ws.spi.ProviderImpl")
|  java.lang.ClassNotFoundException thrown: com.sun.xml.internal.ws.spi.ProviderImpl
|        at URLClassLoader.findClass (URLClassLoader.java:466)
|        at DefaultLoaderDelegate$RemoteClassLoader.findClass (DefaultLoaderDelegate.java:66)
|        at ClassLoader.loadClass (ClassLoader.java:543)
|        at ClassLoader.loadClass (ClassLoader.java:476)
|        at Class.forName0 (Native Method)
|        at Class.forName (Class.java:292)
|        at (#1:1)

它在jdk-8中可用,我想知道如果可能的话,您是否可以使用jdk-8来解决这个问题。

似乎您可能需要包含此依赖项:

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

com.sun.xml.ws
rt
2.2.10
或者(尚未检查,但应该可以工作),您可能需要更改POM依赖项的导入范围

<dependency>
  <groupId>com.sun.xml.ws</groupId>
  <artifactId>jaxws-rt</artifactId>
  <version>2.2.10</version>
  <type>pom</type>
  <scope>import</scope> 
</dependency>

com.sun.xml.ws
jaxws-rt
2.2.10
聚甲醛
进口

@reta回答的第一部分对我有用。以下是我的pom(Java 10)中的相关依赖项:


javax.xml.ws
JAXWSAPI
2.3.1
com.sun.xml.ws
rt
2.3.1

我从Java 8升级到Java 11时遇到同样的问题

问题是类加载器的改变,它是jdk9系统的类加载器,而不是主线程类加载器,它会产生难以解决的ClassNotFound异常


这个答案更好地解释了这一点

今天在雅加达的时代,我需要以下两个依赖项:

        <dependency>
            <groupId>jakarta.xml.ws</groupId>
            <artifactId>jakarta.xml.ws-api</artifactId>
            <version>2.3.3</version>
        </dependency>

        <dependency>
            <groupId>com.sun.xml.ws</groupId>
            <artifactId>jaxws-rt</artifactId>
            <version>2.3.3</version>
        </dependency>

jakarta.xml.ws
jakarta.xml.ws-api
2.3.3
com.sun.xml.ws
jaxws-rt
2.3.3

我觉得很奇怪的一件事是,第二个依赖项不是来自雅加达,我以为所有这些实现都被迁移了。这是可行的,但如果有人能对此发表评论,我将不胜感激。

ty感谢您的回答。人!这两个依赖项是不同的。一个是
rt
,另一个是
jaxws-rt
。添加此依赖项后,如果出现SOAPVersion异常,请将该版本升级到最新版本。在撰写本文时,最新版本is
rt
is 2.3.1降级到JDK8不是一个解决方案
        <dependency>
            <groupId>jakarta.xml.ws</groupId>
            <artifactId>jakarta.xml.ws-api</artifactId>
            <version>2.3.3</version>
        </dependency>

        <dependency>
            <groupId>com.sun.xml.ws</groupId>
            <artifactId>jaxws-rt</artifactId>
            <version>2.3.3</version>
        </dependency>