【问题标题】:java.lang.NoClassDefFoundError : javax/xml/soap/SOAPExceptionjava.lang.NoClassDefFoundError:javax/xml/soap/SOAPException
【发布时间】:2018-07-15 13:26:50
【问题描述】:

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

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

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

这是我在 Postman 中得到的响应。

我可以找到问题的任何想法。

【问题讨论】:

  • 你是否创建了一个胖罐子,即。依赖项是否与 jar 一起打包?
  • 您的项目中不存在一个类文件。您可能没有正确打包您的 jar 依赖项。如果缺少类文件,则会出现此错误。

标签: java xml spring soap spring-ws


【解决方案1】:

JavaSE 8 包含包 java.xml.soap
JavaSE 9 将包 javax.xml.soap 移至模块 java.xml.ws
与 JEE 共享的模块(如 java.xml.ws)包含在 JavaSE 9 中,但是
- deprecated 用于从 JavaSE 的未来版本中删除,以及
- not on the default module path.

一个快速的解决方法是
- 使用 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 Migration Guide: Modules Shared with JEE Not Resolved by Default

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

【讨论】:

    【解决方案2】:

    在 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>
    

    【讨论】:

    • 为我工作。我的 SOAP-API-Client 代码(Springboot WAR)通过“mvn spring-boot:run”运行良好,但在 Tomcat 8.5 上抛出了这个错误。但是不确定是什么导致“mvn spring-boot:run”首先成功。是不是本地的 JDK/JRE 或 Maven 的底层 jar 在那里发挥了一些作用?
    • 为我工作。 JDK 9; javax.xml.soap:javax.xml.soap-api 1.4.0;还有 com.sun.xml.messaging.saaj:saaj-impl 1.5.1;正如Harisudha所提到的
    【解决方案3】:

    是的,在 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>
    

    希望,它有帮助!

    【讨论】:

    • 我可以确认对于 Java 11 缺少实现:com.sun.xml.messaging.saaj:saaj-impl。我们不需要soap-api 定义。
    • 谢谢!为我工作
    【解决方案4】:

    【讨论】:

      【解决方案5】:

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

      <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

      【讨论】:

        【解决方案6】:

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

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

        【讨论】:

          【解决方案7】:

          缺少 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>
            

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多