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

jdzmm42g  于 2023-11-16  发布在  Spring
关注(0)|答案(8)|浏览(200)

我已经使用Spring创建了一个Web Service。当在我的嵌入式tomcat服务器上运行它时,它工作得很好。然而,当我将它打包为一个JavaScript文件并使用java -jar命令运行它时,我收到了这个异常。
我的服务发送了一个简单的soap请求,服务器的响应是:

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

字符串
这就是我在《 Postman 》中得到的回答。
任何想法,我可以寻找的问题。

y0u0uwnf

y0u0uwnf1#

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

字符串

hjzp0vay

hjzp0vay2#

JavaSE 8包含java.xml.soap包。
JavaSE 9将包javax.xml.soap移动到模块java.xml.ws
与JEE共享的模块(如java.xml.ws)包含在JavaSE 9中,但

  • deprecated用于从JavaSE的未来版本中删除,以及
  • 而不是在默认模块路径上。
    一个快速的解决方法是
  • 使用JRE 8:$MY_JRE8_HOME/bin/java -jar my.jar运行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/producing-web-service/上复制了NoClassDefError和压缩SOAP Web服务项目的解决方法)
wa7juj8i

wa7juj8i3#

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


希望,这有帮助!

dgtucam1

dgtucam14#

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

<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 ServerGithub- SpringBoot Soap Client

nfzehxib

nfzehxib6#

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

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

字符串

raogr8fs

raogr8fs7#

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

字符串

nfeuvbwi

nfeuvbwi8#

我知道这已经对以上所有人关闭了,但我仍然面临这个问题,即使我已经在classpath中添加了jakarta-xml.soap-api和saaj jar。
我缺少的任何东西,使它的工作。尝试使用javax-.xml-soap-API以及而不是jaksocket jar,但仍然相同的错误。不知何故,它无法识别jar。

相关问题