diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompBrokerRelayMessageHandler.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompBrokerRelayMessageHandler.java index 7c4017d3b8a..4deba94bf5f 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompBrokerRelayMessageHandler.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompBrokerRelayMessageHandler.java @@ -283,7 +283,7 @@ public class StompBrokerRelayMessageHandler extends AbstractBrokerMessageHandler if (SimpMessageType.MESSAGE.equals(messageType)) { sessionId = (sessionId == null) ? SystemStompRelaySession.ID : sessionId; headers.setSessionId(sessionId); - headers.updateStompCommandAsClientMessage(); + command = headers.updateStompCommandAsClientMessage(); message = MessageBuilder.withPayload(message.getPayload()).setHeaders(headers).build(); } @@ -292,7 +292,7 @@ public class StompBrokerRelayMessageHandler extends AbstractBrokerMessageHandler return; } - if (command != null && command.requiresDestination() && !checkDestinationPrefix(destination)) { + if ((command != null) && command.requiresDestination() && !checkDestinationPrefix(destination)) { return; } @@ -386,7 +386,7 @@ public class StompBrokerRelayMessageHandler extends AbstractBrokerMessageHandler readStompFrame(message); } }); - forwardInternal(tcpConn, connectMessage); + forwardInternal(connectMessage, tcpConn); } protected void connectionClosed() { @@ -445,7 +445,7 @@ public class StompBrokerRelayMessageHandler extends AbstractBrokerMessageHandler logger.warn("Connection to STOMP broker is not active"); handleForwardFailure(message); } - else if (!forwardInternal(tcpConnection, message)) { + else if (!forwardInternal(message, tcpConnection)) { handleForwardFailure(message); } } @@ -457,7 +457,7 @@ public class StompBrokerRelayMessageHandler extends AbstractBrokerMessageHandler } private boolean forwardInternal( - TcpConnection, Message> tcpConnection, Message message) { + Message message, TcpConnection, Message> tcpConnection) { Assert.isInstanceOf(byte[].class, message.getPayload(), "Message's payload must be a byte[]"); diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompHeaderAccessor.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompHeaderAccessor.java index a9724307a5a..fa2b4fa214a 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompHeaderAccessor.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompHeaderAccessor.java @@ -220,7 +220,7 @@ public class StompHeaderAccessor extends SimpMessageHeaderAccessor { return toNativeHeaderMap(); } - public void updateStompCommandAsClientMessage() { + public StompCommand updateStompCommandAsClientMessage() { Assert.state(SimpMessageType.MESSAGE.equals(getMessageType()), "Unexpected message type " + getMessage()); @@ -231,6 +231,8 @@ public class StompHeaderAccessor extends SimpMessageHeaderAccessor { else if (!getCommand().equals(StompCommand.SEND)) { throw new IllegalStateException("Unexpected STOMP command " + getCommand()); } + + return getCommand(); } public void updateStompCommandAsServerMessage() { diff --git a/spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/StompBrokerRelayMessageHandlerIntegrationTests.java b/spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/StompBrokerRelayMessageHandlerIntegrationTests.java index 0dcd4c78dd9..25c3cbe9bcf 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/StompBrokerRelayMessageHandlerIntegrationTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/StompBrokerRelayMessageHandlerIntegrationTests.java @@ -113,7 +113,9 @@ public class StompBrokerRelayMessageHandlerIntegrationTests { } } - // test "host" header (virtualHost property) when TCP client is behind interface and configurable + // When TCP client is behind interface and configurable: + // test "host" header (virtualHost property) + // test "/user/.." destination is excluded @Test public void publishSubscribe() throws Exception {