2015-07-09 4 views
5

Ich versuche, eine Verbindung zu einem SockJs Web Sockets-Server über Spring 4.2 WebsocketClient support. Das ist mein Client so weit:Wie WebSocketContainer in StandardWebSocketClient-Klasse implementieren

public static void main(String[] args) throws Exception { 
    WebSocketClient transport = new StandardWebSocketClient(); 
    WebSocketStompClient stompClient = new WebSocketStompClient(transport); 
    stompClient.setMessageConverter(new StringMessageConverter()); 

    String url = "ws://localhost:8080/priceticker/ws"; 
    StompSessionHandler handler = new WSClient() ; 
    stompClient.connect(url, handler); 
} 

dies wird die Verbindung, die ich brauche, um meinen Kanal zu abonnieren. Wenn ich den Code ausführen, bekomme ich die folgende Ausnahme:

Exception in thread "main" java.lang.RuntimeException: Could not find an implementation class. 
at javax.websocket.ContainerProvider.getWebSocketContainer(ContainerProvider.java:73) 
at org.springframework.web.socket.client.standard.StandardWebSocketClient.<init>(StandardWebSocketClient.java:76) 
at Main.main(Main.java:10) 

Ich verstehe, ich brauche eine WebSocketContainer für das Projekt im Ordner META-INF zur Verfügung zu stellen, wie die Kommentare zu der fehlerhaften Methode angewiesen:

Aber ich verstehe nicht, wie Sie eine Datei in den Konstruktor ohne Argumente verbinden. Ich habe versucht, den Beispielen in dieser test case aber ohne Glück zu folgen. Ich muss nur verstehen, was genau der Container ist und wie man ihn in mein Projekt einführt.

Antwort

6

Javax Websocket bietet nur die Spezifikation. Es stellt die Implementierung nicht bereit. Um die vollständige Implementierung zu erhalten, können Sie tyrus-standalone client verwenden.

Wenn Sie Maven verwenden, fügen Sie diese Abhängigkeit:

<dependency> 
    <groupId>org.glassfish.tyrus.bundles</groupId> 
    <artifactId>tyrus-standalone-client</artifactId> 
    <version>1.9</version> 
</dependency> 
+0

Dank. Das habe ich versucht zu erreichen. Ich habe die Abhängigkeit zu meinem Klassenpfad hinzugefügt, aber es gibt immer noch die Ausnahme. Muss ich eine Klasse erweitern und die Container-Klasse irgendwie überschreiben oder an die Methode übergeben? –

+0

@ a.hrdie Sie brauchen nicht, erhalten Sie die gleiche Ausnahme? – Karthik

+0

ja, die gleiche Ausnahme. Ich denke, ich habe die Konfiguration des Clients falsch verstanden. Sollte dieses Projekt in einem Web-Servlet enthalten sein? –

Verwandte Themen