INT-1972 MessageBuilder is now more diligent in determining the 'modified' flag value, and as a result it will return the originalMessage from a build() call any time that there have been no additions/removals/modifications to the payload or headers.
This commit is contained in:
@@ -60,6 +60,7 @@ public final class MessageBuilder<T> {
|
||||
this.originalMessage = originalMessage;
|
||||
if (originalMessage != null) {
|
||||
this.copyHeaders(originalMessage.getHeaders());
|
||||
this.modified = (!this.payload.equals(originalMessage.getPayload()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,12 +94,17 @@ public final class MessageBuilder<T> {
|
||||
if (StringUtils.hasLength(headerName) && !headerName.equals(MessageHeaders.ID)
|
||||
&& !headerName.equals(MessageHeaders.TIMESTAMP)) {
|
||||
this.verifyType(headerName, headerValue);
|
||||
this.modified = true;
|
||||
if (headerValue == null) {
|
||||
this.headers.remove(headerName);
|
||||
Object removedValue = this.headers.remove(headerName);
|
||||
if (removedValue != null) {
|
||||
this.modified = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
this.headers.put(headerName, headerValue);
|
||||
Object replacedValue = this.headers.put(headerName, headerValue);
|
||||
if (!headerValue.equals(replacedValue)) {
|
||||
this.modified = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return this;
|
||||
@@ -113,6 +119,7 @@ public final class MessageBuilder<T> {
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes all headers provided via array of 'headerPatterns'. As the name suggests the array
|
||||
* may contain simple matching patterns for header names. Supported pattern styles are:
|
||||
@@ -147,8 +154,10 @@ public final class MessageBuilder<T> {
|
||||
public MessageBuilder<T> removeHeader(String headerName) {
|
||||
if (StringUtils.hasLength(headerName) && !headerName.equals(MessageHeaders.ID)
|
||||
&& !headerName.equals(MessageHeaders.TIMESTAMP)) {
|
||||
this.modified = true;
|
||||
this.headers.remove(headerName);
|
||||
Object removedValue = this.headers.remove(headerName);
|
||||
if (removedValue != null) {
|
||||
this.modified = true;
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -22,6 +22,8 @@ import static org.junit.Assert.assertNotSame;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.junit.Test;
|
||||
@@ -106,7 +108,7 @@ public class MessageBuilderTests {
|
||||
public void createIdRegenerated() {
|
||||
Message<String> message1 = MessageBuilder.withPayload("test")
|
||||
.setHeader("foo", "bar").build();
|
||||
Message<String> message2 = MessageBuilder.fromMessage(message1).build();
|
||||
Message<String> message2 = MessageBuilder.fromMessage(message1).setHeader("another", 1).build();
|
||||
assertEquals("bar", message2.getHeaders().get("foo"));
|
||||
assertNotSame(message1.getHeaders().getId(), message2.getHeaders().getId());
|
||||
}
|
||||
@@ -202,4 +204,40 @@ public class MessageBuilderTests {
|
||||
assertFalse(message3.getHeaders().containsKey(MessageHeaders.SEQUENCE_DETAILS));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNotModifiedSameMessage() throws Exception {
|
||||
Message<?> original = MessageBuilder.withPayload("foo").build();
|
||||
Message<?> result = MessageBuilder.fromMessage(original).build();
|
||||
assertEquals(original, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testContainsHeaderNotModifiedSameMessage() throws Exception {
|
||||
Message<?> original = MessageBuilder.withPayload("foo").setHeader("bar", 42).build();
|
||||
Message<?> result = MessageBuilder.fromMessage(original).build();
|
||||
assertEquals(original, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSameHeaderValueAddedNotModifiedSameMessage() throws Exception {
|
||||
Message<?> original = MessageBuilder.withPayload("foo").setHeader("bar", 42).build();
|
||||
Message<?> result = MessageBuilder.fromMessage(original).setHeader("bar", 42).build();
|
||||
assertEquals(original, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCopySameHeaderValuesNotModifiedSameMessage() throws Exception {
|
||||
Date current = new Date();
|
||||
Map<String, Object> originalHeaders = new HashMap<String, Object>();
|
||||
originalHeaders.put("b", "xyz");
|
||||
originalHeaders.put("c", current);
|
||||
Message<?> original = MessageBuilder.withPayload("foo").setHeader("a", 123).copyHeaders(originalHeaders).build();
|
||||
Map<String, Object> newHeaders = new HashMap<String, Object>();
|
||||
newHeaders.put("a", 123);
|
||||
newHeaders.put("b", "xyz");
|
||||
newHeaders.put("c", current);
|
||||
Message<?> result = MessageBuilder.fromMessage(original).copyHeaders(newHeaders).build();
|
||||
assertEquals(original, result);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user