0

Jetty 8.1.8 および Netty 3.2.7 を使用して JBOSS で Websocket サーブレットを作成しようとしました。サーバー側 websocket サーブレット Jetty の "WebSocketFactory.java" ファイルで、次の行の後に例外が発生します。 .

ここに私のコードがあります: package 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 エラー [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/benAsync].[AsynchServlet]] (http-localhost/127.0.0.1:8080-7 ) JBWEB000236: サーブレット AsynchServlet の Servlet.service() が例外をスローしました: org.eclipse.jetty.websocket.WebSocketFactory.upgrade(WebSocketFactory.java:225) で java.lang.NullPointerException が発生しました [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) [classes:] at javax.servlet.http.HttpServlet.サービス (HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.2.Final.jar:1.0.2.Final] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:295) [jbossweb-7.2.0.Final.jar:7.2.0.Final] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) [jbossweb-7.2.0.Final.jar:7.2.0 .Final] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) [jbossweb-7.2.0.Final.jar:7.2.0.Final] at org.apache.catalina.core.StandardContextValve.呼び出し (StandardContextValve.java:149) [jbossweb-7.2.0.Final.jar:7.2.0.Final] at 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.StandardHostValve.invoke(StandardHostValve.java:145) [jbossweb-7.2.0.Final.jar:7.2.0.Final] at org.apache.catalina.valves .ErrorReportValve.invoke(ErrorReportValve.java:97) [jbossweb-7.2.0.Final.jar:7.2.0.Final] at 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]

私を助けるかもしれないどんな助けや指示もありがとう! :)

4

1 に答える 1

0

2 つの問題。

まず、質問で Jetty 8.1.8 を使用していると言っていますが、スタック トレースは Jetty 7.6.2.v20120308 を使用していることを示しています。

次に、jetty-websocket は、サーブレット API 仕様の規則から抜け出すために、Jetty 内部接続アップグレード メカニズムへのアクセスを必要とします。あなたが説明したこのハイブリッドJBoss + Jetty環境では不可能なこと。

解決策は、同じマシンの別のポートで Jetty を実行し、UPGRADE 要求をこの別の Jetty インスタンスにプロキシすることです。しかし、JBoss は UPGRADE リクエストと101 Switching Protocolsレスポンスのサポートを非常に限定しています。

于 2013-04-08T12:53:22.360 に答える