尝试在带有Jetty 8.1.8&;的JBOSS上使用WebSocket时出错;Netty 3.2.7

尝试在带有Jetty 8.1.8&;的JBOSS上使用WebSocket时出错;Netty 3.2.7,websocket,jetty,jboss7.x,netty,Websocket,Jetty,Jboss7.x,Netty,我曾尝试使用Jetty 8.1.8和Netty 3.2.7在JBOSS上创建websocket servlet 我使用的客户端与Tomcat一起工作,因此我认为这不是问题所在 每当我尝试连接到服务器端websocket servlet时,我总是收到空指针异常 该异常发生在Jetty的“WebSocketFactory.java”文件中 在以下行之后: AbstractHttpConnection http AbstractHttpConnection.getCurrentConnection()

我曾尝试使用Jetty 8.1.8和Netty 3.2.7在JBOSS上创建websocket servlet 我使用的客户端与Tomcat一起工作,因此我认为这不是问题所在 每当我尝试连接到服务器端websocket servlet时,我总是收到空指针异常 该异常发生在Jetty的“WebSocketFactory.java”文件中 在以下行之后: AbstractHttpConnection http AbstractHttpConnection.getCurrentConnection() getCurrentConnection函数返回null,并在此行之后尝试使用其函数之一(这显然会引发异常)

这是我的密码: 包com.microfocus.entrypoint.servlets

import java.io.IOException;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import org.eclipse.jetty.websocket.WebSocket;
import org.eclipse.jetty.websocket.WebSocketConnection;
import org.eclipse.jetty.websocket.WebSocketServlet;


@SuppressWarnings("serial")
public class OWMFAsyncJboss extends WebSocketServlet {


         @SuppressWarnings({ "unchecked", "rawtypes" })
          private final Set<ChatWebSocket> users = new CopyOnWriteArraySet();

          @Override
          public WebSocket doWebSocketConnect(HttpServletRequest arg0, String arg1) {
                    try
                    {
                    return new ChatWebSocket();
                    }
                    catch(Exception e)
                    {
                              System.console().writer().write("error");
                    }
                    return null;
          }

         @Override
          protected void service(HttpServletRequest request,
                              HttpServletResponse response) throws ServletException, IOException {
                    super.service(request, response);
          }

          class ChatWebSocket implements WebSocket.OnTextMessage
          {
                    WebSocketConnection connection;

                    @Override
                    public void onClose(int arg0, String arg1) {
                              users.remove(this);
                    }

                    @Override
                    public void onOpen(Connection arg0) {
                              ChatWebSocket.this.connection= (WebSocketConnection) connection;
                              users.add(this);
                    }

                    public void onMessage(byte frame, byte[] data,int offset, int length)
                    {
                    // binary communication not needed
                    }
                    public void onMessage(byte frame, String data)
                    {

                   }
         }

}
import java.io.IOException;
导入java.util.Set;
导入java.util.concurrent.CopyOnWriteArraySet;
导入javax.servlet.ServletException;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入org.eclipse.jetty.websocket.websocket;
导入org.eclipse.jetty.websocket.WebSocketConnection;
导入org.eclipse.jetty.websocket.WebSocketServlet;
@抑制警告(“串行”)
公共类OWMFAsyncJboss扩展了WebSocketServlet{
@SuppressWarnings({“unchecked”,“rawtypes”})
私有最终集用户=新CopyOnWriteArraySet();
@凌驾
公共WebSocket doWebSocketConnect(HttpServletRequest arg0,字符串arg1){
尝试
{
返回新的ChatWebSocket();
}
捕获(例外e)
{
System.console().writer().write(“错误”);
}
返回null;
}
@凌驾
受保护的无效服务(HttpServletRequest),
HttpServletResponse响应)引发ServletException,IOException{
超级服务(请求、响应);
}
类ChatWebSocket实现WebSocket.ContextMessage
{
WebSocket连接;
@凌驾
公共void onClose(int arg0,字符串arg1){
用户。删除(此);
}
@凌驾
公用打开(连接arg0){
ChatWebSocket.this.connection=(WebSocketConnection)连接;
用户。添加(此);
}
消息上的公共void(字节帧,字节[]数据,int偏移量,int长度)
{
//不需要二进制通信
}
消息上的公共void(字节帧、字符串数据)
{
}
}
}
这里有一个例外:

17:36:01728错误[org.apache.catalina.core.ContainerBase.[jboss.web].[default host].[benAsync].[AsynchServlet]](http localhost/127.0.0.1:8080-7)JBWEB000236:Servlet AsynchServlet的Servlet.service()引发异常:java.lang.NullPointerException 在org.eclipse.jetty.websocket.WebSocketFactory.upgrade(WebSocketFactory.java:225)[jetty-all-7.6.2.v2020308.jar:7.6.2.v2020308] 在org.eclipse.jetty.websocket.WebSocketFactory.acceptWebSocket(WebSocketFactory.java:361)[jetty-all-7.6.2.v20120308.jar:7.6.2.v20120308] 在org.eclipse.jetty.websocket.WebSocketServlet.service(WebSocketServlet.java:107)[jetty-all-7.6.2.v2020308.jar:7.6.2.v2020308] 在com.benPackage.entrypoint.servlets.OWMFAsyncJboss.service(OWMFAsyncJboss.java:58)[类:] 在javax.servlet.http.HttpServlet.service(HttpServlet.java:847)[jboss-servlet-api_3.0_spec-1.0.2.Final.jar:1.0.2.Final] 位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:295)[jbossweb-7.2.0.Final.jar:7.2.0.Final] 位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)[jbossweb-7.2.0.Final.jar:7.2.0.Final] 在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)[jbossweb-7.2.0.Final.jar:7.2.0.Final] 在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:149)[jbossweb-7.2.0.Final.jar:7.2.0.Final] 在org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169)[jboss-as-web-7.2.0.Alpha1-redhat-4.jar:7.2.0.Alpha1-redhat-4] 在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:145)[jbossweb-7.2.0.Final.jar:7.2.0.Final] 在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:97)[jbossweb-7.2.0.Final.jar:7.2.0.Final] 在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102)[jbossweb-7.2.0.Final.jar:7.2.0.Final] 在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:336)[jbossweb-7.2.0.Final.jar:7.2.0.Final] 在org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)[jbossweb-7.2.0.Final.jar:7.2.0.Final] 位于org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:653)[jbossweb-7.2.0.Final.jar:7.2.0.Final] 在org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:920)[jbossweb-7.2.0.Final.jar:7.2.0.Final] 在java.lang.Thread.run(未知源)[rt.jar:1.6.0_33]

任何可能对我有帮助的帮助或指导都将不胜感激 谢谢!:)

两个问题

首先,您在问题中说您正在使用Jetty 8.1.8,但stacktrace显示您正在使用Jetty 7.6.2.v20120308

接下来,jetty websocket需要访问jetty内部连接升级机制,以打破Servlet API规范规则。不可能的事