Filter existing restlet headers when building restlet request
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/f80365cd Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/f80365cd Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/f80365cd Branch: refs/heads/master Commit: f80365cde8f8ab2595095817e8146f8942c64b97 Parents: 3706bf1 Author: John Moon <john.m...@transamerica.com> Authored: Mon Jul 18 10:00:03 2016 -0400 Committer: Claus Ibsen <davscl...@apache.org> Committed: Mon Jul 25 17:11:57 2016 +0200 ---------------------------------------------------------------------- .../component/restlet/DefaultRestletBinding.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/f80365cd/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/DefaultRestletBinding.java ---------------------------------------------------------------------- diff --git a/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/DefaultRestletBinding.java b/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/DefaultRestletBinding.java index 482a97a..31eb55e 100644 --- a/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/DefaultRestletBinding.java +++ b/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/DefaultRestletBinding.java @@ -195,11 +195,24 @@ public class DefaultRestletBinding implements RestletBinding, HeaderFilterStrate } } - //Get outgoing custom http headers - Series<Header> restletHeaders = (Series)request.getAttributes().get(HeaderConstants.ATTRIBUTE_HEADERS); + //Get outgoing custom http headers from the exchange if they exists + Series<Header> restletHeaders = exchange.getIn().getHeader(HeaderConstants.ATTRIBUTE_HEADERS,Series.class); if (restletHeaders == null) { restletHeaders = new Series<>(Header.class); request.getAttributes().put(HeaderConstants.ATTRIBUTE_HEADERS, restletHeaders); + } else { + + //If the restlet headers already exists on the exchange, we need to filter them + for(String name : restletHeaders.getNames()){ + if(headerFilterStrategy.applyFilterToCamelHeaders(name, restletHeaders.getValues(name), exchange)) { + restletHeaders.removeAll(name); + } + } + request.getAttributes().put(HeaderConstants.ATTRIBUTE_HEADERS, restletHeaders); + + //Since the restlet headers already exists remove them from the exchange so they don't get added again below + //We will get a new set of restlet headers on the response + exchange.getIn().removeHeader(HeaderConstants.ATTRIBUTE_HEADERS); } // login and password are filtered by header filter strategy