0

桟橋に展開された戦争内から jsr 356 websocket 接続を実装しようとしています。

私はこれをガイドとして使用しています: http://aredko.blogspot.com/2013/11/java-websockets-jsr-356-on-jetty-91.html

(Jetty サーバーが組み込まれた jsr 356 を基本的に使用するチュートリアルはたくさんありますが、既存のサーバー内で Websocket 接続を構築するチュートリアルはありません。良いものはありますか?)

上記のコードを実行すると、次のエラーが発生します。

java.lang.LinkageError: loader constraint violation: when resolving method "org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer.configureContext(Lorg/eclipse/jetty/servlet/ServletContextHandler;)Lorg/eclipse/jetty/websocket/jsr356/server/ServerContainer;" the class loader (instance of org/eclipse/jetty/webapp/WebAppClassLoader) of the current class, com/me/stuff/data/DataServer, and the class loader (instance of org/eclipse/jetty/start/Classpath$Loader) for resolved class, org/eclipse/jetty/websocket/jsr356/server/deploy/WebSocketServerContainerInitializer, have different Class objects for the type y.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer.configureContext(Lorg/eclipse/jetty/servlet/ServletContextHandler;)Lorg/eclipse/jetty/websocket/jsr356/server/ServerContainer; used in the signature

コードを参照する

ServerContainer container = WebSocketServerContainerInitializer.configureContext(context);

私はこれを理解するのに途方に暮れています。gradle から次の行を使用して、websocket のものを取り込みます。

    providedCompile (
    [ group: 'javax.websocket', name: 'javax.websocket-api', version: '+'],
    [ group: 'javax.ws.rs', name: 'javax.ws.rs-api', version: '+' ]
    )

    compile (
    [ group: 'org.eclipse.jetty.websocket', name: 'javax-websocket-server-impl', version: '+'],
    [ group: 'org.eclipse.jetty.websocket', name: 'javax-websocket-client-impl', version: '+']
    )

javax-websocket-server-impl jar と javax.websocket-api jar の両方に ServerContainer クラスが含まれていることがわかりますが、war ファイルにはそのうちの 1 つだけを含めています。jetty は内部の古いバージョンから引っ張っていますか? それとも、問題の原因を完全に誤解していますか?

私が持っている桟橋のバージョンは次のとおりです: jetty-9.2.1.v20140609

4

1 に答える 1

1

Websocket jar は WAR に含めないでください。

WEB-INF/lib/WAR のディレクトリから次の jar を削除します。

  • javax.websocket-api-*.jar - javax.websocket API jar
  • javax-websocket-server-impl-*.jar- jetty サーバー javax.websocket.server.* 実装 jar
  • javax-websocket-client-impl- jetty javax.websocket.* (クライアント) jar

javax.websocket.*これは、 API クラスに対してコーディング/コンパイルしているためです。

API と API の実装は、Jetty 自体によって提供されます。

これは、servlet-api に対してコーディングする場合と同じです。(つまり、WAR に servlet-api と servlet-api の実装を含めないこと)

于 2014-10-28T23:14:35.697 に答える