2013-07-18 16 views
0

我嘗試使用jetty web套接字並且遇到一些麻煩,可能是您知道如何解決它們。Jetty WebSocketServlet NPE

有SocketServlet(來自實施例):

public class SocketServlet extends WebSocketServlet { 

    @Override 
    public void configure(WebSocketServletFactory factory) { 
     factory.register(MyEchoSocket.class); 
    } 
} 

而且EchoSocket

@WebSocket 
public class MyEchoSocket { 

    @OnWebSocketConnect 
    public void onConnect(Session session){ 
     System.out.println("Connect"); 
    } 
} 

web.xml中(部分)

<servlet> 
    <servlet-name>SocketServlet</servlet-name> 
    <servlet-class>ru.servlets.SocketServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>SocketServlet</servlet-name> 
    <url-pattern>/hello/*</url-pattern> 
</servlet-mapping> 

當我構建和行家運行它我有NPE:

2013-07-18 23:20:29.488:WARN:oejs.ServletHandler:/ hello java.lang.NullPointerException at org.eclipse.jetty.websocket.server.WebSocketServerFactory.upgrade(WebSocketServerFactory.java:415) at org.eclipse.jetty.websocket.server.WebSocketServerFactory.acceptWebSocket(WebSocketServerFactory.java:178) at org.eclipse.jetty.websocket.servlet.WebSocketServlet.service(WebSocketServlet.java:160) at javax.servlet.http。 (org.eclipse.jetty.ServletHandler.doHandle(ServletHandler.java:457) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) at org.ec在org.eclipse.jetty.server.handler上的org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) 上使用lipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557) 。 (org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java: 193) 在org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1009) 在org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) 在有機eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255) at org.eclipse.jetty.server.handler.HandlerCollection.handle(Hand (org.eclipse.jetty.server.handle(Server.java:368) at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489) at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:942) at org.eclipse.jetty.server.AbstractHttpConnection $在org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)上的org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:640) 中的RequestHandler.headerComplete(AbstractHttpConnection.java:1004) at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82) org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:628) at org.eclipse.jetty.io.nio.SelectChannelEndPoint $ 1.run(SelectChannelEndPoint.java:52) at org.eclipse。 jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) at org.eclipse.jetty.util.thread.QueuedThreadPool $ 3.run(QueuedThreadPool.java:543) at java.lang.Thread.run(Thread .java:724)

我使用 jetty版本9.0.4.v20130625 jettyPlugin.version 8.1.10。v20130312 java 1.7.25

感謝您的回答!

回答

0

我有同樣的問題,只是由HttpConnection中的靜態方法引起的,它會生成一個threadLocale。它使用了initValue()方法,但我找不到爲什麼這個方法很難在短時間內返回null。
我們可以發現所有這些都發生在tomcat下。

當我改變在碼頭運行時,它進展順利。

所以我們可以認識到jetty的websocket模塊並不是獨立的,而是基於jetty服務器。我們最好實現一個websocketServlet。