@Override public <T> MutableMessageBuilder<T> withPayload(T payload) { return MutableMessageBuilder.withPayload(payload); }
@Override public <T> MutableMessageBuilder<T> fromMessage(Message<T> message) { return MutableMessageBuilder.fromMessage(message); }
/** * Create a builder for a new {@link Message} instance pre-populated with all of the headers copied from the * provided message. The payload of the provided Message will also be used as the payload for the new message. * @param message the Message from which the payload and all headers will be copied * @param <T> The type of the payload. * @return A MutableMessageBuilder. */ public static <T> MutableMessageBuilder<T> fromMessage(Message<T> message) { Assert.notNull(message, "'message' must not be null"); return new MutableMessageBuilder<T>(message); }
@Override public AbstractIntegrationMessageBuilder<T> removeHeaders(String... headerPatterns) { List<String> headersToRemove = new ArrayList<String>(); for (String pattern : headerPatterns) { if (StringUtils.hasLength(pattern)) { if (pattern.contains("*")) { headersToRemove.addAll(getMatchingHeaderNames(pattern, this.headers)); } else { headersToRemove.add(pattern); } } } for (String headerToRemove : headersToRemove) { removeHeader(headerToRemove); } return this; }
@Override public MutableMessage<?> convert(Document source) { @SuppressWarnings("unchecked") Map<String, Object> headers = MongoDbMessageStore.this.converter.normalizeHeaders((Map<String, Object>) source.get("headers")); Object payload = MongoDbMessageStore.this.converter.extractPayload(source); return (MutableMessage<?>) MutableMessageBuilder.withPayload(payload) .copyHeaders(headers) .build(); }
@Test public void testPopSequenceDetailsWhenNotPoppedMutable() throws Exception { Message<Integer> message1 = MutableMessageBuilder.withPayload(1).build(); assertFalse(message1.getHeaders().containsKey(IntegrationMessageHeaderAccessor.SEQUENCE_DETAILS)); Message<Integer> message2 = MutableMessageBuilder.fromMessage(message1).popSequenceDetails().build(); assertFalse(message2.getHeaders().containsKey(IntegrationMessageHeaderAccessor.SEQUENCE_DETAILS)); }
@Test public void testIntegrationConverter() { this.numberChannel.send(new GenericMessage<Integer>(10)); this.numberChannel.send(new GenericMessage<Boolean>(true)); assertThat(this.testConverter.getInvoked(), Matchers.greaterThan(0)); assertTrue(this.bytesChannel.send(new GenericMessage<byte[]>("foo".getBytes()))); assertTrue(this.bytesChannel.send(new GenericMessage<>(MutableMessageBuilder.withPayload("").build()))); }
@Test public void testClaimCheck() { QueueChannel replyChannel = new QueueChannel(); Message<String> message = MutableMessageBuilder.withPayload("foo").setReplyChannel(replyChannel).build(); this.claimCheckInput.send(message); Message<?> receive = replyChannel.receive(10000); assertNotNull(receive); assertSame(message, receive); assertEquals(1, this.messageStore.getMessageCount()); assertSame(message, this.messageStore.getMessage(message.getHeaders().getId())); }
@Test public void mutable() { MutableMessageBuilder<String> builder = MutableMessageBuilder.withPayload("test"); Message<String> message1 = builder .setHeader("foo", "bar").build(); Message<String> message2 = MutableMessageBuilder.fromMessage(message1).setHeader("another", 1).build(); assertEquals("bar", message2.getHeaders().get("foo")); assertSame(message1.getHeaders().getId(), message2.getHeaders().getId()); assertTrue(message2 == message1); }
@Test public void testNoIdAndTimestampHeaders() { Message<String> message = MutableMessageBuilder.withPayload("foo", false) .pushSequenceDetails("bar", 1, 1) .build(); assertThat(message, hasHeaderKey(IntegrationMessageHeaderAccessor.CORRELATION_ID)); assertThat(message, hasHeaderKey(IntegrationMessageHeaderAccessor.SEQUENCE_NUMBER)); assertThat(message, hasHeaderKey(IntegrationMessageHeaderAccessor.SEQUENCE_SIZE)); assertThat(message, not(hasHeaderKey(IntegrationMessageHeaderAccessor.SEQUENCE_DETAILS))); assertThat(message, not(hasHeaderKey(MessageHeaders.ID))); assertThat(message, not(hasHeaderKey(MessageHeaders.TIMESTAMP))); }
headers1.put("k1", "foo"); headers1.put("k2", null); Message<?> message1 = MutableMessageBuilder.withPayload("test") .setCorrelationId(1) .setSequenceNumber(1) .setSequenceSize(2) headers2.put("k1", "bar"); headers2.put("k2", null); message2 = MutableMessageBuilder.withPayload("test") .setCorrelationId(1) .setSequenceNumber(2) .setSequenceSize(2)
Message<?> requestMessage = MutableMessageBuilder.fromMessage(message) .setReplyChannel(replyChan) .setHeader(this.messagingTemplate.getSendTimeoutHeader(), null) .setHeader(this.messagingTemplate.getReceiveTimeoutHeader(), null)
@Test public void mutableFromImmutable() { Message<String> message1 = MessageBuilder.withPayload("test") .setHeader("foo", "bar").build(); Message<String> message2 = MutableMessageBuilder.fromMessage(message1).setHeader("another", 1).build(); assertEquals("bar", message2.getHeaders().get("foo")); assertSame(message1.getHeaders().getId(), message2.getHeaders().getId()); assertNotSame(message1, message2); assertFalse(message2 == message1); }
@Test public void testPushAndPopSequenceDetailsWhenNoCorrelationIdMutable() throws Exception { Message<Integer> message1 = MutableMessageBuilder.withPayload(1).build(); assertFalse(message1.getHeaders().containsKey(IntegrationMessageHeaderAccessor.SEQUENCE_DETAILS)); Message<Integer> message2 = MutableMessageBuilder.fromMessage(message1).pushSequenceDetails("bar", 1, 1).build(); assertFalse(message2.getHeaders().containsKey(IntegrationMessageHeaderAccessor.SEQUENCE_DETAILS)); Message<Integer> message3 = MutableMessageBuilder.fromMessage(message2).popSequenceDetails().build(); assertFalse(message3.getHeaders().containsKey(IntegrationMessageHeaderAccessor.SEQUENCE_DETAILS)); }
@Test @MongoDbAvailable public void testMutableMessageAsPayload() throws Exception { MessageStore store = this.getMessageStore(); Person p = new Person(); p.setFname("John"); p.setLname("Doe"); Message<?> messageToStore = new GenericMessage<Message<?>>(MutableMessageBuilder.withPayload(p).build()); store.addMessage(messageToStore); Message<?> retrievedMessage = store.getMessage(messageToStore.getHeaders().getId()); assertNotNull(retrievedMessage); assertThat(retrievedMessage.getPayload(), instanceOf(MutableMessage.class)); assertEquals(messageToStore.getPayload(), retrievedMessage.getPayload()); assertEquals(messageToStore.getHeaders(), retrievedMessage.getHeaders()); assertEquals(((Message<?>) messageToStore.getPayload()).getPayload(), p); assertEquals(messageToStore, retrievedMessage); }
@Test public void testClaimCheck() { QueueChannel replyChannel = new QueueChannel(); Message<String> message = MutableMessageBuilder.withPayload("foo").setReplyChannel(replyChannel).build(); this.claimCheckInput.send(message); Message<?> receive = replyChannel.receive(2000); assertNotNull(receive); assertSame(message, receive); assertEquals(1, this.messageStore.getMessageCount()); assertSame(message, this.messageStore.getMessage(message.getHeaders().getId())); }
@Override public MutableMessage<?> convert(Document source) { @SuppressWarnings("unchecked") Map<String, Object> headers = MongoDbMessageStore.this.converter.normalizeHeaders((Map<String, Object>) source.get("headers")); Object payload = MongoDbMessageStore.this.converter.extractPayload(source); return (MutableMessage<?>) MutableMessageBuilder.withPayload(payload) .copyHeaders(headers) .build(); }
Message<?> requestMessage = MutableMessageBuilder.fromMessage(message) .setReplyChannel(replyChan) .setHeader(this.messagingTemplate.getSendTimeoutHeader(), null) .setHeader(this.messagingTemplate.getReceiveTimeoutHeader(), null)
@Override public AbstractIntegrationMessageBuilder<T> removeHeaders(String... headerPatterns) { List<String> headersToRemove = new ArrayList<String>(); for (String pattern : headerPatterns) { if (StringUtils.hasLength(pattern)) { if (pattern.contains("*")) { headersToRemove.addAll(getMatchingHeaderNames(pattern, this.headers)); } else { headersToRemove.add(pattern); } } } for (String headerToRemove : headersToRemove) { removeHeader(headerToRemove); } return this; }
@Test public void testPushAndPopSequenceDetailsMutable() throws Exception { Message<Integer> message1 = MutableMessageBuilder.withPayload(1).pushSequenceDetails("foo", 1, 2).build(); assertFalse(message1.getHeaders().containsKey(IntegrationMessageHeaderAccessor.SEQUENCE_DETAILS)); Message<Integer> message2 = MutableMessageBuilder.fromMessage(message1).pushSequenceDetails("bar", 1, 1).build(); assertTrue(message2.getHeaders().containsKey(IntegrationMessageHeaderAccessor.SEQUENCE_DETAILS)); Message<Integer> message3 = MutableMessageBuilder.fromMessage(message2).popSequenceDetails().build(); assertFalse(message3.getHeaders().containsKey(IntegrationMessageHeaderAccessor.SEQUENCE_DETAILS)); }