Как исправить ошибку времени выполнения JAVAX в приложении JDK11 Tomcat9 Spring - PullRequest
8 голосов
/ 26 марта 2019

Конкретная ошибка, с которой я сталкиваюсь при запуске моего приложения на Tomcat9.Версия Spring: 5.1.5.RELEASE:

SEVERE: Error configuring application listener of class [org.springframework.web.context.request.RequestContextListener] java.lang.NoClassDefFoundError: javax/xml/ws/WebServiceRef

Существует несколько ответов на эту ошибку, в которых все предлагают добавить зависимости maven.Я добавил эти зависимости:

POM.xml

Мой путь сборки:

enter image description here

Класс WebServiceRef найден в проводнике пакетов:

enter image description here

Эта ошибка отображается в консоли при запуске приложения на Tomcat9.Вот еще след стека: enter image description here

SEVERE: Error configuring application listener of class [org.springframework.web.context.request.RequestContextListener] java.lang.NoClassDefFoundError: javax/xml/ws/WebServiceRef at org.apache.catalina.core.DefaultInstanceManager.populateAnnotationsCache(DefaultInstanceManager.java:303) ...more stuf.... java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:355) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:495)

Любая помощь или предложения будут очень признательны!

Обновление 1: Вот некоторые файлы .jar, которые были скопированы в окончательную сборку .war в WEB-INF / lib.Здесь представлены 4 новые зависимости maven и их версии, но также возможны дубликаты файлов .jar.

enter image description here

Обновление 2: Копирование jaws-api jar непосредственно в мой Tomcat Classpath устранило ошибку времени выполнения ... Итак, приложение запускается сейчас, но как мне решить эту проблему при фактическом развертывании файла .war?

enter image description here

Ответы [ 2 ]

2 голосов
/ 03 апреля 2019

Эта проблема возникла из-за того, что Docker Desktop (Windows) взаимодействовал с Tomcat и, в частности, с административным портом Tomcat 8006 , что заставило меня изменить номер порта, чтобы разрешить запуск Tomcat (с 8006 до 8007). например). В какой-то момент у меня был старый контейнер Tomcat, и он мог запуститься, когда мой компьютер запустился через Docker Desktop, но я этого не осознал.

Выполнены шаги для устранения проблемы, если предположить, что ваш pom.xml имеет необходимые зависимости.

  1. Stop Docker Desktop
  2. Используйте самую последнюю версию JDK11 и обновляйте JAVA_HOME по мере необходимости
  3. Восстановить порт сервера администрирования Tomcat по умолчанию на 8006
  4. Переиздать / перезапустить сервер Tomcat

Я думаю, что в большинстве случаев эта проблема будет решена, как объяснено здесь путем обновления pom.xml необходимыми зависимостями. В моем случае это было исключительно окружение, и по какой-то причине Docker Desktop не позволил Tomcat получить доступ к файлу jaws-api-2.3.1.jar во время выполнения. Неспособность Tomcat получить доступ к этому файлу .jar была подтверждена с помощью моего «Обновления 2» в приведенном выше вопросе.

Мой pom.xml в итоге нуждался только в следующих элементах: enter image description here

1 голос
/ 28 марта 2019

Попробуйте использовать эту зависимость в вашем pom.xml:

<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.2</version>
</dependency>
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.4.0-b180725.0427</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>2.4.0-b180725.0644</version>
</dependency>

Я только что попробовал, и он работает с tomcat 9 и пружиной 5.1.5

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...