From 9614d87d0e9d62bece6fa4df798ca8d501c52480 Mon Sep 17 00:00:00 2001 From: Ilja Date: Mon, 1 Apr 2019 10:14:53 +0200 Subject: [PATCH] Allow sending headers with the disconnect frame --- .../simp/stomp/DefaultStompSession.java | 8 +++++++ .../messaging/simp/stomp/StompSession.java | 6 ++++++ .../simp/stomp/DefaultStompSessionTests.java | 21 +++++++++++++++++++ 3 files changed, 35 insertions(+) diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/DefaultStompSession.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/DefaultStompSession.java index c2512edc030e..2c1a51d193a7 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/DefaultStompSession.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/DefaultStompSession.java @@ -360,9 +360,17 @@ private void unsubscribe(String id, @Nullable StompHeaders headers) { @Override public void disconnect() { + disconnect(null); + } + + @Override + public void disconnect(@Nullable StompHeaders headers) { this.closing = true; try { StompHeaderAccessor accessor = createHeaderAccessor(StompCommand.DISCONNECT); + if (headers != null) { + accessor.addNativeHeaders(headers); + } Message message = createMessage(accessor, EMPTY_PAYLOAD); execute(message); } diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompSession.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompSession.java index 703f4ee1c0c9..ca6d99a323f9 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompSession.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompSession.java @@ -116,6 +116,12 @@ public interface StompSession { */ void disconnect(); + /** + * Disconnect the session by sending a DISCONNECT frame. + * @param headers the headers for the disconnect message frame + */ + void disconnect(StompHeaders headers); + /** * A handle to use to track receipts. diff --git a/spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/DefaultStompSessionTests.java b/spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/DefaultStompSessionTests.java index 78d50000ed73..a432c467eab6 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/DefaultStompSessionTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/DefaultStompSessionTests.java @@ -636,4 +636,25 @@ public void disconnect() { verifyNoMoreInteractions(this.sessionHandler); } + @Test + public void disconnectWithHeaders() { + this.session.afterConnected(this.connection); + assertTrue(this.session.isConnected()); + + StompHeaders headers = new StompHeaders(); + headers.add("foo", "bar"); + + this.session.disconnect(headers); + + Message message = this.messageCaptor.getValue(); + StompHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class); + headers = StompHeaders.readOnlyStompHeaders(accessor.getNativeHeaders()); + assertEquals(headers.toString(), 1, headers.size()); + assertEquals(headers.get("foo").size(), 1); + assertEquals(headers.get("foo").get(0), "bar"); + + assertFalse(this.session.isConnected()); + verifyNoMoreInteractions(this.sessionHandler); + } + }