我使用 Spring 创建了一个 Web 服务。在我的嵌入式 tomcat 服务器上运行它时工作正常。但是,当我将其打包为 JAR 文件并使用
java -jar
命令运行它时,我收到此异常。
我的服务发送一个简单的肥皂请求,服务器响应是:
"exception": "java.lang.NoClassDefFoundError",
"message": "javax/xml/soap/SOAPException",
这是我在 Postman 中得到的回复。
有什么想法可以让我查找问题。
在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>
JavaSE 8 包含包
java.xml.soap
。javax.xml.soap
移至模块 java.xml.ws
。java.xml.ws
)包含在 JavaSE 9 中,但快速解决方法是:
- 使用 JRE 8 运行 jar:
$MY_JRE8_HOME/bin/java -jar my.jar
,或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/)
是的,在 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>
希望,有帮助!
<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)
<dependency>
<groupId>com.sun.xml.messaging.saaj</groupId>
<artifactId>saaj-impl</artifactId>
<version>1.5.0</version>
</dependency>
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>
我缺少让它工作的任何东西。也尝试使用 javax-.xml-soap-api 而不是 jakarta jar,但仍然出现相同的错误。不知怎的,它无法识别该 jar。
<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>