Ошибка при использовании причала с симфонией Repast

Я хочу использовать java websocket с Repast simphony, но это не работает, я получаю следующие ошибки:

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

Может ли кто-нибудь объяснить мне, как решить эту ошибку? Спасибо

Я тестировал код, взятый из Интернета, и он работает, если я не запускаю его с репастной симфонией

Мой сервер

    package webSocketTest;

    import org.eclipse.jetty.server.Server;
    import org.eclipse.jetty.websocket.server.WebSocketHandler;
    import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory;

    public class WebSocketTest {

        public static void main(String[] args) throws Exception {
            Server server = new Server(8080);
            WebSocketHandler wsHandler = new WebSocketHandler() {
                @Override
                public void configure(WebSocketServletFactory factory) {
                    factory.register(MyWebSocketHandler.class);
                }
            };
            server.setHandler(wsHandler);
            server.start();
            server.join();
        }
    }


    package webSocketTest;

    import java.io.IOException;
    import org.eclipse.jetty.websocket.api.Session;
    import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose;
    import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect;
    import org.eclipse.jetty.websocket.api.annotations.OnWebSocketError;
    import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage;
    import org.eclipse.jetty.websocket.api.annotations.WebSocket;

    @WebSocket
    public class MyWebSocketHandler {

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

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

        @OnWebSocketConnect
        public void onConnect(Session session) {
            System.out.println("Connect: " + session.getRemoteAddress().getAddress());
            try {
                session.getRemote().sendString("Hello Webbrowser");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        @OnWebSocketMessage
        public void onMessage(String message) {
            System.out.println("Message: " + message);
        }
    }


person Eulalie    schedule 20.07.2015    source источник


Ответы (2)


Еще одна альтернатива удалению заводных банок: на самом деле Repast Simphony 2.2 использует servlet-api 2.4. который не содержит метода javax.servlet.http.HttpServletRequest.getServletContext (). Другим решением является замена jar-файла servlet-api, используемого по умолчанию в Repast Simphony, на недавний сервлет-api javax.

person Eulalie    schedule 18.08.2015

Наконец-то я нашел решение. Я удалил все groovy jar-файлы, которые по умолчанию присутствуют в пути сборки проекта, и все работает.

person Eulalie    schedule 20.07.2015