繁体   English   中英

java.lang.NoClassDefFoundError : javax/xml/soap/SOAPException

[英]java.lang.NoClassDefFoundError : javax/xml/soap/SOAPException

我使用 Spring 创建了一个 Web 服务。 在我的嵌入式 tomcat 服务器上运行它时它工作正常。 但是,当我将其打包为 JAR 文件并使用java -jar命令运行它时,我收到此异常。

我的服务发送一个简单的soap请求,服务器响应是:

 "exception": "java.lang.NoClassDefFoundError",
    "message": "javax/xml/soap/SOAPException",

这就是我在 Postman 中得到的回应。

我可以在哪里寻找问题的任何想法。

JavaSE 8 包括包java.xml.soap
JavaSE 9 将包javax.xml.soap移动到模块java.xml.ws
与 JEE 共享的模块(如java.xml.ws )包含在 JavaSE 9 中,但
- 不推荐从 JavaSE 的未来版本中删除,以及
- 不在默认模块路径上

一个快速的解决方法是
- 使用 JRE 8 运行 jar: $MY_JRE8_HOME/bin/java -jar my.jar ,或
- 为 JRE 9 添加一个模块: java --add-modules java.xml.ws -jar my.jar

从长远来看,使用java.xml.ws模块的 JavaSE 项目必须像其他库一样显式包含该模块。

https://stackoverflow.com/a/46359097
请参阅JDK 9 迁移指南:默认情况下未解析与 JEE 共享的模块

(在https://spring.io/guides/gs/production-web-service/使用压缩的 SOAP Web 服务项目复制 NoClassDefError 和解决方法)

在 pom 文件中添加以下内容解决了问题

<!-- https://mvnrepository.com/artifact/javax.xml.soap/javax.xml.soap-api -->
<dependency>
    <groupId>javax.xml.soap</groupId>
    <artifactId>javax.xml.soap-api</artifactId>
    <version>1.4.0</version>
</dependency>

是的,在 Java 11 中 java.xml.soap 被完全删除了。 java.lang.NoClassDefFoundError: javax/xml/soap/SOAPException可以通过添加以下依赖项来删除。

<dependency>
    <groupId>jakarta.xml.soap</groupId>
    <artifactId>jakarta.xml.soap-api</artifactId>
    <version>2.0.0-RC3</version>
</dependency>

但是稍后,您会遇到, javax.xml.soap.SOAPException: Unable to create SAAJ meta-factory: Provider com.sun.xml.internal.messaging.saaj.soap.SAAJMetaFactoryImpl not found 这可以通过添加以下依赖项来解决。

<dependency>
    <groupId>com.sun.xml.messaging.saaj</groupId>
    <artifactId>saaj-impl</artifactId>
    <version>1.5.1</version>
</dependency>

希望能帮助到你!

添加以下依赖项,它应该可以工作

<dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.3.0</version>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-core</artifactId>
        <version>2.3.0</version>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-impl</artifactId>
        <version>2.3.0</version>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.messaging.saaj</groupId>
        <artifactId>saaj-impl</artifactId>
        <version>1.5.0</version>
    </dependency>
    <dependency>
        <groupId>javax.xml.ws</groupId>
        <artifactId>jaxws-api</artifactId>
        <version>2.2.6</version>
    </dependency>

运行一段代码请参考以下链接(SpringBootSOAPWS + Java10) Github-SpringBoot Soap Server Github-SpringBoot Soap Client

添加此依赖项将解决该问题。

    <dependency>
        <groupId>com.sun.xml.messaging.saaj</groupId>
        <artifactId>saaj-impl</artifactId>
        <version>1.5.0</version>
    </dependency>

缺少 JAX-WS 依赖库“jaxws-api.jar”。 尝试:

  • compile group: 'javax.xml.ws', name: 'jaxws-api', version: '2.3.1' - 对于 gradle 或:

     <dependency> <groupId>javax.xml.ws</groupId> <artifactId>jaxws-api</artifactId> <version>2.3.1</version> </dependency>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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