2

我想将 java websocket 与 Repast simphony 一起使用,但它不起作用,我收到以下错误:

    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 {

        公共静态 void main(String[] args) 抛出异常 {
            服务器服务器=新服务器(8080);
            WebSocketHandler wsHandler = new WebSocketHandler() {
                @覆盖
                公共无效配置(WebSocketServletFactory 工厂){
                    factory.register(MyWebSocketHandler.class);
                }
            };
            server.setHandler(wsHandler);
            server.start();
            server.join();
        }
    }

    包 webSocketTest;

    导入 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("关闭:statusCode=" + statusCode + ", reason=" + reason);
        }

        @OnWebSocketError
        公共无效 onError(Throwable t) {
            System.out.println("错误:" + t.getMessage());
        }

        @OnWebSocketConnect
        公共无效onConnect(会话会话){
            System.out.println("连接:" + session.getRemoteAddress().getAddress());
            尝试 {
                session.getRemote().sendString("Hello Webbrowser");
            } 捕捉(IOException e){
                e.printStackTrace();
            }
        }

        @OnWebSocketMessage
        公共无效onMessage(字符串消息){
            System.out.println("消息:" + 消息);
        }
    }

4

2 回答 2

2

删除 groovy jar 的另一种替代方法:实际上 Repast Simphony 2.2 使用 servlet-api 2.4。其中不包含 javax.servlet.http.HttpServletRequest.getServletContext() 方法。然后另一个解决方案是用最近的 javax servlet-api 替换 Repast Simphony 默认使用的 servlet-api jar

于 2015-08-18T12:16:49.647 回答
1

我终于找到了解决方案。我删除了项目构建路径中默认存在的所有 groovy jar,它可以正常工作。

于 2015-07-20T10:10:12.990 回答