当前位置: 首页 > 知识库问答 >
问题:

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

钱元徽
2023-03-14

我试图创建一个WebSocket servlet上JBOSS与Jetty 8.1.8

这是我的代码:包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)
                    {

                   }
         }

}

这里有一个例外:

17:36:01,728 ERROR[org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/benAsync].[AsynchServlet]](超文本传输协议-localhost/127.0.0.1: 8080-7)JBWEB000236: Servlet.service()为servlet AsynchServlet抛出异常:java.lang.NullPointerExc0019在org.eclipse.jetty.websocket.WebSocketFactory.upgrade(WebSocketFactory.java:225)[jetty-all-7.6.2.v20120308.jar: 7.6.2. v20120308]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.v20120308.jar: 7.6.2. v20120308]在com.benPackage.entrypoint.servlets.OWMFAsyncJboss.service(OWMFAsyncJboss. java: 58)[class:]在javax. servlet. http.服务(HttpServlet. java: 847)[jboss-servlet-api_30_spec-1.0.2。最终. jar: 1.0.2。最终]在org. apache. catalina. core.[jbosSweb-7.2.0.最终. jar: 7.2.0。最终]在org. apache. catalina. core.[jbosSweb-7.2.0.最终. jar: 7.2.0。最终]在org. apache. catalina. core.[jbosscwib-7.2.0.最终. jar: 7.2.0。最终]在org. apache. catalina. core.[jbosscwib-7.2.0.最终. jar: 7.2.0。最终]在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]at org. apache. catalina. core.[jbosscwib-7.2.0.最终. jar: 7.2.0。最终]在org. apache. catalina. valves.[jbosSweb-7.2.0.最终. jar: 7.2.0。最终]在org. apache. catalina. core.[jbosSweb-7.2.0.最终. jar: 7.2.0。最终]在org. apache. catalina.连接器。CoyoteAdapter. service(CoyoteAdapter. java: 336)[jbosSweb-7.2.0.最终. jar: 7.2.0。最终]在org. apache. coyot. http 11.进程(Http11Processor. java: 856)[jbosSweb-7.2.0.最终. jar: 7.2.0。最终]在org. apache. coyot. http 11.进程(Http11ConnectionHandler.进程)[jbosSweb-7.2.0.最终. jar: 7.2.0。最终]在org. apache. tomcat. util. net.JIoEndpoint$Worker. run(JIoEndpoint. java: 920)[jbosSweb-7.2.0.最终. jar: 7.2.0。最终]在java. lang.线程. run(未知来源)[rt. jar: 1.6.0_33]

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

共有1个答案

孟谭三
2023-03-14

两个问题。

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

接下来,jetty websocket需要访问jetty内部连接升级机制,以打破Servlet API规范规则。在您所描述的这个混合JBoss Jetty环境中是不可能的。

解决方案可以是在同一台机器上的不同端口上运行Jetty,并将升级请求代理给另一个Jetty实例。但是JBoss对升级请求和101交换协议响应的支持非常有限。

 类似资料:
  • 我正在阅读有关C中线程的教程并测试了以下代码: 我试图使用gcc和g编译此代码,但我总是遇到编译错误。 使用gcc-pthread thread_test.c: /tmp/ccmpQLyp。o: 在函数std::cout'thread_test.cpp: 你能帮忙吗?我必须做些什么才能让这段代码在Linux和Windows上运行吗?

  • 我目前正在尝试与我的android应用程序和我的openfire服务器(在ubuntu上工作)握手。但我不能。我没有失败之类的。只是什么都没发生。这感觉很糟糕。

  • ...在Xcode控制台,我得到 它演示了建立了连接并成功找到了服务器,但其他问题出现了。会很感激你的帮助。

  • 我正在尝试配置一个Laravel项目,我已经配置了node和bower,没有问题,但在sudo npm安装gulp之后。当我运行gulp时,我得到了这个错误 单元js:341投掷错误^ 错误:找不到模块'laravel-elixir'在函数。模块。_resolveFilename(module.js:339: 15)在函数。模块。_load(module.js:290: 25)在Module.re

  • 有人知道如何解决这个问题吗?不能在R. install.packages("devool")还安装了依赖项'ps','fs','Procexx','xopen','usethis','Call r','git2r','pkgbuild','pkgload','rcmdcheck','roxygen2' null 下载的源程序包位于“/private/var/folders/s2/cptzh4ls2

  • 在本教程之后,我一直在尝试使用maven和maven-shade-plugin为我的JavaFX项目创建一个jar。https://www.youtube.com/watch?v=EyYb0GmtEX4. 我可以创建jar文件,但当我运行它时,它会给我一个错误:<代码>错误:无法找到或加载主类com。实例请工作。通用域名格式。实例请工作。Main\u 1 <代码>原因:java。lang.Clas