我正在尝试在Tomcat的上下文中运行Web套接字客户端。所以情况是,我在Tomcat上部署了一个Websocket服务器端点,作为App-1的一部分。 App-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();
任何有关如何解决这个问题的建议都会非常有用。
答案 0 :(得分:1)
知道了。问题是,我包括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>
它解决了这个问题。
答案 1 :(得分:0)
仅供参考:
在运行 tomcat 7 的 Debian或Ubuntu 配置中,Websocket jar不与Tomcat的标准安装打包在一起。 (见https://bugs.launchpad.net/ubuntu/+source/tomcat7/+bug/1326687)
因此,为了解决这个问题:
复制并链接java / tomcat安装文件夹中的2个websocket jar
cp javax.websocket-api-1.1.jar / usr / share / java /
ln -s ../../java/javax.websocket-api-1.1.jar /usr/share/tomcat7/lib/javax.websocket-api-1.1.jar
cp tomcat7-websocket.jar / usr / share / java /
ln -s ../../java/tomcat7-websocket.jar /usr/share/tomcat7/lib/tomcat7-websocket.jar
您可以在以下位置找到jar文件:
https://mvnrepository.com/artifact/javax.websocket/javax.websocket-api
https://mvnrepository.com/artifact/org.apache.tomcat/tomcat7-websocket
答案 2 :(得分:0)
当我从Tomcat 7切换到Tomcat 8时,这个问题已经解决了。
我在Eclipse中通过Servers选项卡运行Web App时出现此问题。我在Tomcat 7上运行,在下载Tomcat 8并运行之后,这个问题就消失了。