网络套接字客户端不能在Tomcat工作
我想在Tomcat的上下文中运行Web套接字客户端。所以情况是,我在Tomcat上部署了一个Websocket服务器端点,作为App-1的一部分。也部署在Tomcat上的App-2(显然是在不同的上下文根目录下)想要发送消息。网络套接字客户端不能在Tomcat工作
如果我将它作为独立的主方法运行,App-2中的类可以正常工作。但是当它在tomcat的上下文中运行时,它会给出下面的错误。 (我用泰鲁斯 - 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();
就如何解决这个任何建议将是非常有益的。
明白了。问题是,我包括Tyrus独立客户端来导入客户端软件包。 我这个
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
</dependency>
它解决了问题,更换了下面
<dependency>
<groupId>org.glassfish.tyrus.bundles</groupId>
<artifactId>tyrus-standalone-client</artifactId>
<version>1.9</version>
</dependency>
。
,仅供参考:
在一个的Debian或Ubuntu配置中运行的Tomcat ,网页套接字罐不与标准安装Tomcat包装。 (见https://bugs.launchpad.net/ubuntu/+source/tomcat7/+bug/1326687)
因此,为了解决这个问题:
- 做不包括在你的webapp WebSocket的罐子,这应该是来自Tomcat本身,否则将无法正常工作。在你的webapp lib文件夹中有一个重复的jar会阻止tomcat正常启动。
-
复制并在java/Tomcat安装文件夹链接2个的WebSocket罐子
CP javax.websocket-API-1.1.jar的/ usr /共享/爪哇/
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
这个问题是固定的我,当我从Tomcat 7切换到Tomcat 8。
我在Eclipse中通过服务器选项卡运行Web应用程序时遇到此问题。我在Tomcat 7上运行,下载了Tomcat 8并运行后,此问题消失了。