![](/img/trans.png)
[英]JDK8: "java.lang.NoClassDefFoundError: javax/xml/ws/Service"
[英]JDK 11: java.lang.NoClassDefFoundError: javax/xml/ws/handler/soap/SOAPHandler
我们正在从 jdk 8 迁移到 openjdk 11。我们的一些使用 soap 调用第三方 api 的项目失败并出现错误:
java.lang.NoClassDefFoundError: javax/xml/ws/handler/soap/SOAPHandler
在做了一些研究之后,我尝试添加依赖项:
[参考资料:
]
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
</dependency>
<dependency>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.3.0.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>javax.xml.soap</groupId>
<artifactId>javax.xml.soap-api</artifactId>
<version>1.3.5</version>
</dependency>
不工作。 我可以了解替代方案吗?
在您的依赖项中包含jaxws-api
:
<dependency>
<groupId>javax.xml.ws</groupId>
<artifactId>jaxws-api</artifactId>
<version>2.3.1</version>
</dependency>
javax
API 已过渡到Jakarta
,因此在 2020 年,正确的依赖项如下:
<dependency>
<groupId>jakarta.xml.ws</groupId>
<artifactId>jakarta.xml.ws-api</artifactId>
<version>2.3.3</version>
</dependency>
这是一篇总结发生的事情的文章: Java Magazine - Transition from Java EE to Jakarta EE
由于这是谷歌上的第一个结果,我的问题是由于在 Tomcat 公共文件夹/usr/local/tomcat/lib
上有一个需要javax.xml.ws
类的 jar。
Bootstrap
|
System
|
Common
/ \
Webapp1 Webapp2 ...
在 Java 8 上,公共类加载器可以加载这些类,因为它们位于 Java JRE 本身上,但在 Java 11 上, javax.xml.ws
类位于 Webapp1 上,Tomcat 公共类加载器无法加载这些类。
对我来说,解决方案是不再将 jar 部署到 Tomcat 公共 lib 文件夹中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.