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);