diff --git a/spring-integration-core/src/main/java/org/springframework/integration/handler/AbstractMessageProducingHandler.java b/spring-integration-core/src/main/java/org/springframework/integration/handler/AbstractMessageProducingHandler.java index 04e0fa26f30..e34b94f4918 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/handler/AbstractMessageProducingHandler.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/handler/AbstractMessageProducingHandler.java @@ -134,7 +134,7 @@ public void setNotPropagatedHeaders(String... headers) { private void updateNotPropagatedHeaders(String[] headers, boolean merge) { Set headerPatterns = new HashSet<>(); - if (merge) { + if (merge && this.notPropagatedHeaders != null) { headerPatterns.addAll(Arrays.asList(this.notPropagatedHeaders)); } @@ -153,7 +153,7 @@ private void updateNotPropagatedHeaders(String[] headers, boolean merge) { this.noHeadersPropagation = true; } - this.selectiveHeaderPropagation = this.notPropagatedHeaders.length > 0; + this.selectiveHeaderPropagation = !ObjectUtils.isEmpty(this.notPropagatedHeaders); } /** diff --git a/spring-integration-core/src/test/java/org/springframework/integration/handler/AbstractReplyProducingMessageHandlerTests.java b/spring-integration-core/src/test/java/org/springframework/integration/handler/AbstractReplyProducingMessageHandlerTests.java index 3c253c0346f..a268808d00b 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/handler/AbstractReplyProducingMessageHandlerTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/handler/AbstractReplyProducingMessageHandlerTests.java @@ -47,6 +47,7 @@ * @author Gary Russell * @author Marius Bogoevici * @author Artem Bilan + * @author Oleg Zhurakousky */ @RunWith(MockitoJUnitRunner.class) public class AbstractReplyProducingMessageHandlerTests { @@ -109,6 +110,34 @@ protected Object handleRequestMessage(Message requestMessage) { assertThat(out.getHeaders().get("baz"), equalTo("BAZ")); } + @Test + @SuppressWarnings("unchecked") + public void testNotPropagateAddWhenNonExist() { + AbstractReplyProducingMessageHandler handler = new AbstractReplyProducingMessageHandler() { + + @Override + protected Object handleRequestMessage(Message requestMessage) { + return new GenericMessage<>("world", Collections.singletonMap("bar", "RAB")); + } + + }; + handler.addNotPropagatedHeaders("boom"); + assertThat(handler.getNotPropagatedHeaders(), containsInAnyOrder("boom")); + handler.setOutputChannel(this.channel); + ArgumentCaptor> captor = ArgumentCaptor.forClass(Message.class); + willReturn(true).given(this.channel).send(captor.capture()); + handler.handleMessage(MessageBuilder.withPayload("hello") + .setHeader("boom", "FOO") + .setHeader("bar", "BAR") + .setHeader("baz", "BAZ") + .build()); + Message out = captor.getValue(); + assertThat(out, notNullValue()); + assertThat(out.getHeaders().get("boom"), nullValue()); + assertThat(out.getHeaders().get("bar"), equalTo("RAB")); + assertThat(out.getHeaders().get("baz"), equalTo("BAZ")); + } + @Test @SuppressWarnings("unchecked") public void testNotPropagateAdd() { @@ -116,7 +145,7 @@ public void testNotPropagateAdd() { @Override protected Object handleRequestMessage(Message requestMessage) { - return new GenericMessage("world", Collections.singletonMap("bar", "RAB")); + return new GenericMessage<>("world", Collections.singletonMap("bar", "RAB")); } }; @@ -125,14 +154,14 @@ protected Object handleRequestMessage(Message requestMessage) { handler.addNotPropagatedHeaders("b*r"); handler.setOutputChannel(this.channel); assertThat(handler.getNotPropagatedHeaders(), containsInAnyOrder("foo", "b*r")); - ArgumentCaptor> captor = - (ArgumentCaptor>) (ArgumentCaptor) ArgumentCaptor.forClass(Message.class); + ArgumentCaptor> captor = ArgumentCaptor.forClass(Message.class); willReturn(true).given(this.channel).send(captor.capture()); - handler.handleMessage(MessageBuilder.withPayload("hello") - .setHeader("foo", "FOO") - .setHeader("bar", "BAR") - .setHeader("baz", "BAZ") - .build()); + handler.handleMessage( + MessageBuilder.withPayload("hello") + .setHeader("foo", "FOO") + .setHeader("bar", "BAR") + .setHeader("baz", "BAZ") + .build()); Message out = captor.getValue(); assertThat(out, notNullValue()); assertThat(out.getHeaders().get("foo"), nullValue());