[英]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.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 可能會解決問題。
我在從 Java 8 升級到 Java 11 時遇到了同樣的問題。
問題是ForkJoinPool 中的行為改變,該類加載器是 jdk9 系統類加載器,而不是主線程類加載器,它會產生難以解決的 ClassNotFound 異常。
在這個答案中更好地解釋了https://stackoverflow.com/a/59444016/878015
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.