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/2b9a2141 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/2b9a2141 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/2b9a2141 Branch: refs/heads/camel-2.17.x Commit: 2b9a2141e62f3d5fa25babc6828265d6da6a7914 Parents: 052807a Author: John Moon <john.m...@transamerica.com> Authored: Mon Jul 18 10:00:03 2016 -0400 Committer: Claus Ibsen <davscl...@apache.org> Committed: Tue Jul 26 13:03:42 2016 +0200 ---------------------------------------------------------------------- .../component/restlet/DefaultRestletBinding.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/2b9a2141/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