web-dev-qa-db-fra.com

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

J'ai créé un service Web à l'aide de Spring. Cela fonctionne bien lorsque je l'exécute sur mon serveur Tomcat intégré. Cependant, lorsque je le compresse en tant que fichier JAR et l'exécute avec la commande Java -jar, je reçois cette exception.

Mon service envoie une simple demande soap et la réponse du serveur est la suivante:

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

C'est la réponse que je reçois dans Postman.

Toutes les idées où je peux chercher le problème.

7
grangos

JavaSE 8 inclut le package Java.xml.soap.
JavaSE 9 a déplacé le package javax.xml.soap vers le module Java.xml.ws.
Les modules partagés avec JEE (comme Java.xml.ws) sont inclus dans JavaSE 9, mais sont
- obsolète à supprimer d'une future version de JavaSE, et
- pas sur le chemin de module par défaut .

Une solution rapide consiste à
- lancez le pot avec JRE 8: $MY_JRE8_HOME/bin/Java -jar my.jar, ou
- ajouter un module pour JRE 9: Java --add-modules Java.xml.ws -jar my.jar

À plus long terme, les projets JavaSE qui utilisent des modules tels que Java.xml.ws doivent explicitement inclure le module comme les autres bibliothèques.

Voir https://stackoverflow.com/a/46359097
Voir Guide de migration du JDK 9: Modules partagés avec JEE non résolus par défaut

(Reproduction de NoClassDefError et solutions de contournement avec le projet de service Web zipped SOAP à https://spring.io/guides/gs/producing-web-service/ )

7
user9712582

J'ai importé celui-ci pour résoudre le problème: https://mvnrepository.com/artifact/javax.xml.soap/javax.xml.soap-api/1.4.0

4
McCoy

L'ajout de ce qui suit dans le fichier pom a résolu le problème

<!-- 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>
0
Jithin U. Ahmed