Ich habe einen Web-Service mit Spring erstellt. Es funktioniert gut, wenn es auf meinem eingebetteten Tomcat-Server ausgeführt wird. Wenn ich es jedoch als JAR-Datei packe und mit dem Befehl Java -jar
ausführe, erhalte ich diese Ausnahme.
Mein Dienst sendet eine einfache Seifenanfrage und die Serverantwort lautet:
"exception": "Java.lang.NoClassDefFoundError",
"message": "javax/xml/soap/SOAPException",
Das ist die Antwort, die ich beim Postman bekomme.
Irgendwelche Ideen, wo ich nach dem Problem suchen kann.
JavaSE 8 enthält das Paket Java.xml.soap
.
JavaSE 9 hat das Paket javax.xml.soap
in das Modul Java.xml.ws
verschoben.
Mit JEE gemeinsam genutzte Module (wie Java.xml.ws
) sind in JavaSE 9 enthalten, jedoch
- veraltet zum Entfernen aus einer zukünftigen Version von JavaSE und
- nicht im Standardmodulpfad .
Eine schnelle Problemumgehung ist entweder
- das Glas mit JRE 8 ausführen: $MY_JRE8_HOME/bin/Java -jar my.jar
oder
- fügen Sie ein Modul für JRE 9 hinzu: Java --add-modules Java.xml.ws -jar my.jar
Längerfristig müssen JavaSE-Projekte, die Module wie Java.xml.ws
verwenden, das Modul explizit wie andere Bibliotheken einschließen.
Siehe https://stackoverflow.com/a/46359097
Siehe JDK 9 - Migrationshandbuch: Mit JEE freigegebene Module werden standardmäßig nicht aufgelöst
(Reproduzierter NoClassDefError und Problemumgehungen mit einem gezippten SOAP - Webserviceprojekt unter https://spring.io/guides/gs/producing-web-service/ )
Ich habe dieses importiert, um das Problem zu lösen: https://mvnrepository.com/artifact/javax.xml.soap/javax.xml.soap-api/1.4.0
Füge die folgenden Abhängigkeiten hinzu, es sollte dann funktionieren
<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>
Unter den folgenden Links finden Sie einen laufenden Code (SpringBootSOAPWS + Java10) Github-SpringBoot Soap ServerGithub-SpringBoot Soap Client
Durch Hinzufügen der folgenden Informationen in der POM-Datei wurde das Problem behoben
<!-- 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>