繁体   English   中英

JDK 11:java.lang.NoClassDefFoundError:javax/xml/ws/handler/soap/SOAPHandler

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

Tomcat 类加载器层次结构

      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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM