我正在尝试在Tomcat的上下文中运行Web套接字客户端。因此,方案是,我将Websocket Server端点部署在Tomcat上,作为App-1的一部分。同样部署在Tomcat上的App-2(显然位于不同的上下文根目录下)也希望发送消息。

如果我从main方法中单独运行它,则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();

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

最佳答案

得到它了。问题是,我包括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>


它解决了问题。

10-05 18:42