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.
java -jar
My service sends a simple soap request and the server response is:
"exception": "java.lang.NoClassDefFoundError", "message": "javax/xml/soap/SOAPException",
That's the response I get in Postman.
Any ideas where I can look for the problem.
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.
java.xml.soap
javax.xml.soap
java.xml.ws
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
$MY_JRE8_HOME/bin/java -jar my.jar
java --add-modules java.xml.ws -jar my.jar
Longer term, JavaSE projects that use modules like java.xml.ws must explicitly include the module like other libraries.
See https://stackoverflow.com/a/46359097 See JDK 9 Migration Guide: Modules Shared with JEE Not Resolved by Default
(Reproduced NoClassDefError and workarounds with zipped SOAP web service project at https://spring.io/guides/gs/producing-web-service/)
2.1m questions
2.1m answers
60 comments
57.0k users