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