web-dev-qa-db-ja.com

Websocketクライアントは実装クラスを見つけることができませんでした

私はこれの前置きとして、Mavenの依存関係を使用していませんが、jarファイルwls-api.jarが欠けていることを知っています(少なくともこれは私が読んだものです)。

これを修正するためにOracle-weblogic-7.9.jarをダウンロードしましたが、問題は解決しません。

例外はこの行でスローされます

 WebSocketContainer container = ContainerProvider.getWebSocketContainer();

このラインが継続的に失敗する理由を誰かに教えてもらえますか?

更新:私が見る例をさらに読むと、この依存関係が使用されます

<dependency>
<groupId>javax.websocket</groupId>
<artifactId>javax.websocket-api</artifactId>
<version>1.0</version>

必要に応じて、サーバーとクライアントのビルドパスにjavax.websocket-api.jarがあります。ここで何が欠けていますか?

その他の更新:スローされたエラーを含めるのを忘れました!

Exception in thread "main" Java.lang.RuntimeException: Could not find an implementation class.
at javax.websocket.ContainerProvider.getWebSocketContainer(ContainerProvider.Java:73)
at connect.<init>(connect.Java:21)
at test.main(test.Java:11)
14
Michael Miner

javax.websocket APIは仕様にすぎません。完全な実装はありません。jarファイルtyrus-standalone-client-1.9.jarを使用して、問題を解決する同じ例を試す必要がある場合があります。私は自分の例でテストしましたが、うまくいきます。

これがお役に立てば幸いです。

26
Rajendar Reddy

追加

// https://mvnrepository.com/artifact/org.glassfish.tyrus.bundles/tyrus-standalone-client

コンパイルグループ: 'org.glassfish.tyrus.bundles'、名前: 'tyrus-standalone-client'、バージョン: '1.9'

私のbuild.gradleファイルに私のために働いた。

3
dlaagniechy

あなたが経験しているRuntimeExceptionは、幸いなことに、あなた自身の直接的なコーディング障害によって生成されたものではないと思います。

説明されているように、メソッドgetWebSocketContainer()here は、他のクラスをロードし、サーバー内のContainerProviderの静的インスタンスを取得しようとします。

このメソッドは、META-INF/services/javax.websocket.ContainerProviderファイルにリストされている順序でContainerProvider実装クラスを検索し、WebSocketContainerではないContainerProvider実装からnull実装を返します。

残念ながら、これはプロジェクトが正しく構成されていないことを意味します。このファイルがプロジェクトのビルドパスに含まれていることを確認してください。

あなたが見ている他のプロジェクトがあなたが説明したMavenの依存関係を使用しているなら、私は同じことをするようにあなたのプロジェクトを設定しようとします。

これが役に立てば幸い!

3
James Taylor