java.lang.NoClassDefFoundError: javax/xml/soap/SOAPException
Я создал веб-службу с использованием Spring. Он отлично работает при запуске на моем встроенном сервере tomcat. Однако, когда я упаковываю его как файл JAR и запускаю его с помощью команды java -jar
, я получаю это исключение.
Моя служба отправляет простой запрос на мыло, и ответ сервера:
"exception": "java.lang.NoClassDefFoundError",
"message": "javax/xml/soap/SOAPException",
Это ответ, который я получаю в Postman.
Любые идеи, где я могу найти проблему.
Ответы
Ответ 1
JavaSE 8 включает в себя пакет java.xml.soap
.
JavaSE 9 переместил пакет javax.xml.soap
в модуль java.xml.ws
Модули, используемые совместно с JEE (например, java.xml.ws
), включены в JavaSE 9, но
- не рекомендуется для удаления из будущей версии JavaSE, и
- не по пути к модулю по умолчанию.
Быстрый обходной путь должен либо
- запустите флягу с JRE 8: $MY_JRE8_HOME/bin/java -jar my.jar
, или
- добавить модуль для JRE 9: java --add-modules java.xml.ws -jar my.jar
В более долгосрочной перспективе проекты JavaSE, использующие модули, такие как java.xml.ws
должны явно включать модуль, как и другие библиотеки.
Смотрите fooobar.com/questions/1271578/...
См. Руководство по миграции JDK 9: модули, совместно используемые с JEE, не разрешены по умолчанию
(Воспроизведено NoClassDefError и обходные пути с проектом сжатого веб-сервиса SOAP по адресу https://spring.io/guides/gs/proroduction-web-service/)
Ответ 2
Я импортировал этот, чтобы решить проблему: https://mvnrepository.com/artifact/javax.xml.soap/javax.xml.soap-api/1.4.0
Ответ 3
Добавление следующего в файл 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>
Ответ 4
Добавьте следующие зависимости, это должно работать тогда
<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 Github- Клиент мыла SpringBoot
Ответ 5
Я думаю, что проблема связана с библиотекой зависимостей JAX-WS "jaxws-api.jar".
Следуйте по этой ссылке http://jax-ws.java.net/.
Загрузите дистрибутив JAX-WS RI.
скопируйте "jaxws-api.jar" в папку библиотеки Tomcat
"{$ TOMCAT}/Lib".
Перезапустите Tomcat.