Websocket Client无法找到实现类

时间:2015-01-03 04:10:54

标签: java websocket tomcat7

我将在前面加上我没有使用任何maven依赖项,但我知道我缺少一个jar文件wls-api.jar(至少这是我读过的)。

为了解决这个问题,我下载了oracle-weblogic-7.9.jar,但问题仍然存在。

此行抛出异常

 WebSocketContainer container = ContainerProvider.getWebSocketContainer();

谁能告诉我为什么这条线连续失败?

更新:在进一步阅读示例后,我看到使用此依赖

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

3 个答案:

答案 0 :(得分:22)

javax.websocket api只是规范没有完全实现你可能需要把jar文件tyrus-standalone-client-1.9.jar并尝试相同的例子来解决你的问题。我用我的例子测试过,它工作正常。

希望这会对你有所帮助。

答案 1 :(得分:3)

添加

  

// https://mvnrepository.com/artifact/org.glassfish.tyrus.bundles/tyrus-standalone-client

     

编译组:“ org.glassfish.tyrus.bundles”,名称:“ tyrus-standalone-client”,版本:“ 1.9”

对我的 build.gradle 文件有用。

答案 2 :(得分:2)

我认为您遇到的RuntimeException幸运的是,并非由您自己的任何直接编码错误产生。

方法getWebSocketContainer(),如here所述,只是尝试加载其他类并获取服务器中ContainerProvider的静态实例。

  

该方法按照ContainerProvider文件中列出的顺序查找META-INF/services/javax.websocket.ContainerProvider实现类,返回WebSocketContainer实现中ContainerProvider实现的null实现}}

遗憾的是,这意味着您的项目配置不正确。仔细检查以确保此文件包含在项目的构建路径中。

如果您正在查看的其他项目正在使用您所描述的Maven依赖项,我会尝试设置您的项目以执行相同操作。

希望这有帮助!