From bd68fefc6f9b61b49bdadcad83f6eeb79d4ae96f Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Fri, 12 Jul 2013 15:30:12 -0400 Subject: [PATCH] Fix issue with clearing subscriptions on disconnect --- .../simp/handler/SimpleBrokerMessageHandler.java | 3 ++- .../simp/stomp/StompWebSocketHandler.java | 16 ++++++++-------- .../SimpleBrokerWebMessageHandlerTests.java | 4 ++-- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/handler/SimpleBrokerMessageHandler.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/handler/SimpleBrokerMessageHandler.java index 74d989612d..0fcf5eb613 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/handler/SimpleBrokerMessageHandler.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/handler/SimpleBrokerMessageHandler.java @@ -56,7 +56,8 @@ public class SimpleBrokerMessageHandler extends AbstractSimpMessageHandler { @Override protected Collection getSupportedMessageTypes() { - return Arrays.asList(SimpMessageType.MESSAGE, SimpMessageType.SUBSCRIBE, SimpMessageType.UNSUBSCRIBE); + return Arrays.asList(SimpMessageType.MESSAGE, SimpMessageType.SUBSCRIBE, + SimpMessageType.UNSUBSCRIBE, SimpMessageType.DISCONNECT); } @Override diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompWebSocketHandler.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompWebSocketHandler.java index 0cfb9d5ebb..8984921657 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompWebSocketHandler.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompWebSocketHandler.java @@ -47,7 +47,7 @@ public class StompWebSocketHandler extends TextWebSocketHandlerAdapter implement private static Log logger = LogFactory.getLog(StompWebSocketHandler.class); - private MessageChannel outputChannel; + private MessageChannel clientInputChannel; private final StompMessageConverter stompMessageConverter = new StompMessageConverter(); @@ -55,12 +55,12 @@ public class StompWebSocketHandler extends TextWebSocketHandlerAdapter implement /** - * @param outputChannel the channel to which incoming STOMP/WebSocket messages should + * @param clientInputChannel the channel to which incoming STOMP/WebSocket messages should * be sent to */ - public StompWebSocketHandler(MessageChannel outputChannel) { - Assert.notNull(outputChannel, "clientInputChannel is required"); - this.outputChannel = outputChannel; + public StompWebSocketHandler(MessageChannel clientInputChannel) { + Assert.notNull(clientInputChannel, "clientInputChannel is required"); + this.clientInputChannel = clientInputChannel; } @@ -70,7 +70,7 @@ public class StompWebSocketHandler extends TextWebSocketHandlerAdapter implement @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { - Assert.notNull(this.outputChannel, "No output channel for STOMP messages."); + Assert.notNull(this.clientInputChannel, "No output channel for STOMP messages."); this.sessions.put(session.getId(), session); } @@ -102,7 +102,7 @@ public class StompWebSocketHandler extends TextWebSocketHandlerAdapter implement } message = MessageBuilder.fromMessage(message).copyHeaders(headers.toMap()).build(); - this.outputChannel.send(message); + this.clientInputChannel.send(message); } catch (Throwable t) { logger.error("Terminating STOMP session due to failure to send message: ", t); @@ -170,7 +170,7 @@ public class StompWebSocketHandler extends TextWebSocketHandlerAdapter implement SimpMessageHeaderAccessor headers = SimpMessageHeaderAccessor.create(SimpMessageType.DISCONNECT); headers.setSessionId(session.getId()); Message message = MessageBuilder.withPayload(new byte[0]).copyHeaders(headers.toMap()).build(); - this.outputChannel.send(message); + this.clientInputChannel.send(message); } /** diff --git a/spring-messaging/src/test/java/org/springframework/messaging/simp/handler/SimpleBrokerWebMessageHandlerTests.java b/spring-messaging/src/test/java/org/springframework/messaging/simp/handler/SimpleBrokerWebMessageHandlerTests.java index 4b1b0a6927..5044f74e6d 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/simp/handler/SimpleBrokerWebMessageHandlerTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/simp/handler/SimpleBrokerWebMessageHandlerTests.java @@ -28,7 +28,6 @@ import org.springframework.messaging.Message; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.simp.SimpMessageHeaderAccessor; import org.springframework.messaging.simp.SimpMessageType; -import org.springframework.messaging.simp.handler.SimpleBrokerMessageHandler; import org.springframework.messaging.support.MessageBuilder; import static org.junit.Assert.*; @@ -60,7 +59,8 @@ public class SimpleBrokerWebMessageHandlerTests { @Test public void getSupportedMessageTypes() { - assertEquals(Arrays.asList(SimpMessageType.MESSAGE, SimpMessageType.SUBSCRIBE, SimpMessageType.UNSUBSCRIBE), + assertEquals(Arrays.asList(SimpMessageType.MESSAGE, SimpMessageType.SUBSCRIBE, + SimpMessageType.UNSUBSCRIBE, SimpMessageType.DISCONNECT), this.messageHandler.getSupportedMessageTypes()); }