Despite that I have defined the related dependencies as I have added below, getting the java.lang.ClassNotFoundException: com.sun.xml.internal.ws.spi.ProviderImpl
exception when my app makes a call to the web service.
<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 The servlet container is Apache Tomcat 9.0.4
.
ps Java version: 9.0.1
.
The first part of the answer by @reta works for me. These are the relevant dependencies from my 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>
It seems like you may need to include this dependency:
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>rt</artifactId>
<version>2.2.10</version>
</dependency>
Or (haven't checked it yet but should work) you may need to change the scope to import for POM dependency.
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>2.2.10</version>
<type>pom</type>
<scope>import</scope>
</dependency>
Today in the era of Jakarta, I needed the following two dependencies:
<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>
One thing I find quite weird is that the second dependency is not from Jakarta, I thought all of these implementations were migrated. It works, but I'd appreciate if someone could comment on that.
Seems like the class com.sun.xml.internal.ws.spi.ProviderImpl
is not available in 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)
which is available in jdk-8, I wonder if you can use jdk-8 if possible might solve the issue.
I've got the same problem upgrading to Java 11 from Java 8.
The problem was change of behavior in ForkJoinPool , which classloader is as of jdk9 system classloader, not the main thread classloader, it can produce hard to solve ClassNotFound exceptions.
It's better explained in this answer https://stackoverflow.com/a/59444016/878015
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.