diff --git a/spring-integration-core/src/main/java/org/springframework/integration/support/MessageBuilder.java b/spring-integration-core/src/main/java/org/springframework/integration/support/MessageBuilder.java index f007673152..3500723cef 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/support/MessageBuilder.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/support/MessageBuilder.java @@ -113,36 +113,44 @@ public final class MessageBuilder { } return this; } - + /** + * Removes all headers provided via array of 'headerPatterns'. As the name suggests the array + * may contain simple matching patterns for header names. Supported pattern styles are: + * "xxx*", "*xxx", "*xxx*" and "xxx*yyy". + * + * @param headerPatterns + */ + public MessageBuilder removeHeaders(String... headerPatterns) { + List headersToRemove = new ArrayList(); + for (String pattern : headerPatterns) { + if (StringUtils.hasLength(pattern)){ + if (pattern.contains("*")){ + for (String headerName : this.headers.keySet()) { + if (PatternMatchUtils.simpleMatch(pattern, headerName)){ + headersToRemove.add(headerName); + } + } + } + else { + headersToRemove.add(pattern); + } + } + } + for (String headerToRemove : headersToRemove) { + this.removeHeader(headerToRemove); + } + return this; + } /** * Remove the value for the given header name. */ public MessageBuilder removeHeader(String headerName) { - if (StringUtils.hasLength(headerName)){ - if (headerName.contains("*")){ - List headersToRemove = new ArrayList(); - 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; } /** diff --git a/spring-integration-core/src/main/java/org/springframework/integration/transformer/HeaderFilter.java b/spring-integration-core/src/main/java/org/springframework/integration/transformer/HeaderFilter.java index b5236c315a..a34e6991b6 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/transformer/HeaderFilter.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/transformer/HeaderFilter.java @@ -24,6 +24,7 @@ import org.springframework.util.Assert; * Transformer that removes Message headers. * * @author Mark Fisher + * @author Oleg Zhurakousky * @since 2.0 */ public class HeaderFilter implements Transformer { @@ -38,10 +39,8 @@ public class HeaderFilter implements Transformer { public Message transform(Message message) { - MessageBuilder builder = MessageBuilder.fromMessage(message); - for (String headerName : headersToRemove) { - builder.removeHeader(headerName); - } + MessageBuilder builder = MessageBuilder.fromMessage(message); + builder.removeHeaders(headersToRemove); return builder.build(); }