Add option for MutableMB to not generate headers

Since `MutableMessage` can be mutated, the `ID` and `TIMESTAMP` headers
can be added lately.
Or there might be some scenarios which don't care about those headers at
all.
Plus we get a performance gain when we skip their generation

Coerce the `null` cast to the proper target ctor
This commit is contained in:
Artem Bilan
2017-09-15 15:24:54 -04:00
committed by Gary Russell
parent 7eea071b4e
commit 008a740fb0
4 changed files with 78 additions and 24 deletions

View File

@@ -16,11 +16,15 @@
package org.springframework.integration.message;
import static org.hamcrest.Matchers.instanceOf;
import static org.hamcrest.Matchers.not;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.springframework.integration.test.matcher.HeaderMatcher.hasHeaderKey;
import java.util.Date;
import java.util.HashMap;
@@ -34,6 +38,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.integration.IntegrationMessageHeaderAccessor;
import org.springframework.integration.support.MessageBuilder;
import org.springframework.integration.support.MessageBuilderFactory;
import org.springframework.integration.support.MutableMessage;
import org.springframework.integration.support.MutableMessageBuilder;
import org.springframework.integration.support.MutableMessageBuilderFactory;
import org.springframework.messaging.Message;
@@ -77,7 +82,7 @@ public class MessageBuilderTests {
public void testHeaderValues() {
Message<String> message = MessageBuilder.withPayload("test")
.setHeader("foo", "bar")
.setHeader("count", new Integer(123))
.setHeader("count", 123)
.build();
assertEquals("bar", message.getHeaders().get("foo", String.class));
assertEquals(new Integer(123), message.getHeaders().get("count", Integer.class));
@@ -146,11 +151,11 @@ public class MessageBuilderTests {
@Test
public void mutate() {
assertTrue(messageBuilderFactory instanceof MutableMessageBuilderFactory);
in.send(new GenericMessage<String>("foo"));
assertTrue(this.messageBuilderFactory instanceof MutableMessageBuilderFactory);
in.send(new GenericMessage<>("foo"));
Message<?> m1 = out.receive(0);
Message<?> m2 = out.receive(0);
assertEquals("org.springframework.integration.support.MutableMessage", m1.getClass().getName());
assertThat(m1, instanceOf(MutableMessage.class));
assertTrue(m1 == m2);
}
@@ -190,7 +195,7 @@ public class MessageBuilderTests {
@Test
public void testPriority() {
Message<Integer> importantMessage = MessageBuilder.withPayload(1)
.setPriority(123).build();
.setPriority(123).build();
assertEquals(new Integer(123), new IntegrationMessageHeaderAccessor(importantMessage).getPriority());
}
@@ -199,8 +204,8 @@ public class MessageBuilderTests {
Message<Integer> message1 = MessageBuilder.withPayload(1)
.setPriority(42).build();
Message<Integer> message2 = MessageBuilder.fromMessage(message1)
.setHeaderIfAbsent(IntegrationMessageHeaderAccessor.PRIORITY, 13)
.build();
.setHeaderIfAbsent(IntegrationMessageHeaderAccessor.PRIORITY, 13)
.build();
assertEquals(new Integer(42), new IntegrationMessageHeaderAccessor(message2).getPriority());
}
@@ -358,7 +363,23 @@ public class MessageBuilderTests {
.setHeader(IntegrationMessageHeaderAccessor.SEQUENCE_NUMBER, Long.MAX_VALUE)
.build();
@SuppressWarnings("unused")
Integer sequenceNumber = new IntegrationMessageHeaderAccessor(message).getSequenceNumber();
}
@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)));
}
}