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

tal*_*a06 12 java tomcat jax-ws webservice-client maven

尽管如此我已经定义了相关的依赖项,如下所示,java.lang.ClassNotFoundException: com.sun.xml.internal.ws.spi.ProviderImpl当我的应用程序调用Web服务时获取异常.

<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>
Run Code Online (Sandbox Code Playgroud)

ps servlet容器是Apache Tomcat 9.0.4.

ps Java版:9.0.1.

小智 10

似乎您可能需要包括以下依赖项:

<dependency>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>rt</artifactId>
    <version>2.2.10</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

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

<dependency>
  <groupId>com.sun.xml.ws</groupId>
  <artifactId>jaxws-rt</artifactId>
  <version>2.2.10</version>
  <type>pom</type>
  <scope>import</scope> 
</dependency>
Run Code Online (Sandbox Code Playgroud)

  • 为这个答案。人!那两个依赖关系是不同的。一个是“ rt”,另一个是“ jaxws-rt”。添加此依赖项后,如果收到SOAPVersion异常,则将版本升级到最新版本。在撰写本文时,最新版本为“ rt”为2.3.1。 (2认同)

Nik*_*iou 8

@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>
Run Code Online (Sandbox Code Playgroud)


Joh*_*Eye 8

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

        <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>
Run Code Online (Sandbox Code Playgroud)

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


小智 -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)
Run Code Online (Sandbox Code Playgroud)

jdk-8 中提供了该功能,我想知道您是否可以使用 jdk-8(如果可能)可以解决该问题。

  • 降级到JDK8不是解决方案 (9认同)