diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/annotation/support/SendToMethodReturnValueHandler.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/annotation/support/SendToMethodReturnValueHandler.java index 896362180e..dd0b521690 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/annotation/support/SendToMethodReturnValueHandler.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/annotation/support/SendToMethodReturnValueHandler.java @@ -188,11 +188,11 @@ public class SendToMethodReturnValueHandler implements HandlerMethodReturnValueH } } String name = DestinationPatternsMessageCondition.LOOKUP_DESTINATION_HEADER; - String destination = (String)message.getHeaders().get(name); - if (StringUtils.hasLength(destination) && !destination.startsWith("/")) { - destination = "/" + destination; - } - return new String[] { defaultPrefix + destination }; + String destination = (String) message.getHeaders().get(name); + Assert.hasText(destination, "No lookup destination header in " + message); + + return (destination.startsWith("/") ? + new String[] {defaultPrefix + destination} : new String[] {defaultPrefix + "/" + destination}); } private MessageHeaders createHeaders(String sessionId) { diff --git a/spring-messaging/src/test/java/org/springframework/messaging/simp/annotation/support/SendToMethodReturnValueHandlerTests.java b/spring-messaging/src/test/java/org/springframework/messaging/simp/annotation/support/SendToMethodReturnValueHandlerTests.java index 4635c41c4b..865849ea99 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/simp/annotation/support/SendToMethodReturnValueHandlerTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/simp/annotation/support/SendToMethodReturnValueHandlerTests.java @@ -186,18 +186,18 @@ public class SendToMethodReturnValueHandlerTests { } @Test - public void sendToDefaultDestinationWithoutLeadingSlash() throws Exception { + public void sendToDefaultDestinationWhenUsingDotPathSeparator() throws Exception { when(this.messageChannel.send(any(Message.class))).thenReturn(true); - Message inputMessage = createInputMessage("sess1", "sub1", "/app", "dest", null); + Message inputMessage = createInputMessage("sess1", "sub1", "/app/", "dest.foo.bar", null); this.handler.handleReturnValue(PAYLOAD, this.sendToDefaultDestReturnType, inputMessage); verify(this.messageChannel, times(1)).send(this.messageCaptor.capture()); Message message = this.messageCaptor.getAllValues().get(0); SimpMessageHeaderAccessor headers = SimpMessageHeaderAccessor.wrap(message); - assertEquals("/topic/dest", headers.getDestination()); + assertEquals("/topic/dest.foo.bar", headers.getDestination()); } @Test @@ -313,19 +313,19 @@ public class SendToMethodReturnValueHandlerTests { } @Test - public void sendToUserDefaultDestinationWithoutLeadingSlash() throws Exception { + public void sendToUserDefaultDestinationWhenUsingDotPathSeparator() throws Exception { when(this.messageChannel.send(any(Message.class))).thenReturn(true); TestUser user = new TestUser(); - Message inputMessage = createInputMessage("sess1", "sub1", "/app", "dest", user); + Message inputMessage = createInputMessage("sess1", "sub1", "/app/", "dest.foo.bar", user); this.handler.handleReturnValue(PAYLOAD, this.sendToUserDefaultDestReturnType, inputMessage); verify(this.messageChannel, times(1)).send(this.messageCaptor.capture()); Message message = this.messageCaptor.getAllValues().get(0); SimpMessageHeaderAccessor headers = SimpMessageHeaderAccessor.wrap(message); - assertEquals("/user/" + user.getName() + "/queue/dest", headers.getDestination()); + assertEquals("/user/" + user.getName() + "/queue/dest.foo.bar", headers.getDestination()); } @Test