Fix REPLY_CHANNEL header check in MessageHeaderAccessor
Prior to this commit, the verifyType() method in MessageHeaderAccessor checked if REPLY_CHANNEL ended with the given header name which does not make much sense and is inconsistent with the ERROR_CHANNEL check. This commit therefore checks if the REPLY_CHANNEL is equal to the given header name, analogous to the ERROR_CHANNEL check. See gh-34881 Closes gh-34949 Signed-off-by: Mengqi Xu <2663479778@qq.com>
This commit is contained in:
parent
aea66265f7
commit
bbf61c74ab
|
|
@ -332,7 +332,7 @@ public class MessageHeaderAccessor {
|
|||
protected void verifyType(@Nullable String headerName, @Nullable Object headerValue) {
|
||||
if (headerName != null && headerValue != null) {
|
||||
if (MessageHeaders.ERROR_CHANNEL.equals(headerName) ||
|
||||
MessageHeaders.REPLY_CHANNEL.endsWith(headerName)) {
|
||||
MessageHeaders.REPLY_CHANNEL.equals(headerName)) {
|
||||
if (!(headerValue instanceof MessageChannel || headerValue instanceof String)) {
|
||||
throw new IllegalArgumentException(
|
||||
"'" + headerName + "' header value must be a MessageChannel or String");
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
|
|||
/**
|
||||
* @author Mark Fisher
|
||||
* @author Rossen Stoyanchev
|
||||
* @author Mengqi Xu
|
||||
*/
|
||||
class MessageBuilderTests {
|
||||
|
||||
|
|
@ -238,4 +239,21 @@ class MessageBuilderTests {
|
|||
assertThat(message3.getHeaders().get("foo")).isEqualTo("bar3");
|
||||
}
|
||||
|
||||
@Test
|
||||
void buildReplyChannelHeaderMessage() {
|
||||
MessageHeaderAccessor headerAccessor = new MessageHeaderAccessor();
|
||||
MessageBuilder<?> messageBuilder = MessageBuilder.withPayload("payload").setHeaders(headerAccessor);
|
||||
|
||||
headerAccessor.setHeader("replyChannel", "foo");
|
||||
Message<?> message1 = messageBuilder.build();
|
||||
|
||||
headerAccessor.setHeader("hannel", 0);
|
||||
Message<?> message2 = messageBuilder.build();
|
||||
|
||||
assertThat(message1.getHeaders().get("replyChannel")).isEqualTo("foo");
|
||||
assertThat(message2.getHeaders().get("hannel")).isEqualTo(0);
|
||||
|
||||
assertThatIllegalArgumentException().isThrownBy(() -> headerAccessor.setHeader("replyChannel", 0));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue