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

时间:2018-03-05 09:43:39

标签: 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.10</version>
</dependency>

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

P.S。 servlet容器为Apache Tomcat 9.0.4

P.S。 Java版本:9.0.1

5 个答案:

答案 0 :(得分:5)

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

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

或者(尚未检查但应该可以使用)您可能需要更改范围以导入POM依赖项。

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

答案 1 :(得分:3)

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

        <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,我认为所有这些实现都已迁移。可以,但是如果有人可以对此发表评论,我将不胜感激。

答案 2 :(得分:2)

似乎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来解决这个问题。

答案 3 :(得分:2)

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

<dependency>
  <groupId>javax.xml.ws</groupId>
  <artifactId>jaxws-api</artifactId>
  <version>2.3.1</version>
</dependency>
<dependency>
  <groupId>com.sun.xml.ws</groupId>
  <artifactId>rt</artifactId>
  <version>2.3.1</version>
</dependency>

答案 4 :(得分:0)

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

问题是behavior in ForkJoinPool的更改,该类加载器是jdk9系统类加载器,而不是主线程类加载器,它可以产生难以解决的ClassNotFound实例。

此答案https://stackoverflow.com/a/59444016/878015

中有更好的解释和解决的方法