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

问题描述 投票:0回答:9

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

java -jar
命令运行它时,我收到此异常。

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

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

这是我在 Postman 中得到的回复。

有什么想法可以让我查找问题。

java xml spring soap spring-ws
9个回答
40
投票

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

35
投票

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 共享的模块

(通过压缩的 SOAP Web 服务项目复制了 NoClassDefError 和解决方法,网址为 https://spring.io/guides/gs/having-web-service/


34
投票

是的,在 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:无法创建SAAJ元工厂:未找到Provider com.sun.xml.internal.messaging.saaj.soap.SAAJMetaFactoryImpl。 这可以通过添加以下依赖来解决。

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

希望,有帮助!


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

<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 服务器 Github-SpringBoot Soap 客户端


15
投票
我导入了这个来解决问题:

https://mvnrepository.com/artifact/javax.xml.soap/javax.xml.soap-api/1.4.0


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

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

1
投票
缺少 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>
    
    

0
投票
我知道这已经对上述所有人关闭,但即使我添加了,我仍然面临这个问题 类路径中的 jakarta-xml.soap-api 和 saaj jar。

我缺少让它工作的任何东西。也尝试使用 javax-.xml-soap-api 而不是 jakarta jar,但仍然出现相同的错误。不知怎的,它无法识别该 jar。


0
投票
我更新了 spring-ws-core 版本并使用 jakarta.xml.soap-api 和 saaj-impl 依赖项最新版本。

<dependency> <groupId>org.springframework.ws</groupId> <artifactId>spring-ws-core</artifactId> <version>4.0.6</version> </dependency> <dependency> <groupId>jakarta.xml.soap</groupId> <artifactId>jakarta.xml.soap-api</artifactId> <version>3.0.1</version> </dependency> <dependency> <groupId>com.sun.xml.messaging.saaj</groupId> <artifactId>saaj-impl</artifactId> <version>3.0.3</version> </dependency>
    
© www.soinside.com 2019 - 2024. All rights reserved.