Springを使用してWebサービスを作成しました。私の組み込みTomcatサーバーでそれを実行するとき、それはうまく働きます。ただし、JARファイルとしてパッケージ化し、Java -jar
コマンド、私はこの例外を受け取っています。
私のサービスは単純な石鹸要求を送信し、サーバーの応答は次のとおりです。
"exception": "Java.lang.NoClassDefFoundError",
"message": "javax/xml/soap/SOAPException",
それが私が郵便配達で受け取る応答です。
問題を探すことができるアイデア。
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と共有されるモジュール 」を参照
(zipでNoClassDefErrorと回避策を再現SOAP Webサービスプロジェクト https://spring.io/guides/gs/produce-web-service/ )
問題を整理するためにこれをインポートしました: https://mvnrepository.com/artifact/javax.xml.soap/javax.xml.soap-api/1.4.
Pomファイルに以下を追加すると問題が解決しました
<!-- 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>
次の依存関係を追加します。それで動作するはずです
<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>
実行中のコードについては、次のリンクを参照してください(SpringBootSOAPWS + Java10) Github- SpringBoot Soap ServerGithub- SpringBoot Soap Client