2013-04-06 7 views
6

Ich möchte Web-Socket verwenden, und ich begann, dies mit Tomcat API zu tun. Ich verwende derzeit Tomcat 7.0.37.Verwenden von Web-Socket mit Tomcat 7

Ich habe versucht, den Beispielcode von Tomcat documentation zu folgen.

Ich bin auch Maven für das Projekt verwenden, so fügte ich diese zu meinen pom.xml:

<dependency> 
    <groupId>org.apache.tomcat</groupId> 
    <artifactId>tomcat-catalina</artifactId> 
    <version>7.0.39</version> 
    <scope>provided</scope> 
</dependency> 

Das erste, was komisch ist, ich eine Fehlermeldung für diese Linie in Eclipse:

private class MyMessageInbound extends MessageInbound 

die Fehlermeldung lautet „die Hierarchie des Typs MyMessageInbound inkonsistent ist“, aber ich bin noch in der Lage, die Webapp zu kompilieren und zu starten.

Ich habe auch die Konfiguration in dem web.xml wie folgt:

<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> 

Also, ich bin in der Lage, die Webapp zu starten, aber wenn ich auf die Chat-Seite gehen, bekomme ich einen Fehler auf dem Chat Board sagen: "Info: WebSocket geschlossen.". Tomcat log mir die folgende Meldung geben:

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) 

Ich denke, die einzige fehlende Informationen hier ist die Quelle des chat page.

Wer sieht was ich falsch mache ??

Danke

Antwort

6

Ich löste das Problem!

Ich habe versucht, das Projekt mit Maven auf der Kommandozeile zu verpacken und diese Fehlermeldung erhalten:

[ERROR] class file for org.apache.coyote.http11.upgrade.UpgradeInbound not found 

Daraus habe ich nur noch folgendes zum pom.xml:

<dependency> 
    <groupId>org.apache.tomcat</groupId> 
    <artifactId>tomcat-coyote</artifactId> 
    <version>7.0.39</version> 
    <scope>provided</scope> 
</dependency> 

Ich hoffe, dass dies anderen mit dem gleichen Problem helfen wird.

+0

das funktionierte auch für mich. (Y) – prime

0

Ist Ihre geerbte Klasse MessageInbound die Servlet-Schnittstelle implementiert? Können Sie die doGet-Implementierung Ihres ChatWebSocketServlet oder der MessageInbound-Klasse bereitstellen? Entschuldigung Mann, Ihre Informationen sind überhaupt unvollständig ...

+0

Die ganze Klasse ist in der ersten [link] (http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/examples/WEB-INF/classes/websocket/ chat/ChatWebSocketServlet.java? revision = 1354477 & view = Markup) des ersten Posts. Und das ist vielleicht in meinem letzten Post nicht klar, aber das Problem ist gelöst;) – Nuzei

+0

Das ist gut zu hören. Bitte posten Sie Ihre Erfolgsgeschichte. Schätzen Sie, dass Sie Berechtigungsprobleme mit Tomcat und WebSockets hatten, oder? –

Verwandte Themen