2017-09-07 5 views
0

Mon servlet websocket ne fonctionne pas sur Jetty 9.4.6.v20170531 bien qu'il fonctionne parfaitement avec la version 9.3.2.v20150730.WebSocket ne fonctionne pas sur Jetty 9.4

Mon code ressemble à ceci:

@SuppressWarnings("serial") 
@WebServlet(name = "TcpProxy", urlPatterns = { "/sockets/tcpProxy" }) 
public class TcpProxySocketServlet extends WebSocketServlet { 

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

et

@WebSocket 
public class TcpProxySocket { 

    /* ... */ 

    public TcpProxySocket() { 
     LOGGER.info("Instantiating a TCP proxy"); 
    } 


    /** 
    * Open a new socket 
    * 
    * @param session the session 
    */ 
    @OnWebSocketConnect 
    public void onConnect(Session session) throws RestException { 
     this.session = session; 
     CachedSession toriiSession = null; 
    ... 

Lorsque vous essayez d'accéder à mon socket, je reçois une erreur 404. Côté serveur, le configure n'est jamais appelé.

J'ai essayé de forcer le chargement du servlet en l'ajoutant à web.xml

<servlet> 
    <servlet-name>TcpProxySocket</servlet-name> 
    <servlet-class>com.fujitsu.fse.torii.servlets.tcpProxy.TcpProxySocketServlet</servlet-class> 
</servlet> 
<servlet-mapping>  <servlet-name>TcpProxySocket</servlet-name> 
    <url-pattern>/sockets/tcpProxy</url-pattern> 
</servlet-mapping> 

Ensuite Servet est chargé, la fonction configure est appelée. Lorsque j'essaie d'ouvrir le socket, je n'obtiens aucune erreur mais l'erreur onConnect n'est jamais appelée.

Jusqu'à présent, je suis revenu à l'utilisation de Jetty 9.3.2, mais ce n'est pas satisfaisant.

Une idée?

+1

Cela ressemble à un rapport de bogue important qui devrait être classé sur https://github.com/eclipse/jetty.project/issues - Les options 'dumpAfterStart' du serveur (voir' $ {jetty.base}/start. ini') sera utile de voir aussi bien. –

+0

En cours d'investigation à https://github.com/eclipse/jetty.project/issues/1800 –

Répondre

0

Cela a été corrigé en utilisant un balisage web-app correct dans web.xml à utiliser la version webapp 3,1

@@ -1,6 +1,8 @@ 
<?xml version="1.0" encoding="UTF-8"?> 
-<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
-   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
+<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+   xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
+   version="3.1"> 

L'autre problème est que la méthode onConnect n'a jamais été appelé. Il a disparu quand j'ai changé le mappage de servlet en utilisant un chemin avec une barre oblique ("/ sockets/scripts /" au lieu de "/ sockets/scripts").

Nous n'avons pas pu reproduire le problème des barres obliques à la fin d'un exemple plus simple. Donc, je ne suis pas sûr s'il y avait un problème réel ou si c'était juste une mauvaise interprétation du mien.

l'histoire complète est sur https://github.com/eclipse/jetty.project/issues/1800 Je remercie Joakim et le projet Jetty pour leur réactivité.