I experienced the same problem. I found that spring provides a standard socket library for web sockets, which I used to test my server side code.
@LocalServerPort
private int port;
private SockJsClient sockJsClient;
private WebSocketStompClient stompClient;
private final WebSocketHttpHeaders headers = new WebSocketHttpHeaders();
@Before
public void setup() {
List<Transport> transports = new ArrayList<>();
transports.add(new WebSocketTransport(new StandardWebSocketClient()));
this.sockJsClient = new SockJsClient(transports);
this.stompClient = new WebSocketStompClient(sockJsClient);
this.stompClient.setMessageConverter(new MappingJackson2MessageConverter());
}
@Test
public void getGreeting() throws Exception {
final CountDownLatch latch = new CountDownLatch(1);
final AtomicReference<Throwable> failure = new AtomicReference<>();
StompSessionHandler handler = new TestSessionHandler(failure) {
@Override
public void afterConnected(final StompSession session, StompHeaders connectedHeaders) {
session.subscribe("/user/testuser1/reply", new StompFrameHandler() {
@Override
public Type getPayloadType(StompHeaders headers) {
return Greeting.class;
}
@Override
public void handleFrame(StompHeaders headers, Object payload) {
MessageSendDTO greeting = (MessageSendDTO) payload;
try {
System.out.println("#################### "+greeting.getWriter());
assertEquals("testuser1", greeting.getWriter());
} catch (Throwable t) {
failure.set(t);
} finally {
session.disconnect();
latch.countDown();
}
}
});
try {
MessageSendDTO dto= new MessageSendDTO();
dto.setWriter("testuser1");
dto.setReceiver("testuser2");
dto.setMessageBody("TESTING ");
GsonBuilder builder = new GsonBuilder();
Gson gson = builder.create();
session.send("/app/newMessage", dto);
} catch (Throwable t) {
failure.set(t);
latch.countDown();
}
}
};
this.stompClient.connect("ws://localhost:8080/newMessage", this.headers, handler, this.port);
if (latch.await(20, TimeUnit.SECONDS)) {
if (failure.get() != null) {
throw new AssertionError("", failure.get());
}
}
else {
fail("Greeting not received");
}
. , .