[英]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.