WebSocketStompClient не будет подключаться к конечной точке SockJS

Я играю с новой (начиная с версии 4.2) поддержкой клиента Java STOMP. Моя отправная точка - руководство по началу работы (Использование WebSocket для создания интерактивного веб-приложения).

Следующая конечная точка предоставляется в примере:

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
    registry.addEndpoint("/hello").withSockJS();
}

Я могу успешно подключиться с помощью браузера клиента. При попытке подключиться к этой конечной точке с помощью клиента Java Stomp, используя следующее:

WebSocketClient transport = new StandardWebSocketClient();
WebSocketStompClient stompClient = new WebSocketStompClient(transport);
stompClient.setMessageConverter(new StringMessageConverter());
String url = "ws://127.0.0.1:8080/hello";       
ListenableFuture<StompSession> future = stompClient.connect(url,myHandler);

Я сталкиваюсь со следующим исключением:

08:56:30.629 [SimpleAsyncTaskExecutor-1] DEBUG o.s.m.simp.stomp.DefaultStompSession - Failed to connect session id=4e6737da-8f68-691d-375f-9e46f48bc149
javax.websocket.DeploymentException: The HTTP response from the server [HTTP/1.1 200 OK
] did not permit the HTTP upgrade to WebSocket
    at org.apache.tomcat.websocket.WsWebSocketContainer.parseStatus(WsWebSocketContainer.java:637) ~[tomcat-embed-websocket-8.0.20.jar:8.0.20]
    at org.apache.tomcat.websocket.WsWebSocketContainer.processResponse(WsWebSocketContainer.java:621) ~[tomcat-embed-websocket-8.0.20.jar:8.0.20]
    at org.apache.tomcat.websocket.WsWebSocketContainer.connectToServer(WsWebSocketContainer.java:309) ~[tomcat-embed-websocket-8.0.20.jar:8.0.20]
    at org.springframework.web.socket.client.standard.StandardWebSocketClient$1.call(StandardWebSocketClient.java:152) ~[spring-websocket-4.2.0.BUILD-SNAPSHOT.jar:4.2.0.BUILD-SNAPSHOT]
    at org.springframework.web.socket.client.standard.StandardWebSocketClient$1.call(StandardWebSocketClient.java:149) ~[spring-websocket-4.2.0.BUILD-SNAPSHOT.jar:4.2.0.BUILD-SNAPSHOT]
    at java.util.concurrent.FutureTask.run(Unknown Source) [na:1.8.0]
    at java.lang.Thread.run(Unknown Source) [na:1.8.0] 

После дальнейшего изучения я изменил конфигурацию конечной точки сервера на основе TomcatWebSocketTestServer.java, использованного в StompWebSocketIntegrationTests.java, следующим образом:

RequestUpgradeStrategy upgradeStrategy = new TomcatRequestUpgradeStrategy();
registry.addEndpoint("/hello")
    .setHandshakeHandler(new DefaultHandshakeHandler(upgradeStrategy))
    .setAllowedOrigins("*");

Теперь я могу подключиться, но клиенты браузера не могут.

GET http://localhost:8080/hello/info 404 (Not Found) 

Если я добавлю .withSockJs () к конфигурации конечной точки:

RequestUpgradeStrategy upgradeStrategy = new TomcatRequestUpgradeStrategy();
registry.addEndpoint("/hello")
    .setHandshakeHandler(new DefaultHandshakeHandler(upgradeStrategy))
    .setAllowedOrigins("*")
    .withSockJs();

клиенты браузера могут снова подключиться, но клиент java вернулся к исходной ошибке.

Должен ли я иметь возможность использовать одну и ту же конечную точку для обоих клиентов или мне нужно настроить две отдельные конечные точки в этом случае?

Ответы на вопрос(3)

Ваш ответ на вопрос