Add MessageHeaderAccessor to be created with existing headers
This commit mirrors toMap/toMessageHeaders with from factory methods that allow to create an instance without having to create an intermediate message if all they have is the headers. Closes gh-33153
This commit is contained in:
parent
d89cb34c29
commit
078dfd47dc
|
|
@ -123,12 +123,16 @@ public class MessageHeaderAccessor {
|
|||
@Nullable
|
||||
private IdGenerator idGenerator;
|
||||
|
||||
private MessageHeaderAccessor(@Nullable MessageHeaders headers) {
|
||||
this.headers = new MutableMessageHeaders(headers);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* A constructor to create new headers.
|
||||
*/
|
||||
public MessageHeaderAccessor() {
|
||||
this(null);
|
||||
this((MessageHeaders) null);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -136,7 +140,26 @@ public class MessageHeaderAccessor {
|
|||
* @param message a message to copy the headers from, or {@code null} if none
|
||||
*/
|
||||
public MessageHeaderAccessor(@Nullable Message<?> message) {
|
||||
this.headers = new MutableMessageHeaders(message != null ? message.getHeaders() : null);
|
||||
this(message != null ? message.getHeaders() : null);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Create an instance from a plain {@link Map}.
|
||||
* @param map the raw headers
|
||||
* @since 6.2
|
||||
*/
|
||||
public static MessageHeaderAccessor fromMap(@Nullable Map<String, Object> map) {
|
||||
return fromMessageHeaders(new MessageHeaders(map));
|
||||
}
|
||||
|
||||
/**
|
||||
* Create an instance from an existing {@link MessageHeaders} instance.
|
||||
* @param headers the headers
|
||||
* @since 6.2
|
||||
*/
|
||||
public static MessageHeaderAccessor fromMessageHeaders(@Nullable MessageHeaders headers) {
|
||||
return new MessageHeaderAccessor(headers);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -47,6 +47,30 @@ class MessageHeaderAccessorTests {
|
|||
assertThat(accessor.toMap()).isEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
void fromEmptyMap() {
|
||||
MessageHeaderAccessor accessor = MessageHeaderAccessor.fromMap(Collections.emptyMap());
|
||||
assertThat(accessor.toMap()).isEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
void fromNullMap() {
|
||||
MessageHeaderAccessor accessor = MessageHeaderAccessor.fromMap(null);
|
||||
assertThat(accessor.toMap()).isEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
void fromEmptyMessageHeaders() {
|
||||
MessageHeaderAccessor accessor = MessageHeaderAccessor.fromMessageHeaders(new MessageHeaders(Collections.emptyMap()));
|
||||
assertThat(accessor.toMap()).isEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
void fromNullMessageHeaders() {
|
||||
MessageHeaderAccessor accessor = MessageHeaderAccessor.fromMessageHeaders(null);
|
||||
assertThat(accessor.toMap()).isEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
void existingHeaders() {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
|
|
@ -62,6 +86,32 @@ class MessageHeaderAccessorTests {
|
|||
assertThat(actual.get("bar")).isEqualTo("baz");
|
||||
}
|
||||
|
||||
@Test
|
||||
void fromMapWithExistingHeaders() {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("foo", "bar");
|
||||
map.put("bar", "baz");
|
||||
MessageHeaderAccessor accessor = MessageHeaderAccessor.fromMap(map);
|
||||
MessageHeaders actual = accessor.getMessageHeaders();
|
||||
|
||||
assertThat(actual).hasSize(3);
|
||||
assertThat(actual.get("foo")).isEqualTo("bar");
|
||||
assertThat(actual.get("bar")).isEqualTo("baz");
|
||||
}
|
||||
|
||||
@Test
|
||||
void fromMessageHeaderWithExistingHeaders() {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("foo", "bar");
|
||||
map.put("bar", "baz");
|
||||
MessageHeaderAccessor accessor = MessageHeaderAccessor.fromMessageHeaders(new MessageHeaders(map));
|
||||
MessageHeaders actual = accessor.getMessageHeaders();
|
||||
|
||||
assertThat(actual).hasSize(3);
|
||||
assertThat(actual.get("foo")).isEqualTo("bar");
|
||||
assertThat(actual.get("bar")).isEqualTo("baz");
|
||||
}
|
||||
|
||||
@Test
|
||||
void existingHeadersModification() throws InterruptedException {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
|
|
|
|||
Loading…
Reference in New Issue