Клиент Websocket Не удалось найти класс реализации
Я предварю это, я не использую никаких зависимостей maven, но я знаю, что мне не хватает файла jar wls-api.jar
(по крайней мере, это то, что я прочитал).
Чтобы исправить это, я загрузил oracle-weblogic-7.9.jar
, но проблема не устранена.
Исключение выбрано в этой строке
WebSocketContainer container = ContainerProvider.getWebSocketContainer();
Может ли кто-нибудь сказать мне, почему эта строка постоянно терпит неудачу?
UPDATE: после дальнейшего чтения примеры, которые я вижу, используют эту зависимость
<dependency>
<groupId>javax.websocket</groupId>
<artifactId>javax.websocket-api</artifactId>
<version>1.0</version>
У меня есть javax.websocket-api.jar
в пути сборки сервера и клиента, как это требуется. Что мне здесь не хватает?
Другое обновление: я забыл включить эту ошибку!
Exception in thread "main" java.lang.RuntimeException: Could not find an implementation class.
at javax.websocket.ContainerProvider.getWebSocketContainer(ContainerProvider.java:73)
at connect.<init>(connect.java:21)
at test.main(test.java:11)
Ответы
Ответ 1
javax.websocket api - это только спецификация не имеет полной реализации, вам может потребоваться взять файл jar tyrus-standalone-client-1.9.jar и попробовать тот же пример, который должен решить вашу проблему. Я тестировал свой пример, и он работает нормально.
надеюсь, что это поможет вам.
Ответ 2
Добавление
//https://mvnrepository.com/artifact/org.glassfish.tyrus.bundles/tyrus-standalone-client
группа компиляции: 'org.glassfish.tyrus.bundles', имя: 'tyrus-standalone-client', версия: '1.9'
чтобы мой файл build.gradle работал для меня.
Ответ 3
Я думаю, что RuntimeException
, с которым вы сталкиваетесь, к счастью не генерируется какой-либо прямой ошибкой кодирования.
Метод getWebSocketContainer()
, как описано здесь, просто пытается загрузить другие классы и получить статический экземпляр ContainerProvider
в сервер.
Метод ищет класс реализации ContainerProvider
в порядке, указанном в файле META-INF/services/javax.websocket.ContainerProvider
, возвращая реализацию WebSocketContainer
из реализации ContainerProvider
, которая не является null
.
Это, к сожалению, означает, что ваш проект настроен неправильно. Двойная проверка, чтобы убедиться, что этот файл включен в ваш путь построения проекта.
Если другие проекты, которые вы ищете, используют описанную вами зависимость Maven, я бы попытался настроить ваш проект на то же самое.
Надеюсь, это помогло!
Ответ 4
Я использовал tyrus-standalone-client-1.9 и получил эту ошибку: javax.websocket.DeploymentException: Ошибка подключения: org.glassfish.tyrus.container.grizzly.client.GrizzlyClientSocket._connect (GrizzlyClientSocket.java:404)
Любой совет, как мне поступить?