Fix issue in simple broker with peer-to-peer messages
Issue: SPR-10930
This commit is contained in:
@@ -192,8 +192,7 @@ public class StompBrokerRelayMessageHandler extends AbstractBrokerMessageHandler
|
||||
if (SimpMessageType.MESSAGE.equals(messageType)) {
|
||||
sessionId = (sessionId == null) ? SystemStompRelaySession.ID : sessionId;
|
||||
headers.setSessionId(sessionId);
|
||||
command = (command == null) ? StompCommand.SEND : command;
|
||||
headers.setCommandIfNotSet(command);
|
||||
headers.updateStompCommandAsClientMessage();
|
||||
message = MessageBuilder.withPayloadAndHeaders(message.getPayload(), headers).build();
|
||||
}
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@ import java.util.concurrent.atomic.AtomicLong;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.messaging.Message;
|
||||
import org.springframework.messaging.simp.SimpMessageHeaderAccessor;
|
||||
import org.springframework.messaging.simp.SimpMessageType;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
@@ -218,9 +219,29 @@ public class StompHeaderAccessor extends SimpMessageHeaderAccessor {
|
||||
return toNativeHeaderMap();
|
||||
}
|
||||
|
||||
public void setCommandIfNotSet(StompCommand command) {
|
||||
public void updateStompCommandAsClientMessage() {
|
||||
|
||||
Assert.state(SimpMessageType.MESSAGE.equals(getMessageType()),
|
||||
"Unexpected message type " + getMessage());
|
||||
|
||||
if (getCommand() == null) {
|
||||
setHeader(COMMAND_HEADER, command);
|
||||
setHeader(COMMAND_HEADER, StompCommand.SEND);
|
||||
}
|
||||
else if (!getCommand().equals(StompCommand.SEND)) {
|
||||
throw new IllegalStateException("Unexpected STOMP command " + getCommand());
|
||||
}
|
||||
}
|
||||
|
||||
public void updateStompCommandAsServerMessage() {
|
||||
|
||||
Assert.state(SimpMessageType.MESSAGE.equals(getMessageType()),
|
||||
"Unexpected message type " + getMessage());
|
||||
|
||||
if ((getCommand() == null) || getCommand().equals(StompCommand.SEND)) {
|
||||
setHeader(COMMAND_HEADER, StompCommand.MESSAGE);
|
||||
}
|
||||
else if (!getCommand().equals(StompCommand.MESSAGE)) {
|
||||
throw new IllegalStateException("Unexpected STOMP command " + getCommand());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -150,9 +150,6 @@ public class StompProtocolHandler implements SubProtocolHandler {
|
||||
public void handleMessageToClient(WebSocketSession session, Message<?> message) {
|
||||
|
||||
StompHeaderAccessor headers = StompHeaderAccessor.wrap(message);
|
||||
if (headers.getCommand() == null && SimpMessageType.MESSAGE == headers.getMessageType()) {
|
||||
headers.setCommandIfNotSet(StompCommand.MESSAGE);
|
||||
}
|
||||
|
||||
if (headers.getMessageType() == SimpMessageType.CONNECT_ACK) {
|
||||
StompHeaderAccessor connectedHeaders = StompHeaderAccessor.create(StompCommand.CONNECTED);
|
||||
@@ -160,6 +157,9 @@ public class StompProtocolHandler implements SubProtocolHandler {
|
||||
connectedHeaders.setHeartbeat(0, 0); // no heart-beat support with simple broker
|
||||
headers = connectedHeaders;
|
||||
}
|
||||
else if (SimpMessageType.MESSAGE.equals(headers.getMessageType())) {
|
||||
headers.updateStompCommandAsServerMessage();
|
||||
}
|
||||
|
||||
if (headers.getCommand() == StompCommand.CONNECTED) {
|
||||
augmentConnectedHeaders(headers, session);
|
||||
|
||||
Reference in New Issue
Block a user