Browse Source

Polish StompProtocolHandler

pull/353/head
Rossen Stoyanchev 13 years ago
parent
commit
71e76196fe
  1. 45
      spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompProtocolHandler.java

45
spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompProtocolHandler.java

@ -94,37 +94,40 @@ public class StompProtocolHandler implements SubProtocolHandler { @@ -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);
}
}
/**

Loading…
Cancel
Save