INT-1919 added Pattern matching support to header-filter

This commit is contained in:
Oleg Zhurakousky
2011-05-31 15:52:20 -04:00
parent 97db1da5b2
commit 8424fe24f1
3 changed files with 80 additions and 4 deletions

View File

@@ -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;
}
/**

View File

@@ -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>

View File

@@ -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"));
}
}