java.lang.NoClassDefFoundError : javax/xml/soap/SOAPException [英] java.lang.NoClassDefFoundError : javax/xml/soap/SOAPException
问题描述
我使用 Spring 创建了一个 Web 服务.在我的嵌入式 tomcat 服务器上运行它时它工作正常.但是,当我将其打包为 JAR 文件并使用 java -jar
命令运行它时,我收到此异常.
I have created a Web Service using Spring. It works fine when running it on my embedded tomcat server. However when I package it as a JAR file and run it with java -jar
command, I am receiving this exception.
我的服务发送一个简单的soap请求,服务器响应是:
My service sends a simple soap request and the server response is:
"exception": "java.lang.NoClassDefFoundError",
"message": "javax/xml/soap/SOAPException",
这是我在 Postman 中得到的回复.
That's the response I get in Postman.
任何我可以查找问题的想法.
Any ideas where I can look for the problem.
推荐答案
JavaSE 8 包含包 java.xml.soap
.
JavaSE 9 将包 javax.xml.soap
移动到模块 java.xml.ws
.
与 JEE 共享的模块(如 java.xml.ws
)包含在 JavaSE 9 中,但
- 已弃用,以便从未来版本的JavaSE,和
- 不是默认的模块路径.
JavaSE 8 includes package java.xml.soap
.
JavaSE 9 moved package javax.xml.soap
to the module java.xml.ws
.
Modules shared with JEE (like java.xml.ws
) are included in JavaSE 9, but are
- deprecated for removal from a future version of JavaSE, and
- 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
A quick workaround is to either
- run the jar with JRE 8: $MY_JRE8_HOME/bin/java -jar my.jar
, or
- add a module for JRE 9: java --add-modules java.xml.ws -jar my.jar
从长远来看,使用 java.xml.ws
等模块的 JavaSE 项目必须像其他库一样显式包含该模块.
Longer term, JavaSE projects that use modules like java.xml.ws
must explicitly include the module like other libraries.
参见 https://stackoverflow.com/a/46359097
请参阅 JDK 9 迁移指南: 与 JEE 共享的模块默认未解析
(在 https://spring.io/guides/gs/production-web-service/)
这篇关于java.lang.NoClassDefFoundError : javax/xml/soap/SOAPException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!