diff --git a/spring-websocket/src/main/java/org/springframework/web/messaging/PubSubHeaders.java b/spring-websocket/src/main/java/org/springframework/web/messaging/PubSubHeaders.java index 0e020779c4..e2a15998ad 100644 --- a/spring-websocket/src/main/java/org/springframework/web/messaging/PubSubHeaders.java +++ b/spring-websocket/src/main/java/org/springframework/web/messaging/PubSubHeaders.java @@ -17,6 +17,7 @@ package org.springframework.web.messaging; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -85,7 +86,7 @@ public class PubSubHeaders { this.messageHeaders = readOnly ? messageHeaders : new HashMap(messageHeaders); this.rawHeaders = this.messageHeaders.containsKey(RAW_HEADERS) ? - (Map) messageHeaders.get(RAW_HEADERS) : new HashMap(); + (Map) messageHeaders.get(RAW_HEADERS) : Collections.emptyMap(); if (this.messageHeaders.get(MESSAGE_TYPE) == null) { this.messageHeaders.put(MESSAGE_TYPE, MessageType.MESSAGE); diff --git a/spring-websocket/src/main/java/org/springframework/web/messaging/service/AbstractMessageService.java b/spring-websocket/src/main/java/org/springframework/web/messaging/service/AbstractMessageService.java index d8a81b662d..c3a4a88047 100644 --- a/spring-websocket/src/main/java/org/springframework/web/messaging/service/AbstractMessageService.java +++ b/spring-websocket/src/main/java/org/springframework/web/messaging/service/AbstractMessageService.java @@ -75,7 +75,8 @@ public abstract class AbstractMessageService { logger.trace("Processing notification: " + message); } - MessageType messageType = (MessageType) message.getHeaders().get("messageType"); + PubSubHeaders headers = new PubSubHeaders(message.getHeaders(), true); + MessageType messageType = headers.getMessageType(); if (messageType == null || messageType.equals(MessageType.OTHER)) { processOther(message); } diff --git a/spring-websocket/src/main/java/org/springframework/web/messaging/stomp/StompHeaders.java b/spring-websocket/src/main/java/org/springframework/web/messaging/stomp/StompHeaders.java index eb6e0fafdf..f629809b59 100644 --- a/spring-websocket/src/main/java/org/springframework/web/messaging/stomp/StompHeaders.java +++ b/spring-websocket/src/main/java/org/springframework/web/messaging/stomp/StompHeaders.java @@ -224,6 +224,9 @@ public class StompHeaders extends PubSubHeaders { if (subscriptionId != null) { getRawHeaders().put(SUBSCRIPTION, subscriptionId); } + if (StompCommand.MESSAGE.equals(getStompCommand()) && (getMessageId() == null)) { + getRawHeaders().put(MESSAGE_ID, getMessageHeaders().get(ID).toString()); + } } }