2015-07-09 11 views
5

Próbuję połączyć się z serwerem gniazd sieci SockJs przez Spring 4.2 WebsocketClient support. To jest mój dotychczasowy klient:Jak zaimplementować WebSocketContainer w klasie 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); 
} 

zapewni to połączenie, którego potrzebuję do zasubskrybowania mojego kanału. Kiedy uruchomić kod, pojawia się następujący wyjątek:

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) 

Rozumiem, że trzeba zapewnić WebSocketContainer do projektu w folderze META-INF, zgodnie z zaleceniami uwag dotyczących sposobu upadającego:

* 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 

Ale nie rozumiem, jak podłączyć plik do konstruktora bez żadnych argumentów. Próbowałem wykonać przykłady w tym test case, ale bez powodzenia. Po prostu muszę zrozumieć, czym dokładnie jest kontener i jak go wdrożyć w mój projekt.

Odpowiedz

6

Javax websocket zawiera jedynie specyfikację. Nie zapewnia realizacji. Aby uzyskać pełną implementację, możesz użyć tyrus-standalone client.

Jeśli używasz Maven, dodać tę zależność:

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

dzięki. To właśnie próbowałem osiągnąć. Dodałem zależność do mojej ścieżki klas, ale wciąż wyrzucam wyjątek. Czy muszę rozszerzyć klasę i nadpisać lub przekazać klasę kontenera do metody w jakiś sposób? –

+0

@ a.hrdie nie musisz, masz ten sam wyjątek? – Karthik

+0

tak, ten sam wyjątek. Myślę, że źle zrozumiałem konfigurację klienta. Czy ten projekt powinien być zawarty w serwecie WWW? –

Powiązane problemy