Witam,
mam problem z działaniem zestawu Spring WebSocket jako serwer + Spring WebSocket SockJS JAVA jako klient.
Problem polega na tym, że nie działa downgrade protokołu w sytuacji kiedy pomiedzy klientem a serwerem stoi proxy/apache które nie obsługuje WS.
Po stronie klienta w logach mam

The HTTP response from the server [400] did not permit the HTTP upgrade to WebSocket
Starting XHR Streamingsession url=http://localhost/rock/hello/227/f5a0936bdb554c2dbfdc06d10533aa0d/xhr_streaming

Co jest oki bo SockJS próbuje alternatyw ale one też się nie udają bo lecą błedy na serwerze

 WebSocketSession not yet initialized
    at org.springframework.util.Assert.state(Assert.java:70) ~[spring-core-4.3.17.RELEASE.jar:4.3.17.RELEASE]
    at org.springframework.web.socket.sockjs.transport.session.WebSocketServerSockJsSession.checkDelegateSessionInitialized(WebSocketServerSockJsSession.java:137) ~[spring-websocket-4.3.17.RELEASE.jar:4.3.17.RELEASE]
    at org.springframework.web.socket.sockjs.transport.session.WebSocketServerSockJsSession.getPrincipal(WebSocketServerSockJsSession.java:84) ~[spring-websocket-4.3.17.RELEASE.jar:4.3.17.RELEASE]
    at org.springframework.web.socket.sockjs.transport.TransportHandlingSockJsService.handleTransportRequest(TransportHandlingSockJsService.java:289) ~[spring-websocket-4.3.17.RELEASE.jar:4.3.17.RELEASE]

Niestety na necie nie ma wiele wpisów z tym problemem. TO jest prosta aplikacja helloworld żadnego security i innych libów....

Kod serwera

@Configuration
@EnableWebSocket
@EnableWebSocketMessageBroker
@EnableScheduling
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
    @Autowired
    ApplicationContext context;

    @Override
    public void configureMessageBroker(final MessageBrokerRegistry config) {
        config.enableSimpleBroker("/topic");
        config.setApplicationDestinationPrefixes("/app");
    }

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

    @Scheduled(fixedDelay = 2000)
    public void sender() {
        Map<String, Object> data = new HashMap<>();
        data.put("content", "Hey " + new Date());
        context.getBean(SimpMessagingTemplate.class).convertAndSend("/topic/greetings", data);
    }
}

Kod klienta

        StandardWebSocketClient webSocketClient = new StandardWebSocketClient();

        List<Transport> transports = new ArrayList();
        transports.add(new WebSocketTransport(webSocketClient));
        transports.add(new RestTemplateXhrTransport());

        SockJsClient sockJsClient = new SockJsClient(transports);
        WebSocketStompClient stompClient = new WebSocketStompClient(sockJsClient);
        stompClient.setMessageConverter(new MappingJackson2MessageConverter());

        String url = "http://localhost/rock/hello";
        StompSessionHandler sessionHandler = new MySessionHandler();
        ListenableFuture<StompSession> connect = stompClient.connect(url, sessionHandler);