INT-1919 added Pattern matching support to header-filter
This commit is contained in:
@@ -32,6 +32,7 @@ import org.springframework.integration.MessageHeaders;
|
||||
import org.springframework.integration.message.ErrorMessage;
|
||||
import org.springframework.integration.message.GenericMessage;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.PatternMatchUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
@@ -117,12 +118,31 @@ public final class MessageBuilder<T> {
|
||||
* Remove the value for the given header name.
|
||||
*/
|
||||
public MessageBuilder<T> removeHeader(String headerName) {
|
||||
if (StringUtils.hasLength(headerName)){
|
||||
if (headerName.contains("*")){
|
||||
List<String> headersToRemove = new ArrayList<String>();
|
||||
for (String hdrName : this.headers.keySet()) {
|
||||
if (PatternMatchUtils.simpleMatch(headerName, hdrName)){
|
||||
headersToRemove.add(hdrName);
|
||||
}
|
||||
}
|
||||
for (String headerToRemove : headersToRemove) {
|
||||
this.doRemoveHeader(headerToRemove);
|
||||
}
|
||||
}
|
||||
else {
|
||||
this.doRemoveHeader(headerName);
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
private void doRemoveHeader(String headerName){
|
||||
if (StringUtils.hasLength(headerName) && !headerName.equals(MessageHeaders.ID)
|
||||
&& !headerName.equals(MessageHeaders.TIMESTAMP)) {
|
||||
this.modified = true;
|
||||
this.headers.remove(headerName);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -7,6 +7,12 @@
|
||||
http://www.springframework.org/schema/integration
|
||||
http://www.springframework.org/schema/integration/spring-integration.xsd">
|
||||
|
||||
<header-filter input-channel="input" header-names="a,d, c"/>
|
||||
<header-filter input-channel="inputA" header-names="a,d, c"/>
|
||||
|
||||
|
||||
<header-filter input-channel="inputB" header-names="*"/>
|
||||
|
||||
|
||||
<header-filter input-channel="inputC" header-names="ba*, *oo"/>
|
||||
|
||||
</beans:beans>
|
||||
|
||||
@@ -40,7 +40,13 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
public class HeaderFilterParserTests {
|
||||
|
||||
@Autowired
|
||||
private MessageChannel input;
|
||||
private MessageChannel inputA;
|
||||
|
||||
@Autowired
|
||||
private MessageChannel inputB;
|
||||
|
||||
@Autowired
|
||||
private MessageChannel inputC;
|
||||
|
||||
@Test
|
||||
public void verifyHeadersRemoved() {
|
||||
@@ -53,7 +59,7 @@ public class HeaderFilterParserTests {
|
||||
.setHeader("d", 4)
|
||||
.setHeader("e", 5)
|
||||
.build();
|
||||
input.send(message);
|
||||
inputA.send(message);
|
||||
Message<?> result = replyChannel.receive(0);
|
||||
assertNotNull(result);
|
||||
assertEquals("test", result.getPayload());
|
||||
@@ -63,5 +69,49 @@ public class HeaderFilterParserTests {
|
||||
assertNotNull(result.getHeaders().get("b"));
|
||||
assertNotNull(result.getHeaders().get("e"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void verifyHeadersRemovedWithSingleWildcard() {
|
||||
QueueChannel replyChannel = new QueueChannel();
|
||||
Message<?> message = MessageBuilder.withPayload("test")
|
||||
.setReplyChannel(replyChannel)
|
||||
.setHeader("a", 1)
|
||||
.setHeader("b", 2)
|
||||
.setHeader("c", 3)
|
||||
.setHeader("d", 4)
|
||||
.setHeader("e", 5)
|
||||
.build();
|
||||
inputB.send(message);
|
||||
Message<?> result = replyChannel.receive(0);
|
||||
assertNotNull(result);
|
||||
assertEquals("test", result.getPayload());
|
||||
assertNull(result.getHeaders().get("a"));
|
||||
assertNull(result.getHeaders().get("c"));
|
||||
assertNull(result.getHeaders().get("d"));
|
||||
assertNull(result.getHeaders().get("b"));
|
||||
assertNull(result.getHeaders().get("e"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void verifyHeadersRemovedWithNamePatterns() {
|
||||
QueueChannel replyChannel = new QueueChannel();
|
||||
Message<?> message = MessageBuilder.withPayload("test")
|
||||
.setReplyChannel(replyChannel)
|
||||
.setHeader("bar", 1)
|
||||
.setHeader("baz", 2)
|
||||
.setHeader("foo", 3)
|
||||
.setHeader("goo", 4)
|
||||
.setHeader("e", 5)
|
||||
.build();
|
||||
inputC.send(message);
|
||||
Message<?> result = replyChannel.receive(0);
|
||||
assertNotNull(result);
|
||||
assertEquals("test", result.getPayload());
|
||||
assertNull(result.getHeaders().get("bar"));
|
||||
assertNull(result.getHeaders().get("baz"));
|
||||
assertNull(result.getHeaders().get("foo"));
|
||||
assertNull(result.getHeaders().get("goo"));
|
||||
assertNotNull(result.getHeaders().get("e"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user