Improve header processing in SimpMessagingTemplate
Headers provided to the SimpMessagingTemplate's convertAndSend methods are now automatically moved into the "nativeHeaders" sub-map. This ensures the headers will go out with the STOMP message and be received by subscribers. Issue: SPR-11387
This commit is contained in:
@@ -20,10 +20,12 @@ import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.springframework.messaging.Message;
|
||||
import org.springframework.messaging.StubMessageChannel;
|
||||
import org.springframework.messaging.support.NativeMessageHeaderAccessor;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNull;
|
||||
|
||||
/**
|
||||
* Unit tests for {@link org.springframework.messaging.simp.SimpMessagingTemplate}.
|
||||
@@ -43,6 +45,7 @@ public class SimpMessagingTemplateTests {
|
||||
this.messagingTemplate = new SimpMessagingTemplate(messageChannel);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void convertAndSendToUser() {
|
||||
this.messagingTemplate.convertAndSendToUser("joe", "/queue/foo", "data");
|
||||
@@ -69,4 +72,32 @@ public class SimpMessagingTemplateTests {
|
||||
assertEquals("/user/http:%2F%2Fjoe.openid.example.org%2F/queue/foo", headers.getDestination());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void convertAndSendWithCustomHeader() {
|
||||
Map<String, Object> headers = Collections.singletonMap("key", "value");
|
||||
this.messagingTemplate.convertAndSend("/foo", "data", headers);
|
||||
|
||||
List<Message<byte[]>> messages = this.messageChannel.getMessages();
|
||||
Message<byte[]> message = messages.get(0);
|
||||
SimpMessageHeaderAccessor resultHeaders = SimpMessageHeaderAccessor.wrap(message);
|
||||
|
||||
assertNull(resultHeaders.toMap().get("key"));
|
||||
assertEquals(Arrays.asList("value"), resultHeaders.getNativeHeader("key"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void convertAndSendWithCustomHeaderNonNative() {
|
||||
Map<String, Object> headers = new HashMap<String, Object>();
|
||||
headers.put("key", "value");
|
||||
headers.put(NativeMessageHeaderAccessor.NATIVE_HEADERS, Collections.emptyMap());
|
||||
this.messagingTemplate.convertAndSend("/foo", "data", headers);
|
||||
|
||||
List<Message<byte[]>> messages = this.messageChannel.getMessages();
|
||||
Message<byte[]> message = messages.get(0);
|
||||
SimpMessageHeaderAccessor resultHeaders = SimpMessageHeaderAccessor.wrap(message);
|
||||
|
||||
assertEquals("value", resultHeaders.toMap().get("key"));
|
||||
assertNull(resultHeaders.getNativeHeader("key"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user