Bonjour à tous, j'ai pas mal cherché avant de poster, mais là, je bloque .

J'ai essayé de suivre l'exemple que l'on retrouve dans la documentation de Tomcat pour l'utilisation des websockets. Il s'agit d'une application de chat toute simple, dont le code pour la partie client se trouve ici.

Pour mon projet de test, j'utilise aussi Maven, j'ai donc rajouté dans mon pom.xml :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-catalina</artifactId>
    <version>7.0.39</version>
    <scope>provided</scope>
</dependency>
Première chose étrange, dans Eclipse, j'ai une erreur sur la ligne :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
private class MyMessageInbound extends MessageInbound
Le message d'erreur est "The hierarchy of the type MyMessageInbound is inconsistent", mais cela ne m'empêche pas de compiler et de lancer l'application.

Pour que ma servlet gère les appels, j'ai rajouté la configuration suivante dans mon fichier web.xml :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
<servlet>
    <servlet-name>wsChat</servlet-name>
    <servlet-class>websocket.chat.ChatWebSocketServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
 
<servlet-mapping>
    <servlet-name>wsChat</servlet-name>
    <url-pattern>/websocket/chat</url-pattern>
</servlet-mapping>
Premier test, je peux lancer l'application, mais quand je me rend sur la page de chat, j'obtiens le message d'erreur "Info: WebSocket closed.", qui est lancé par la fonction JavaScript de la page cliente. Tomcat me donne le message d'erreur suivant dans la console :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SEVERE: Servlet.service() for servlet [wsChat] in context with path [/websocket-tuto] threw exception [L''exécution de la servlet a lancé une exception] with root cause
java.lang.NoSuchMethodError: websocket.chat.ChatWebSocketServlet$MyMessageInbound.<init>(Lwebsocket/chat/ChatWebSocketServlet;Luwebsocket/chat/ChatWebSocketServlet$MyMessageInbound;)V
at websocket.chat.ChatWebSocketServlet.createWebSocketInbound(ChatWebSocketServlet.java:34)
at org.apache.catalina.websocket.WebSocketServlet.doGet(WebSocketServlet.java:121)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Donc, il semblerait que ma configuration soit bonne, puisque je me rends bien sur la servlet, mais qu'elle ne parvient pas à créer la classe MyMessageInbound.

Est-ce que l'un de vous a une idée de ce que je fais mal ??
Merci !