@Override public String getAcceptedProtocol() { return this.delegate.getAcceptedProtocol(); }
@Override public String getAcceptedProtocol() { Assert.state(this.webSocketSession != null, "WebSocketSession not yet initialized"); return this.webSocketSession.getAcceptedProtocol(); }
@Override public String getAcceptedProtocol() { Assert.state(this.webSocketSession != null, "WebSocketSession not yet initialized"); return this.webSocketSession.getAcceptedProtocol(); }
String protocol = null; try { protocol = session.getAcceptedProtocol();
@Test public void doHandshake() throws Exception { WebSocketHttpHeaders headers = new WebSocketHttpHeaders(); headers.setSecWebSocketProtocol(Arrays.asList("echo")); this.wsSession = this.client.doHandshake(new TextWebSocketHandler(), headers, new URI(this.wsUrl)).get(); assertEquals(this.wsUrl, this.wsSession.getUri().toString()); assertEquals("echo", this.wsSession.getAcceptedProtocol()); }
@Test public void doHandshakeWithTaskExecutor() throws Exception { WebSocketHttpHeaders headers = new WebSocketHttpHeaders(); headers.setSecWebSocketProtocol(Arrays.asList("echo")); this.client.setTaskExecutor(new SimpleAsyncTaskExecutor()); this.wsSession = this.client.doHandshake(new TextWebSocketHandler(), headers, new URI(this.wsUrl)).get(); assertEquals(this.wsUrl, this.wsSession.getUri().toString()); assertEquals("echo", this.wsSession.getAcceptedProtocol()); }
@Test public void subProtocolNegotiation() throws Exception { WebSocketHttpHeaders headers = new WebSocketHttpHeaders(); headers.setSecWebSocketProtocol("foo"); URI url = new URI(getWsBaseUrl() + "/ws"); WebSocketSession session = this.webSocketClient.doHandshake(new TextWebSocketHandler(), headers, url).get(); assertEquals("foo", session.getAcceptedProtocol()); session.close(); }
/** * Resolves the {@link SubProtocolHandler} for the given {@code session} using * its {@link WebSocketSession#getAcceptedProtocol() accepted sub-protocol}. * @param session The session to resolve the sub-protocol handler for * @return The sub-protocol handler * @throws IllegalStateException if a protocol handler cannot be resolved */ public SubProtocolHandler findProtocolHandler(WebSocketSession session) { SubProtocolHandler handler; String protocol = session.getAcceptedProtocol(); if (StringUtils.hasText(protocol)) { handler = this.protocolHandlers.get(protocol); Assert.state(handler != null, () -> "No handler for sub-protocol '" + protocol + "', handlers = " + this.protocolHandlers); } else { handler = this.defaultProtocolHandler; Assert.state(handler != null, "No sub-protocol was requested and a default sub-protocol handler was not configured"); } return handler; }
@Test public void testSingleHandler() { SubProtocolHandler testProtocolHandler = spy(new StompSubProtocolHandler()); when(testProtocolHandler.getSupportedProtocols()).thenReturn(Collections.singletonList("foo")); SubProtocolHandlerRegistry subProtocolHandlerRegistry = new SubProtocolHandlerRegistry(Collections.<SubProtocolHandler>singletonList(testProtocolHandler)); WebSocketSession session = mock(WebSocketSession.class); when(session.getAcceptedProtocol()).thenReturn("foo", (String) null); SubProtocolHandler protocolHandler = subProtocolHandlerRegistry.findProtocolHandler(session); assertNotNull(protocolHandler); assertSame(protocolHandler, testProtocolHandler); protocolHandler = subProtocolHandlerRegistry.findProtocolHandler(session); assertNotNull(protocolHandler); assertSame(protocolHandler, testProtocolHandler); }
@Override public String getAcceptedProtocol() { return this.delegate.getAcceptedProtocol(); }
@Override public String getAcceptedProtocol() { return this.delegate.getAcceptedProtocol(); }
@Test public void testProtocolHandlers() { SubProtocolHandler defaultProtocolHandler = mock(SubProtocolHandler.class); SubProtocolHandlerRegistry subProtocolHandlerRegistry = new SubProtocolHandlerRegistry( Collections.<SubProtocolHandler>singletonList(new StompSubProtocolHandler()), defaultProtocolHandler); WebSocketSession session = mock(WebSocketSession.class); when(session.getAcceptedProtocol()).thenReturn("v10.stomp", (String) null); SubProtocolHandler protocolHandler = subProtocolHandlerRegistry.findProtocolHandler(session); assertNotNull(protocolHandler); assertThat(protocolHandler, instanceOf(StompSubProtocolHandler.class)); protocolHandler = subProtocolHandlerRegistry.findProtocolHandler(session); assertNotNull(protocolHandler); assertSame(protocolHandler, defaultProtocolHandler); assertEquals(subProtocolHandlerRegistry.getSubProtocols(), new StompSubProtocolHandler().getSupportedProtocols()); }
@Test public void testHandlerSelection() { SubProtocolHandler testProtocolHandler = new StompSubProtocolHandler(); SubProtocolHandlerRegistry subProtocolHandlerRegistry = new SubProtocolHandlerRegistry(testProtocolHandler); WebSocketSession session = mock(WebSocketSession.class); when(session.getAcceptedProtocol()).thenReturn("foo", "", null); try { subProtocolHandlerRegistry.findProtocolHandler(session); fail("IllegalStateException expected"); } catch (Exception e) { assertThat(e, instanceOf(IllegalStateException.class)); assertThat(e.getMessage(), containsString("No handler for sub-protocol 'foo'")); } SubProtocolHandler protocolHandler = subProtocolHandlerRegistry.findProtocolHandler(session); assertNotNull(protocolHandler); assertSame(protocolHandler, testProtocolHandler); protocolHandler = subProtocolHandlerRegistry.findProtocolHandler(session); assertNotNull(protocolHandler); assertSame(protocolHandler, testProtocolHandler); }
@Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { LOG.debug("Spring Websocket connection established! Accepted protocol is: " + session.getAcceptedProtocol()); serverSession = session; }
@Override public String getAcceptedProtocol() { Assert.state(this.webSocketSession != null, "WebSocketSession not yet initialized"); return this.webSocketSession.getAcceptedProtocol(); }
@Override public String getAcceptedProtocol() { Assert.state(this.webSocketSession != null, "WebSocketSession not yet initialized"); return this.webSocketSession.getAcceptedProtocol(); }
@Override public String getAcceptedProtocol() { Assert.state(this.webSocketSession != null, "WebSocketSession not yet initialized"); return this.webSocketSession.getAcceptedProtocol(); }
@Override public String getAcceptedProtocol() { Assert.state(this.webSocketSession != null, "WebSocketSession not yet initialized"); return this.webSocketSession.getAcceptedProtocol(); }
@Test @SuppressWarnings("unchecked") public void testWebSocketInboundChannelAdapter() throws Exception { WebSocketSession session = clientWebSocketContainer.getSession(null); assertNotNull(session); assertTrue(session.isOpen()); assertEquals("v10.stomp", session.getAcceptedProtocol()); Map<String, WebSocketSession> sessions = TestUtils.getPropertyValue(this.subProtocolWebSocketHandler, "sessions", Map.class); assertEquals(1, sessions.size()); String sessionId = sessions.keySet().iterator().next(); StompHeaderAccessor headers = StompHeaderAccessor.create(StompCommand.MESSAGE); headers.setLeaveMutable(true); headers.setSessionId(sessionId); Message<byte[]> message = MessageBuilder.createMessage(ByteBuffer.allocate(0).array(), headers.getMessageHeaders()); this.clientOutboundChannel.send(message); Message<?> received = this.webSocketChannel.receive(10000); assertNotNull(received); StompHeaderAccessor receivedHeaders = StompHeaderAccessor.wrap(received); assertEquals(StompCommand.MESSAGE, receivedHeaders.getCommand()); Object receivedPayload = received.getPayload(); assertThat(receivedPayload, instanceOf(String.class)); assertEquals("", receivedPayload); }
assertNotNull(session); assertTrue(session.isOpen()); assertEquals("v10.stomp", session.getAcceptedProtocol());