2015-07-09 9 views
5

Sto tentando di connettermi a un server di socket Web SockJs tramite Spring 4.2 WebsocketClient support. Questo è il mio cliente finora:Come implementare WebSocketContainer nella classe StandardWebSocketClient

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); 
} 

questo fornirà la connessione che ho bisogno di iscriversi al mio canale. Quando eseguo il codice, ottengo la seguente eccezione:

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) 

ho capito che ho bisogno di fornire una WebSocketContainer al progetto nella cartella META-INF, come indicato dai commenti sul metodo in mancanza:

* Obtain a new instance of a WebSocketContainer. The method looks for the 
* ContainerProvider implementation class in the order listed in the META-INF/services/javax.websocket.ContainerProvider 
* file, returning the WebSocketContainer implementation from the ContainerProvider implementation 

Ma non capisco come collegare un file al costruttore senza argomenti. Ho tentato di seguire gli esempi in questo test case ma senza fortuna. Ho solo bisogno di capire che cos'è esattamente il contenitore e come implementarlo nel mio progetto

risposta

6

Javs websocket fornisce solo le specifiche. Non fornisce l'implementazione. Per ottenere l'implementazione completa è possibile utilizzare tyrus-standalone client.

Se si utilizza Maven, aggiungere questa dipendenza:

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

grazie. Questo è quello che ho cercato di ottenere. Ho aggiunto la dipendenza al mio classpath, ma continua a generare un'eccezione. Devo estendere una classe e sovrascrivere o passare la classe Container nel metodo in qualche modo? –

+0

@ a.hrdie non è necessario, stai ricevendo la stessa eccezione? – Karthik

+0

sì, la stessa eccezione. Penso di aver frainteso la configurazione del client. Questo progetto dovrebbe essere contenuto in un servlet web? –

Problemi correlati