2015-07-09 16 views
5

Tôi đang cố gắng kết nối với máy chủ ổ cắm web SockJs qua Spring 4.2 WebsocketClient support. Đây là khách hàng của tôi cho đến nay:Cách triển khai WebSocketContainer vào lớp 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); 
} 

điều này sẽ cung cấp kết nối tôi cần đăng ký kênh của mình. Khi tôi chạy mã, tôi nhận được ngoại lệ sau đây:

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) 

Tôi hiểu rằng tôi cần phải cung cấp một WebSocketContainer cho dự án trong thư mục META-INF, theo hướng dẫn của các ý kiến ​​vào phương pháp thất bại:

* 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 

Nhưng tôi không hiểu cách kết nối tệp vào hàm tạo mà không có bất kỳ đối số nào. Tôi đã cố gắng làm theo các ví dụ trong số test case này nhưng không may mắn. Tôi chỉ cần hiểu chính xác vùng chứa là gì và cách triển khai nó vào dự án

Trả lời

6

Websocket của Javax chỉ cung cấp đặc điểm kỹ thuật. Nó không cung cấp việc thực hiện. Để thực hiện đầy đủ, bạn có thể sử dụng tyrus-standalone client.

Nếu bạn đang sử dụng Maven, thêm sự phụ thuộc này:

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

nhờ. Đây là những gì tôi đã cố gắng đạt được. Tôi đã thêm phụ thuộc vào classpath của tôi, nhưng nó vẫn còn ném ngoại lệ. Tôi có cần phải mở rộng một lớp học và ghi đè lên hoặc vượt qua lớp Container vào phương pháp nào đó? –

+0

@ a.hrdie bạn không cần, bạn có nhận được cùng một ngoại lệ không? – Karthik

+0

có, ngoại lệ tương tự. Tôi nghĩ rằng tôi đã hiểu lầm cấu hình của khách hàng. Dự án này có nên được chứa trong một servlet web không? –

Các vấn đề liên quan