我已经使用 Spring 创建了一个 Web 服务。在我的嵌入式 tomcat 服务器上运行时它工作正常。但是,当我将其打包为 JAR 文件并使用 java -jar
命令运行时,我收到此异常。
我的服务发送一个简单的 soap 请求,服务器响应是:
"exception": "java.lang.NoClassDefFoundError",
"message": "javax/xml/soap/SOAPException",
这就是我在 Postman 中得到的回应。
我可以在哪里寻找问题的任何想法。
原文由 grangos 发布,翻译遵循 CC BY-SA 4.0 许可协议
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/producing-web-service/ 复制了 NoClassDefError 和压缩 SOAP web 服务项目的解决方法)