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

Reply via email to