From e694cc16c72a5304e031ff144de340ebb72b93df Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Mon, 1 Jul 2013 12:00:35 +0100 Subject: [PATCH] Consider original headers in pattern-based removal When headers are being removed based on pattern matching, both the new header names and the original header names need to be matched against the pattern. Previously, only new headers were being considered resulting in any matching original headers not being removed. --- .../support/MessageHeaderAccessor.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/spring-context/src/main/java/org/springframework/messaging/support/MessageHeaderAccessor.java b/spring-context/src/main/java/org/springframework/messaging/support/MessageHeaderAccessor.java index 796abf8e1b..fcc8221927 100644 --- a/spring-context/src/main/java/org/springframework/messaging/support/MessageHeaderAccessor.java +++ b/spring-context/src/main/java/org/springframework/messaging/support/MessageHeaderAccessor.java @@ -142,11 +142,8 @@ public class MessageHeaderAccessor { 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); - } - } + headersToRemove.addAll(getMatchingHeaderNames(pattern, this.headers)); + headersToRemove.addAll(getMatchingHeaderNames(pattern, this.originalHeaders)); } else { headersToRemove.add(pattern); @@ -158,6 +155,18 @@ public class MessageHeaderAccessor { } } + private List getMatchingHeaderNames(String pattern, Map headers) { + List matchingHeaderNames = new ArrayList(); + if (headers != null) { + for (Map.Entry header: headers.entrySet()) { + if (PatternMatchUtils.simpleMatch(pattern, header.getKey())) { + matchingHeaderNames.add(header.getKey()); + } + } + } + return matchingHeaderNames; + } + /** * Remove the value for the given header name. */