From 71e76196fe5b128f66ef6e3f0b2fa42d9efc7f70 Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Thu, 5 Sep 2013 10:25:30 -0400 Subject: [PATCH] Polish StompProtocolHandler --- .../simp/stomp/StompProtocolHandler.java | 51 ++++++++++--------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompProtocolHandler.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompProtocolHandler.java index de205925383..ce5af6da96b 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompProtocolHandler.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompProtocolHandler.java @@ -94,37 +94,40 @@ public class StompProtocolHandler implements SubProtocolHandler { public void handleMessageFromClient(WebSocketSession session, WebSocketMessage webSocketMessage, MessageChannel outputChannel) { + Message message; try { Assert.isInstanceOf(TextMessage.class, webSocketMessage); String payload = ((TextMessage)webSocketMessage).getPayload(); - Message message = this.stompMessageConverter.toMessage(payload); - - if (logger.isTraceEnabled()) { - logger.trace("Message " + message); - } - - try { - StompHeaderAccessor headers = StompHeaderAccessor.wrap(message); - headers.setSessionId(session.getId()); - headers.setUser(session.getPrincipal()); - - message = MessageBuilder.withPayloadAndHeaders(message.getPayload(), headers).build(); - - if (SimpMessageType.CONNECT.equals(headers.getMessageType())) { - handleConnect(session, message); - } - - outputChannel.send(message); - - } - catch (Throwable t) { - logger.error("Terminating STOMP session due to failure to send message: ", t); - sendErrorMessage(session, t); - } + message = this.stompMessageConverter.toMessage(payload); } catch (Throwable error) { + logger.error("Failed to parse STOMP frame, WebSocket message payload: ", error); sendErrorMessage(session, error); + return; } + + if (logger.isTraceEnabled()) { + logger.trace("Message " + message); + } + + try { + StompHeaderAccessor headers = StompHeaderAccessor.wrap(message); + headers.setSessionId(session.getId()); + headers.setUser(session.getPrincipal()); + + message = MessageBuilder.withPayloadAndHeaders(message.getPayload(), headers).build(); + + if (SimpMessageType.CONNECT.equals(headers.getMessageType())) { + handleConnect(session, message); + } + + outputChannel.send(message); + } + catch (Throwable t) { + logger.error("Terminating STOMP session due to failure to send message: ", t); + sendErrorMessage(session, t); + } + } /**