【问题标题】:Web Socket Client not working in TomcatWeb Socket 客户端在 Tomcat 中不起作用
【发布时间】:2015-11-03 09:13:30
【问题描述】:

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

任何有关如何解决此问题的建议都会非常有帮助。

【问题讨论】:

    标签: java tomcat websocket java-websocket


    【解决方案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>
    

    它解决了这个问题。

    【讨论】:

      【解决方案2】:

      仅供参考:

      在运行 tomcat 7 的 Debian 或 Ubuntu 配置中,Websocket jar 未与 Tomcat 的标准安装一起打包。 (见https://bugs.launchpad.net/ubuntu/+source/tomcat7/+bug/1326687)

      因此为了解决这个问题:

      1. 不在您的 web 应用程序中包含 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

      您可以在以下位置找到 jar 文件:

      https://mvnrepository.com/artifact/javax.websocket/javax.websocket-api

      https://mvnrepository.com/artifact/org.apache.tomcat/tomcat7-websocket

      【讨论】:

        【解决方案3】:

        当我从 Tomcat 7 切换到 Tomcat 8 时,此问题已解决。

        我在通过服务器选项卡在 Eclipse 中运行 Web 应用程序时遇到了这个问题。我在 Tomcat 7 上运行,在下载 Tomcat 8 并运行它之后,这个问题就消失了。

        【讨论】:

          猜你喜欢
          • 2020-05-17
          • 2012-09-06
          • 2021-11-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-08-08
          • 2017-06-04
          • 1970-01-01
          相关资源
          最近更新 更多