簡體   English   中英

獲取 java.lang.ClassNotFoundException: com.sun.xml.internal.ws.spi.ProviderImpl 盡管定義了依賴項

[英]Getting java.lang.ClassNotFoundException: com.sun.xml.internal.ws.spi.ProviderImpl despite the dependencies are defined

盡管我已經定義了我在下面添加的相關依賴項,但當我的應用程序調用 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>

ps servlet 容器是Apache Tomcat 9.0.4

ps Java 版本: 9.0.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>

似乎您可能需要包含此依賴項:

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

在雅加達時代的今天,我需要以下兩個依賴:

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

我覺得很奇怪的一件事是第二個依賴項不是來自雅加達,我認為所有這些實現都已遷移。 它有效,但如果有人能對此發表評論,我將不勝感激。

似乎類com.sun.xml.internal.ws.spi.ProviderImpljdk-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 可能會解決問題。

我在從 Java 8 升級到 Java 11 時遇到了同樣的問題。

問題是ForkJoinPool 中行為改變,該類加載器是 jdk9 系統類加載器,而不是主線程類加載器,它會產生難以解決的 ClassNotFound 異常。

在這個答案中更好地解釋了https://stackoverflow.com/a/59444016/878015

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM