From ddf875051187e5b57e625b37988596ec1b92cf9f Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Fri, 4 Apr 2014 15:49:53 -0400 Subject: [PATCH] Update MessageHeaders constructor Following discussion with Gary. Issue: SPR-11468 --- .../messaging/MessageHeaders.java | 33 +++++++++++++------ .../messaging/MessageHeadersTests.java | 4 +-- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/spring-messaging/src/main/java/org/springframework/messaging/MessageHeaders.java b/spring-messaging/src/main/java/org/springframework/messaging/MessageHeaders.java index 02a73c18ff7..8ea1f695116 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/MessageHeaders.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/MessageHeaders.java @@ -34,6 +34,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.util.AlternativeJdkIdGenerator; +import org.springframework.util.Assert; import org.springframework.util.IdGenerator; /** @@ -96,24 +97,36 @@ public class MessageHeaders implements Map, Serializable { private final Map headers; - /** - * Constructs a minimal {@link MessageHeaders} with zero headers. - */ - protected MessageHeaders() { - this.headers = new HashMap(); - } /** * Consructs a {@link MessageHeaders} from the headers map; adding (or * overwriting) the {@link #ID} and {@link #TIMESTAMP} headers. - * @param headers The map. + * @param headers a map with headers to add */ public MessageHeaders(Map headers) { - this.headers = (headers != null) ? new HashMap(headers) : new HashMap(); - this.headers.put(ID, ((idGenerator != null) ? idGenerator : defaultIdGenerator).generateId()); - this.headers.put(TIMESTAMP, System.currentTimeMillis()); + this(headers, ((idGenerator != null) ? idGenerator : defaultIdGenerator).generateId(), + System.currentTimeMillis()); } + /** + * Constructor allowing a sub-class to access the (mutable) header map as well + * to provide the ID and TIMESTAMP header values. + * + * @param headers a map with headers to add + * @param id the value for the {@link #ID} header, never {@code null} + * @param timestamp the value for the {@link #TIMESTAMP} header, + * or {@code null} meaning no timestamp header + */ + protected MessageHeaders(Map headers, UUID id, Long timestamp) { + Assert.notNull(id, "'id' is required"); + this.headers = (headers != null) ? new HashMap(headers) : new HashMap(); + this.headers.put(ID, id); + if (timestamp != null) { + this.headers.put(TIMESTAMP, timestamp); + } + } + + protected Map getRawHeaders() { return this.headers; } diff --git a/spring-messaging/src/test/java/org/springframework/messaging/MessageHeadersTests.java b/spring-messaging/src/test/java/org/springframework/messaging/MessageHeadersTests.java index 0c88c39f143..afc35ec452e 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/MessageHeadersTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/MessageHeadersTests.java @@ -142,13 +142,13 @@ public class MessageHeadersTests { } @Test - public void subclass() { + public void subClassWithCustomIdAndNoTimestamp() { final AtomicLong id = new AtomicLong(); @SuppressWarnings("serial") class MyMH extends MessageHeaders { public MyMH() { - this.getRawHeaders().put(ID, new UUID(0, id.incrementAndGet())); + super(null, new UUID(0, id.incrementAndGet()), null); } }