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 = this.stompMessageConverter.toMessage(payload); + } + catch (Throwable error) { + logger.error("Failed to parse STOMP frame, WebSocket message payload: ", error); + sendErrorMessage(session, error); + return; + } - message = MessageBuilder.withPayloadAndHeaders(message.getPayload(), headers).build(); + if (logger.isTraceEnabled()) { + logger.trace("Message " + message); + } - if (SimpMessageType.CONNECT.equals(headers.getMessageType())) { - handleConnect(session, message); - } + try { + StompHeaderAccessor headers = StompHeaderAccessor.wrap(message); + headers.setSessionId(session.getId()); + headers.setUser(session.getPrincipal()); - outputChannel.send(message); + message = MessageBuilder.withPayloadAndHeaders(message.getPayload(), headers).build(); + if (SimpMessageType.CONNECT.equals(headers.getMessageType())) { + handleConnect(session, message); } - catch (Throwable t) { - logger.error("Terminating STOMP session due to failure to send message: ", t); - sendErrorMessage(session, t); - } + + outputChannel.send(message); } - catch (Throwable error) { - sendErrorMessage(session, error); + catch (Throwable t) { + logger.error("Terminating STOMP session due to failure to send message: ", t); + sendErrorMessage(session, t); } + } /**