【问题标题】:Getting java.lang.ClassNotFoundException: com.sun.xml.internal.ws.spi.ProviderImpl despite the dependencies are defined获取 java.lang.ClassNotFoundException: com.sun.xml.internal.ws.spi.ProviderImpl 尽管定义了依赖项
【发布时间】:2018-08-12 22:13:40
【问题描述】:

尽管我已经定义了如下添加的相关依赖项,但当我的应用程序调用 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>

附言servlet 容器是Apache Tomcat 9.0.4

附言Java 版本:9.0.1

【问题讨论】:

    标签: java maven tomcat jax-ws webservice-client


    【解决方案1】:

    @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>
    

    【讨论】:

      【解决方案2】:

      看来您可能需要包含此依赖项:

      <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>
      

      【讨论】:

      • 这个答案。人们!这两个依赖项是不同的。一个是rt,另一个是jaxws-rt。添加此依赖项后,如果您收到 SOAPVersion 异常,请将版本升级到最新版本。在撰写本文时,最新版本是 rt 是 2.3.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,我认为所有这些实现都已迁移。它有效,但如果有人可以对此发表评论,我将不胜感激。

      【讨论】:

      • 我同意。我在 Android 上遇到了 com.sun.xml.ws:jaxws-rt 的问题,因为该库使用的是 Android 上不可用的 Java API。我期待“雅加达时代”与平台无关。
      【解决方案4】:

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

      【讨论】:

      • 降级到JDK8不是解决办法
      【解决方案5】:

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

      问题是behavior in ForkJoinPool的变化,哪个类加载器是jdk9系统类加载器,而不是主线程类加载器,会产生难以解决的ClassNotFound异常。

      这个答案更好地解释https://stackoverflow.com/a/59444016/878015

      【讨论】:

        猜你喜欢
        • 2017-01-05
        • 1970-01-01
        • 1970-01-01
        • 2022-11-29
        • 2017-01-12
        • 2017-05-18
        • 2021-11-23
        • 1970-01-01
        • 2016-11-09
        相关资源
        最近更新 更多