Клиент веб-сокета не работает в Tomcat

Я пытаюсь запустить клиент веб-сокета в контексте Tomcat. Итак, сценарий таков: у меня есть конечная точка сервера Websocket, развернутая на Tomcat, как часть приложения-1. Приложение-2, которое также развернуто на Tomcat (очевидно, в другом корневом контексте), хочет отправить сообщение.

Класс в App-2 работает нормально, если я запускаю его отдельно от основного метода. Но он дает ошибку ниже, когда он работает в контексте tomcat. (Я использую Tyrus 1.9 как JSR-356 impl)

java.util.ServiceConfigurationError: javax.websocket.ContainerProvider: Provider org.apache.tomcat.websocket.WsContainerProvider not a subtype
at java.util.ServiceLoader.fail(ServiceLoader.java:239)
at java.util.ServiceLoader.access$300(ServiceLoader.java:185)
at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:376)
at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
at javax.websocket.ContainerProvider.getWebSocketContainer(ContainerProvider.java:66)

Вышеупомянутое исключение выбрасывается в этой строке: WebSocketContainer container = ContainerProvider.getWebSocketContainer();

Любые предложения о том, как это исправить, будут очень полезны.


person Sambit    schedule 03.11.2015    source источник


Ответы (3)


Понятно. Проблема заключалась в том, что я включал автономный клиент Tyrus для импорта клиентских пакетов. Я заменил ниже

<dependency>
    <groupId>org.glassfish.tyrus.bundles</groupId>
    <artifactId>tyrus-standalone-client</artifactId>
    <version>1.9</version>
</dependency>

с этим

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>7.0</version>
</dependency>

Это решило проблему.

person Sambit    schedule 04.11.2015

Только для справки:

В конфигурации Debian или Ubuntu под управлением tomcat 7 jar-файлы Websocket не упаковываются при стандартной установке Tomcat. (см. https://bugs.launchpad.net/ubuntu/+source/tomcat7/+bug/1326687)

Поэтому, чтобы исправить это:

  1. Не включайте jar-файлы веб-сокетов в свое веб-приложение, это должно исходить от самого tomcat, иначе это не сработает. Наличие дубликата jar-файла в папке lib вашего веб-приложения помешает правильному запуску tomcat.
  2. # P4 #
    # P5 # # P6 # # P7 # # P8 #

Вы можете найти файлы jar по адресу:

https://mvnrepository.com/artifact/javax.websocket/javax.websocket-api

https://mvnrepository.com/artifact/org.apache.tomcat/tomcat7-websocket

person Simon    schedule 11.01.2017

Эта проблема была исправлена ​​для меня, когда я переключился с Tomcat 7 на Tomcat 8.

У меня возникла эта проблема при запуске веб-приложения в Eclipse через вкладку «Серверы». Я работал на Tomcat 7, и после загрузки Tomcat 8 и его запуска эта проблема исчезла.

person Scott Izu    schedule 27.06.2017