将码头与 Repast simphony 一起使用时出错

Posted

技术标签:

【中文标题】将码头与 Repast simphony 一起使用时出错【英文标题】:Error when using jetty with Repast simphony 【发布时间】:2015-10-09 05:00:31 【问题描述】:

我想将 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("消息:" + 消息);

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于将码头与 Repast simphony 一起使用时出错的主要内容,如果未能解决你的问题,请参考以下文章

码头:servlet 与处理程序

如何将 ActiveMQ AJAX servlet 与 CORS 一起使用?

链接服务器“FDMEE_SIMPHONY”的 OLE DB 提供程序“OraOLEDB.Oracle”返回消息“ORA-00903:无效表名”

码头响应字符编码

鼠标滚轮事件与悬停控件一起使用

通用控制 - 关于码头和锚点的简单问题