Skip to content

Commit bd68fef

Browse files
committed
Fix issue with clearing subscriptions on disconnect
1 parent 210be9c commit bd68fef

File tree

3 files changed

+12
-11
lines changed

3 files changed

+12
-11
lines changed

spring-messaging/src/main/java/org/springframework/messaging/simp/handler/SimpleBrokerMessageHandler.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ public void setSubscriptionRegistry(SubscriptionRegistry subscriptionRegistry) {
5656

5757
@Override
5858
protected Collection<SimpMessageType> getSupportedMessageTypes() {
59-
return Arrays.asList(SimpMessageType.MESSAGE, SimpMessageType.SUBSCRIBE, SimpMessageType.UNSUBSCRIBE);
59+
return Arrays.asList(SimpMessageType.MESSAGE, SimpMessageType.SUBSCRIBE,
60+
SimpMessageType.UNSUBSCRIBE, SimpMessageType.DISCONNECT);
6061
}
6162

6263
@Override

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

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,20 +47,20 @@ public class StompWebSocketHandler extends TextWebSocketHandlerAdapter implement
4747

4848
private static Log logger = LogFactory.getLog(StompWebSocketHandler.class);
4949

50-
private MessageChannel outputChannel;
50+
private MessageChannel clientInputChannel;
5151

5252
private final StompMessageConverter stompMessageConverter = new StompMessageConverter();
5353

5454
private final Map<String, WebSocketSession> sessions = new ConcurrentHashMap<String, WebSocketSession>();
5555

5656

5757
/**
58-
* @param outputChannel the channel to which incoming STOMP/WebSocket messages should
58+
* @param clientInputChannel the channel to which incoming STOMP/WebSocket messages should
5959
* be sent to
6060
*/
61-
public StompWebSocketHandler(MessageChannel outputChannel) {
62-
Assert.notNull(outputChannel, "clientInputChannel is required");
63-
this.outputChannel = outputChannel;
61+
public StompWebSocketHandler(MessageChannel clientInputChannel) {
62+
Assert.notNull(clientInputChannel, "clientInputChannel is required");
63+
this.clientInputChannel = clientInputChannel;
6464
}
6565

6666

@@ -70,7 +70,7 @@ public StompMessageConverter getStompMessageConverter() {
7070

7171
@Override
7272
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
73-
Assert.notNull(this.outputChannel, "No output channel for STOMP messages.");
73+
Assert.notNull(this.clientInputChannel, "No output channel for STOMP messages.");
7474
this.sessions.put(session.getId(), session);
7575
}
7676

@@ -102,7 +102,7 @@ protected void handleTextMessage(WebSocketSession session, TextMessage textMessa
102102
}
103103

104104
message = MessageBuilder.fromMessage(message).copyHeaders(headers.toMap()).build();
105-
this.outputChannel.send(message);
105+
this.clientInputChannel.send(message);
106106
}
107107
catch (Throwable t) {
108108
logger.error("Terminating STOMP session due to failure to send message: ", t);
@@ -170,7 +170,7 @@ public void afterConnectionClosed(WebSocketSession session, CloseStatus status)
170170
SimpMessageHeaderAccessor headers = SimpMessageHeaderAccessor.create(SimpMessageType.DISCONNECT);
171171
headers.setSessionId(session.getId());
172172
Message<?> message = MessageBuilder.withPayload(new byte[0]).copyHeaders(headers.toMap()).build();
173-
this.outputChannel.send(message);
173+
this.clientInputChannel.send(message);
174174
}
175175

176176
/**

spring-messaging/src/test/java/org/springframework/messaging/simp/handler/SimpleBrokerWebMessageHandlerTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import org.springframework.messaging.MessageChannel;
2929
import org.springframework.messaging.simp.SimpMessageHeaderAccessor;
3030
import org.springframework.messaging.simp.SimpMessageType;
31-
import org.springframework.messaging.simp.handler.SimpleBrokerMessageHandler;
3231
import org.springframework.messaging.support.MessageBuilder;
3332

3433
import static org.junit.Assert.*;
@@ -60,7 +59,8 @@ public void setup() {
6059

6160
@Test
6261
public void getSupportedMessageTypes() {
63-
assertEquals(Arrays.asList(SimpMessageType.MESSAGE, SimpMessageType.SUBSCRIBE, SimpMessageType.UNSUBSCRIBE),
62+
assertEquals(Arrays.asList(SimpMessageType.MESSAGE, SimpMessageType.SUBSCRIBE,
63+
SimpMessageType.UNSUBSCRIBE, SimpMessageType.DISCONNECT),
6464
this.messageHandler.getSupportedMessageTypes());
6565
}
6666

0 commit comments

Comments
 (0)