Web Socket客户端无法在Tomcat中运行

时间:2015-11-03 09:13:31

标签: java tomcat websocket java-websocket

我正在尝试在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();

任何有关如何解决这个问题的建议都会非常有用。

3 个答案:

答案 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

因此,为了解决这个问题:

  1. 在您的webapp中包含websocket jar,这应该来自tomcat本身,否则它将无法正常工作。在webapp lib文件夹中有一个重复的jar会阻止tomcat正常启动。
  2. 复制并链接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

  3. 您可以在以下位置找到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并运行之后,这个问题就消失了。