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/)

Ответ 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.