From 5d19f380a912866e2f07c6069fd985b56c5aac92 Mon Sep 17 00:00:00 2001 From: Artem Bilan Date: Tue, 26 Jul 2016 11:52:43 -0400 Subject: [PATCH] INT-4078: Don't copy headers in the `Resequencer` JIRA: https://jira.spring.io/browse/INT-4078 Even if it doesn't hurt to `copyHeadersIfAbsent()`, when it just adds a new headers and doesn't override existing like sequence details, it doesn't sound reasonable for `Resequencer` to modify the message before and after its resequence logic. * Change `shouldCopyRequestHeaders()` to `false` for `ResequencingMessageHandler` --- .../ResequencingMessageHandler.java | 4 ++++ .../ResequencerIntegrationTests.java | 24 +++++++++++++++---- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/spring-integration-core/src/main/java/org/springframework/integration/aggregator/ResequencingMessageHandler.java b/spring-integration-core/src/main/java/org/springframework/integration/aggregator/ResequencingMessageHandler.java index 29b2356f39..212042d7b1 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/aggregator/ResequencingMessageHandler.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/aggregator/ResequencingMessageHandler.java @@ -65,6 +65,10 @@ public class ResequencingMessageHandler extends AbstractCorrelatingMessageHandle super.setExpireGroupsUponTimeout(expireGroupsUponTimeout); } + @Override + protected boolean shouldCopyRequestHeaders() { + return false; + } @Override protected void afterRelease(MessageGroup messageGroup, Collection> completedMessages) { diff --git a/spring-integration-core/src/test/java/org/springframework/integration/aggregator/integration/ResequencerIntegrationTests.java b/spring-integration-core/src/test/java/org/springframework/integration/aggregator/integration/ResequencerIntegrationTests.java index 1318073b03..e20455a838 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/aggregator/integration/ResequencerIntegrationTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/aggregator/integration/ResequencerIntegrationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,8 +17,10 @@ package org.springframework.integration.aggregator.integration; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; import org.junit.Test; import org.junit.runner.RunWith; @@ -41,6 +43,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /** * @author Oleg Zhurakousky * @author David Liu + * @author Artem Bilan */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration @@ -59,9 +62,17 @@ public class ResequencerIntegrationTests { MessageGroupStore store = TestUtils.getPropertyValue(handler, "messageStore", MessageGroupStore.class); Message message1 = MessageBuilder.withPayload("1").setCorrelationId("A").setSequenceNumber(1).build(); - Message message2 = MessageBuilder.withPayload("2").setCorrelationId("A").setSequenceNumber(2).build(); + Message message2 = MessageBuilder.withPayload("2").setCorrelationId("A").setSequenceNumber(2) + .setCorrelationId("A") + .setSequenceNumber(2) + .setHeader("foo", "foo") + .build(); Message message3 = MessageBuilder.withPayload("3").setCorrelationId("A").setSequenceNumber(3).build(); - Message message4 = MessageBuilder.withPayload("4").setCorrelationId("A").setSequenceNumber(4).build(); + Message message4 = MessageBuilder.withPayload("4") + .setCorrelationId("A") + .setSequenceNumber(4) + .setHeader("foo", "foo") + .build(); Message message5 = MessageBuilder.withPayload("5").setCorrelationId("A").setSequenceNumber(5).build(); Message message6 = MessageBuilder.withPayload("6").setCorrelationId("A").setSequenceNumber(6).build(); @@ -72,6 +83,7 @@ public class ResequencerIntegrationTests { message1 = outputChannel.receive(0); assertNotNull(message1); assertEquals((Integer) 1, new IntegrationMessageHeaderAccessor(message1).getSequenceNumber()); + assertFalse(message1.getHeaders().containsKey("foo")); inputChannel.send(message2); message2 = outputChannel.receive(0); @@ -79,7 +91,9 @@ public class ResequencerIntegrationTests { assertNotNull(message2); assertNotNull(message3); assertEquals((Integer) 2, new IntegrationMessageHeaderAccessor(message2).getSequenceNumber()); + assertTrue(message2.getHeaders().containsKey("foo")); assertEquals((Integer) 3, new IntegrationMessageHeaderAccessor(message3).getSequenceNumber()); + assertFalse(message3.getHeaders().containsKey("foo")); inputChannel.send(message5); assertNull(outputChannel.receive(0)); @@ -95,9 +109,11 @@ public class ResequencerIntegrationTests { assertNotNull(message5); assertNotNull(message6); assertEquals((Integer) 4, new IntegrationMessageHeaderAccessor(message4).getSequenceNumber()); + assertTrue(message4.getHeaders().containsKey("foo")); assertEquals((Integer) 5, new IntegrationMessageHeaderAccessor(message5).getSequenceNumber()); + assertFalse(message5.getHeaders().containsKey("foo")); assertEquals((Integer) 6, new IntegrationMessageHeaderAccessor(message6).getSequenceNumber()); - + assertFalse(message6.getHeaders().containsKey("foo")); assertEquals(0, store.getMessageGroup("A").getMessages().size()); }