public WebSocketHttpRequestHandler(WebSocketHandler wsHandler, HandshakeHandler handshakeHandler) { Assert.notNull(wsHandler, "wsHandler must not be null"); Assert.notNull(handshakeHandler, "handshakeHandler must not be null"); this.wsHandler = new ExceptionWebSocketHandlerDecorator(new LoggingWebSocketHandlerDecorator(wsHandler)); this.handshakeHandler = handshakeHandler; }
@Override public void afterConnectionEstablished(WebSocketSession session) { try { getDelegate().afterConnectionEstablished(session); } catch (Throwable ex) { tryCloseWithError(session, ex, logger); } }
@Override public void onError(javax.websocket.Session session, Throwable exception) { try { this.handler.handleTransportError(this.wsSession, exception); } catch (Throwable ex) { ExceptionWebSocketHandlerDecorator.tryCloseWithError(this.wsSession, ex, logger); } }
@Override public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) { try { getDelegate().afterConnectionClosed(session, closeStatus); } catch (Throwable ex) { if (logger.isWarnEnabled()) { logger.warn("Unhandled exception after connection closed for " + this, ex); } } }
@Test public void handleTransportError() throws Exception { Exception exception = new Exception("transport error"); willThrow(new IllegalStateException("error")) .given(this.delegate).handleTransportError(this.session, exception); this.decorator.handleTransportError(this.session, exception); assertEquals(CloseStatus.SERVER_ERROR, this.session.getCloseStatus()); }
@Test public void afterConnectionEstablished() throws Exception { willThrow(new IllegalStateException("error")) .given(this.delegate).afterConnectionEstablished(this.session); this.decorator.afterConnectionEstablished(this.session); assertEquals(CloseStatus.SERVER_ERROR, this.session.getCloseStatus()); }
@Test public void afterConnectionClosed() throws Exception { CloseStatus closeStatus = CloseStatus.NORMAL; willThrow(new IllegalStateException("error")) .given(this.delegate).afterConnectionClosed(this.session, closeStatus); this.decorator.afterConnectionClosed(this.session, closeStatus); assertNull(this.session.getCloseStatus()); }
@Test public void handleMessage() throws Exception { TextMessage message = new TextMessage("payload"); willThrow(new IllegalStateException("error")) .given(this.delegate).handleMessage(this.session, message); this.decorator.handleMessage(this.session, message); assertEquals(CloseStatus.SERVER_ERROR, this.session.getCloseStatus()); }
private void handlePongMessage(javax.websocket.Session session, ByteBuffer payload) { PongMessage pongMessage = new PongMessage(payload); try { this.handler.handleMessage(this.wsSession, pongMessage); } catch (Throwable ex) { ExceptionWebSocketHandlerDecorator.tryCloseWithError(this.wsSession, ex, logger); } }
wsHandler = ((ExceptionWebSocketHandlerDecorator) wsHandler).getDelegate(); assertThat(wsHandler, Matchers.instanceOf(LoggingWebSocketHandlerDecorator.class)); wsHandler = ((LoggingWebSocketHandlerDecorator) wsHandler).getDelegate();
@Override public void handleTransportError(WebSocketSession session, Throwable exception) { try { getDelegate().handleTransportError(session, exception); } catch (Throwable ex) { tryCloseWithError(session, ex, logger); } }
private void handleBinaryMessage(javax.websocket.Session session, ByteBuffer payload, boolean isLast) { BinaryMessage binaryMessage = new BinaryMessage(payload, isLast); try { this.handler.handleMessage(this.wsSession, binaryMessage); } catch (Throwable ex) { ExceptionWebSocketHandlerDecorator.tryCloseWithError(this.wsSession, ex, logger); } }
/** * Create a new SockJsHttpRequestHandler. * @param sockJsService the SockJS service * @param webSocketHandler the websocket handler */ public SockJsHttpRequestHandler(SockJsService sockJsService, WebSocketHandler webSocketHandler) { Assert.notNull(sockJsService, "SockJsService must not be null"); Assert.notNull(webSocketHandler, "WebSocketHandler must not be null"); this.sockJsService = sockJsService; this.webSocketHandler = new ExceptionWebSocketHandlerDecorator(new LoggingWebSocketHandlerDecorator(webSocketHandler)); }
@Override public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) { try { getDelegate().afterConnectionClosed(session, closeStatus); } catch (Throwable ex) { if (logger.isWarnEnabled()) { logger.warn("Unhandled exception after connection closed for " + this, ex); } } }
@Override public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) { try { getDelegate().handleMessage(session, message); } catch (Throwable ex) { tryCloseWithError(session, ex, logger); } }
@OnWebSocketError public void onWebSocketError(Throwable cause) { try { this.webSocketHandler.handleTransportError(this.wsSession, cause); } catch (Throwable ex) { ExceptionWebSocketHandlerDecorator.tryCloseWithError(this.wsSession, ex, logger); } }
@Before public void setup() { this.delegate = mock(WebSocketHandler.class); this.decorator = new ExceptionWebSocketHandlerDecorator(this.delegate); this.session = new TestWebSocketSession(); this.session.setOpen(true); }
@Override public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) { try { getDelegate().afterConnectionClosed(session, closeStatus); } catch (Throwable ex) { if (logger.isWarnEnabled()) { logger.warn("Unhandled exception after connection closed for " + this, ex); } } }
@Override public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) { try { getDelegate().handleMessage(session, message); } catch (Throwable ex) { tryCloseWithError(session, ex, logger); } }
private void handleTextMessage(javax.websocket.Session session, String payload, boolean isLast) { TextMessage textMessage = new TextMessage(payload, isLast); try { this.handler.handleMessage(this.wsSession, textMessage); } catch (Throwable ex) { ExceptionWebSocketHandlerDecorator.tryCloseWithError(this.wsSession, ex, logger); } }