1

Tomcat のコンテキストで Web ソケット クライアントを実行しようとしています。シナリオは、App-1 の一部として Tomcat にデプロイされた Websocket サーバー エンドポイントを持っているというものです。Tomcat にもデプロイされている (明らかに異なるコンテキスト ルートの下にある) App-2 は、メッセージを送信したいと考えています。

メイン メソッドからスタンドアロンとして実行すると、App-2 のクラスは正常に動作します。しかし、Tomcat のコンテキストで実行すると、以下のエラーが発生します。(JSR-356 impl として Tyrus 1.9 を使用しています)

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();

これを修正する方法についての提案は非常に役に立ちます。

4

3 に答える 3

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>

それは問題を解決しました。

于 2015-11-04T06:34:37.657 に答える
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

jar ファイルは次の場所にあります。

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

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

于 2017-01-11T20:23:29.597 に答える