/** * Build a 'nested' accessor for the given message. * @param message the message to build a new accessor for * @return the nested accessor (typically a specific subclass) */ protected MessageHeaderAccessor createAccessor(Message<?> message) { return new MessageHeaderAccessor(message); }
private MessageBuilder(Message<T> originalMessage) { Assert.notNull(originalMessage, "Message must not be null"); this.payload = originalMessage.getPayload(); this.originalMessage = originalMessage; this.headerAccessor = new MessageHeaderAccessor(originalMessage); }
/** * Create a new builder for a message with the given payload. * @param payload the payload */ public static <T> MessageBuilder<T> withPayload(T payload) { return new MessageBuilder<>(payload, new MessageHeaderAccessor()); }
@Test public void newEmptyHeaders() { MessageHeaderAccessor accessor = new MessageHeaderAccessor(); assertEquals(0, accessor.toMap().size()); }
@Test public void testRemoveHeader() { Message<?> message = new GenericMessage<>("payload", Collections.singletonMap("foo", "bar")); MessageHeaderAccessor accessor = new MessageHeaderAccessor(message); accessor.removeHeader("foo"); Map<String, Object> headers = accessor.toMap(); assertFalse(headers.containsKey("foo")); }
@Test public void testRemoveHeaderEvenIfNull() { Message<?> message = new GenericMessage<>("payload", Collections.singletonMap("foo", null)); MessageHeaderAccessor accessor = new MessageHeaderAccessor(message); accessor.removeHeader("foo"); Map<String, Object> headers = accessor.toMap(); assertFalse(headers.containsKey("foo")); }
@Test public void idGeneratorCustom() { final UUID id = new UUID(0L, 23L); MessageHeaderAccessor accessor = new MessageHeaderAccessor(); accessor.setIdGenerator(() -> id); assertSame(id, accessor.getMessageHeaders().getId()); }
@Test public void timestampDefaultBehavior() { MessageHeaderAccessor accessor = new MessageHeaderAccessor(); assertNull(accessor.getMessageHeaders().getTimestamp()); }
@Test public void idGeneratorDefaultBehavior() { MessageHeaderAccessor accessor = new MessageHeaderAccessor(); assertNotNull(accessor.getMessageHeaders().getId()); }
@Test public void existingHeaders() throws InterruptedException { Map<String, Object> map = new HashMap<>(); map.put("foo", "bar"); map.put("bar", "baz"); GenericMessage<String> message = new GenericMessage<>("payload", map); MessageHeaderAccessor accessor = new MessageHeaderAccessor(message); MessageHeaders actual = accessor.getMessageHeaders(); assertEquals(3, actual.size()); assertEquals("bar", actual.get("foo")); assertEquals("baz", actual.get("bar")); }
@Test public void toMessageWithPayloadAndMutableHeaders() { MessageHeaderAccessor accessor = new MessageHeaderAccessor(); accessor.setHeader("foo", "bar"); accessor.setLeaveMutable(true); MessageHeaders headers = accessor.getMessageHeaders(); Message<?> message = this.converter.toMessage("payload", headers); assertEquals("payload", message.getPayload()); assertSame(headers, message.getHeaders()); assertEquals("bar", message.getHeaders().get("foo")); } }
@Test public void testBuildMessageWithoutIdAndTimestamp() { MessageHeaderAccessor headerAccessor = new MessageHeaderAccessor(); headerAccessor.setIdGenerator(new IdGenerator() { @Override public UUID generateId() { return MessageHeaders.ID_VALUE_NONE; } }); Message<?> message = MessageBuilder.createMessage("foo", headerAccessor.getMessageHeaders()); assertNull(message.getHeaders().getId()); assertNull(message.getHeaders().getTimestamp()); }
@Test public void removeHeaders() { Map<String, Object> map = new HashMap<>(); map.put("foo", "bar"); map.put("bar", "baz"); GenericMessage<String> message = new GenericMessage<>("payload", map); MessageHeaderAccessor accessor = new MessageHeaderAccessor(message); accessor.removeHeaders("fo*"); MessageHeaders actual = accessor.getMessageHeaders(); assertEquals(2, actual.size()); assertNull(actual.get("foo")); assertEquals("baz", actual.get("bar")); }
@Test public void getAccessor() { MessageHeaderAccessor expected = new MessageHeaderAccessor(); Message<?> message = MessageBuilder.createMessage("payload", expected.getMessageHeaders()); assertSame(expected, MessageHeaderAccessor.getAccessor(message, MessageHeaderAccessor.class)); }
@Test public void convertAndSendWithSimpMessageHeaders() { MessageHeaderAccessor accessor = new MessageHeaderAccessor(); accessor.setHeader("key", "value"); accessor.setLeaveMutable(true); MessageHeaders headers = accessor.getMessageHeaders(); this.template.convertAndSend("channel", "data", headers); List<Message<byte[]>> messages = this.messageChannel.getMessages(); Message<byte[]> message = messages.get(0); assertSame(headers, message.getHeaders()); assertFalse(accessor.isMutable()); }
@Test public void timestampEnabled() { MessageHeaderAccessor accessor = new MessageHeaderAccessor(); accessor.setEnableTimestamp(true); assertNotNull(accessor.getMessageHeaders().getTimestamp()); }
@Test public void copyHeadersFromNullMap() { MessageHeaderAccessor headers = new MessageHeaderAccessor(); headers.copyHeaders(null); headers.copyHeadersIfAbsent(null); assertEquals(1, headers.getMessageHeaders().size()); assertEquals(Collections.singleton("id"), headers.getMessageHeaders().keySet()); }
@Test public void testBuildMessageWithDefaultMutability() { MessageHeaderAccessor accessor = new MessageHeaderAccessor(); MessageHeaders headers = accessor.getMessageHeaders(); Message<?> message = MessageBuilder.createMessage("foo", headers); this.thrown.expect(IllegalStateException.class); this.thrown.expectMessage("Already immutable"); accessor.setHeader("foo", "bar"); assertSame(accessor, MessageHeaderAccessor.getAccessor(message, MessageHeaderAccessor.class)); }
@Test public void testBuildMessageWithMutableHeaders() { MessageHeaderAccessor accessor = new MessageHeaderAccessor(); accessor.setLeaveMutable(true); MessageHeaders headers = accessor.getMessageHeaders(); Message<?> message = MessageBuilder.createMessage("payload", headers); accessor.setHeader("foo", "bar"); assertEquals("bar", headers.get("foo")); assertSame(accessor, MessageHeaderAccessor.getAccessor(message, MessageHeaderAccessor.class)); }
@Test public void leaveMutable() { MessageHeaderAccessor accessor = new MessageHeaderAccessor(); accessor.setHeader("foo", "bar"); accessor.setLeaveMutable(true); MessageHeaders headers = accessor.getMessageHeaders(); Message<?> message = MessageBuilder.createMessage("payload", headers); accessor.setHeader("foo", "baz"); assertEquals("baz", headers.get("foo")); assertSame(accessor, MessageHeaderAccessor.getAccessor(message, MessageHeaderAccessor.class)); }