From 08f1cb454a2d23a0c63cd846196b8d43205e7945 Mon Sep 17 00:00:00 2001 From: Ilja Date: Mon, 1 Apr 2019 10:14:53 +0200 Subject: [PATCH 1/2] 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 18687736cfc0..228abd915fb7 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 @@ -362,9 +362,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 1b744a278fde..5ef8482697b8 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 @@ -659,4 +659,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); + } + } From 32f82c0ed01225b394dfccf72dd8020dced18efa Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Fri, 8 Nov 2019 17:47:59 +0000 Subject: [PATCH 2/2] Polishing --- .../messaging/simp/stomp/StompSession.java | 3 ++- .../messaging/simp/stomp/DefaultStompSessionTests.java | 10 +++++----- 2 files changed, 7 insertions(+), 6 deletions(-) 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 ca6d99a323f9..61e0b68489de 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 @@ -117,8 +117,9 @@ public interface StompSession { void disconnect(); /** - * Disconnect the session by sending a DISCONNECT frame. + * Variant of {@link #disconnect()} with headers. * @param headers the headers for the disconnect message frame + * @since 5.2.2 */ void disconnect(StompHeaders headers); 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 5ef8482697b8..7f979b54213e 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 @@ -662,7 +662,7 @@ public void disconnect() { @Test public void disconnectWithHeaders() { this.session.afterConnected(this.connection); - assertTrue(this.session.isConnected()); + assertThat(this.session.isConnected()).isTrue(); StompHeaders headers = new StompHeaders(); headers.add("foo", "bar"); @@ -672,11 +672,11 @@ public void disconnectWithHeaders() { 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"); + assertThat(headers.size()).as(headers.toString()).isEqualTo(1); + assertThat(headers.get("foo").size()).isEqualTo(1); + assertThat(headers.get("foo").get(0)).isEqualTo("bar"); - assertFalse(this.session.isConnected()); + assertThat(this.session.isConnected()).isFalse(); verifyNoMoreInteractions(this.sessionHandler); }