2

Repast simphony で Java websocket を使用したいのですが、うまくいきません。次のエラーが表示されます。

    java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.getServletContext()Ljavax/servlet/ServletContext;
        org.eclipse.jetty.websocket.servlet.UpgradeHttpServletRequest.(UpgradeHttpServletRequest.java:91) で
        org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest.(ServletUpgradeRequest.java:52) で
        org.eclipse.jetty.websocket.server.WebSocketServerFactory.acceptWebSocket(WebSocketServerFactory.java:156) で
        org.eclipse.jetty.websocket.server.WebSocketServerFactory.acceptWebSocket(WebSocketServerFactory.java:148) で
        org.eclipse.jetty.websocket.server.WebSocketHandler.handle(WebSocketHandler.java:97)で
        org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) で
        org.eclipse.jetty.server.Server.handle(Server.java:497)で
        org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311) で
        org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:248) で
        org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540) で
        org.eclipse.jetty.util.thread.QueuedThreadPool.runJob (QueuedThreadPool.java:610) で
        org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:539) で
        java.lang.Thread.run(Thread.java:745) で

誰かがこのエラーを解決する方法を説明してもらえますか? ありがとうございました

インターネットから取得したコードをテストしましたが、repast simphony で実行しなければ機能します

私のサーバー

    パッケージ webSocketTest;

    org.eclipse.jetty.server.Server をインポートします。
    org.eclipse.jetty.websocket.server.WebSocketHandler をインポートします。
    org.eclipse.jetty.websocket.servlet.WebSocketServletFactory をインポートします。

    パブリック クラス WebSocketTest {

        public static void main(String[] args) throws Exception {
            サーバー サーバー = 新しいサーバー (8080);
            WebSocketHandler wsHandler = 新しい WebSocketHandler() {
                @オーバーライド
                public void configure(WebSocketServletFactory factory) {
                    factory.register(MyWebSocketHandler.class);
                }
            };
            server.setHandler(wsHandler);
            server.start();
            server.join();
        }
    }

    パッケージ webSocketTest;

    import java.io.IOException;
    org.eclipse.jetty.websocket.api.Session をインポートします。
    org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose をインポートします。
    org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect をインポートします。
    org.eclipse.jetty.websocket.api.annotations.OnWebSocketError をインポートします。
    org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage をインポートします。
    org.eclipse.jetty.websocket.api.annotations.WebSocket をインポートします。

    @WebSocket
    パブリック クラス MyWebSocketHandler {

        @OnWebSocket閉じる
        public void onClose(int statusCode, String reason) {
            System.out.println("Close: statusCode=" + statusCode + ", reason=" + reason);
        }

        @OnWebSocketError
        public void onError(Throwable t) {
            System.out.println("エラー: " + t.getMessage());
        }

        @OnWebSocketConnect
        public void onConnect(セッション セッション) {
            System.out.println("Connect: " + session.getRemoteAddress().getAddress());
            試す {
                session.getRemote().sendString("Hello Webbrowser");
            } キャッチ (IOException e) {
                e.printStackTrace();
            }
        }

        @OnWebSocketMessage
        public void onMessage(文字列メッセージ) {
            System.out.println("メッセージ: " + メッセージ);
        }
    }

4

2 に答える 2

2

Groovy jar を削除する別の方法: 実際、Repast Simphony 2.2 は servlet-api 2.4 を使用します。javax.servlet.http.HttpServletRequest.getServletContext() メソッドが含まれていません。別の解決策は、Repast Simphony によってデフォルトで使用される servlet-api jar を最近の javax servlet-api に置き換えることです。

于 2015-08-18T12:16:49.647 に答える
1

私は最終的に解決策を見つけました。プロジェクトのビルドパスにデフォルトで存在するすべてのgroovy jarを削除しましたが、動作します。

于 2015-07-20T10:10:12.990 に答える