提交 ddf87505 编写于 作者: R Rossen Stoyanchev

Update MessageHeaders constructor

Following discussion with Gary.

Issue: SPR-11468
上级 1eee339c
...@@ -34,6 +34,7 @@ import org.apache.commons.logging.Log; ...@@ -34,6 +34,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.springframework.util.AlternativeJdkIdGenerator; import org.springframework.util.AlternativeJdkIdGenerator;
import org.springframework.util.Assert;
import org.springframework.util.IdGenerator; import org.springframework.util.IdGenerator;
/** /**
...@@ -96,24 +97,36 @@ public class MessageHeaders implements Map<String, Object>, Serializable { ...@@ -96,24 +97,36 @@ public class MessageHeaders implements Map<String, Object>, Serializable {
private final Map<String, Object> headers; private final Map<String, Object> headers;
/**
* Constructs a minimal {@link MessageHeaders} with zero headers.
*/
protected MessageHeaders() {
this.headers = new HashMap<String, Object>();
}
/** /**
* Consructs a {@link MessageHeaders} from the headers map; adding (or * Consructs a {@link MessageHeaders} from the headers map; adding (or
* overwriting) the {@link #ID} and {@link #TIMESTAMP} headers. * overwriting) the {@link #ID} and {@link #TIMESTAMP} headers.
* @param headers The map. * @param headers a map with headers to add
*/ */
public MessageHeaders(Map<String, Object> headers) { public MessageHeaders(Map<String, Object> headers) {
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<String, Object> headers, UUID id, Long timestamp) {
Assert.notNull(id, "'id' is required");
this.headers = (headers != null) ? new HashMap<String, Object>(headers) : new HashMap<String, Object>(); this.headers = (headers != null) ? new HashMap<String, Object>(headers) : new HashMap<String, Object>();
this.headers.put(ID, ((idGenerator != null) ? idGenerator : defaultIdGenerator).generateId()); this.headers.put(ID, id);
this.headers.put(TIMESTAMP, System.currentTimeMillis()); if (timestamp != null) {
this.headers.put(TIMESTAMP, timestamp);
}
} }
protected Map<String, Object> getRawHeaders() { protected Map<String, Object> getRawHeaders() {
return this.headers; return this.headers;
} }
......
...@@ -142,13 +142,13 @@ public class MessageHeadersTests { ...@@ -142,13 +142,13 @@ public class MessageHeadersTests {
} }
@Test @Test
public void subclass() { public void subClassWithCustomIdAndNoTimestamp() {
final AtomicLong id = new AtomicLong(); final AtomicLong id = new AtomicLong();
@SuppressWarnings("serial") @SuppressWarnings("serial")
class MyMH extends MessageHeaders { class MyMH extends MessageHeaders {
public MyMH() { public MyMH() {
this.getRawHeaders().put(ID, new UUID(0, id.incrementAndGet())); super(null, new UUID(0, id.incrementAndGet()), null);
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册