You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2014/04/08 14:46:37 UTC

git commit: CAMEL-7141 Avoiding the sideeffect of setHeaderFilterStrategy of camel-netty-http component with thanks to Joe

Repository: camel
Updated Branches:
  refs/heads/master cd8da7d36 -> 5a74dfca3


CAMEL-7141 Avoiding the sideeffect of setHeaderFilterStrategy of camel-netty-http component with thanks to Joe


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/5a74dfca
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/5a74dfca
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/5a74dfca

Branch: refs/heads/master
Commit: 5a74dfca350a2c87e3ba7b423b39deb7f125b6b3
Parents: cd8da7d
Author: Willem Jiang <wi...@gmail.com>
Authored: Tue Apr 8 20:45:01 2014 +0800
Committer: Willem Jiang <wi...@gmail.com>
Committed: Tue Apr 8 20:45:55 2014 +0800

----------------------------------------------------------------------
 .../netty/http/DefaultNettyHttpBinding.java     | 13 +++-
 .../netty/http/NettyHttpComponent.java          | 24 +++----
 .../component/netty/http/NettyHttpEndpoint.java |  4 +-
 ...dpointUriCustomHeaderFilterStrategyTest.java | 70 ++++++++++++++++++++
 4 files changed, 90 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/5a74dfca/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java
----------------------------------------------------------------------
diff --git a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java
index 40bb99e..00eda1e 100644
--- a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java
+++ b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java
@@ -32,6 +32,7 @@ import java.util.Map;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.NoTypeConversionAvailableException;
+import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.TypeConverter;
 import org.apache.camel.spi.HeaderFilterStrategy;
 import org.apache.camel.util.ExchangeHelper;
@@ -55,10 +56,10 @@ import org.slf4j.LoggerFactory;
 /**
  * Default {@link NettyHttpBinding}.
  */
-public class DefaultNettyHttpBinding implements NettyHttpBinding {
+public class DefaultNettyHttpBinding implements NettyHttpBinding, Cloneable {
 
     private static final Logger LOG = LoggerFactory.getLogger(DefaultNettyHttpBinding.class);
-    private HeaderFilterStrategy headerFilterStrategy;
+    private HeaderFilterStrategy headerFilterStrategy = new NettyHttpHeaderFilterStrategy();
 
     public DefaultNettyHttpBinding() {
     }
@@ -66,6 +67,14 @@ public class DefaultNettyHttpBinding implements NettyHttpBinding {
     public DefaultNettyHttpBinding(HeaderFilterStrategy headerFilterStrategy) {
         this.headerFilterStrategy = headerFilterStrategy;
     }
+    
+    public DefaultNettyHttpBinding copy() {
+        try {
+            return (DefaultNettyHttpBinding)this.clone();
+        } catch (CloneNotSupportedException e) {
+            throw new RuntimeCamelException(e);
+        }
+    }
 
     @Override
     public Message toCamelMessage(HttpRequest request, Exchange exchange, NettyHttpConfiguration configuration) throws Exception {

http://git-wip-us.apache.org/repos/asf/camel/blob/5a74dfca/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java
----------------------------------------------------------------------
diff --git a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java
index 0e4ccae..e4142d7 100644
--- a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java
+++ b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java
@@ -49,6 +49,10 @@ public class NettyHttpComponent extends NettyComponent implements HeaderFilterSt
     private NettyHttpSecurityConfiguration securityConfiguration;
 
     public NettyHttpComponent() {
+        // use the http configuration and filter strategy
+        setConfiguration(new NettyHttpConfiguration());
+        setHeaderFilterStrategy(new NettyHttpHeaderFilterStrategy());
+        setNettyHttpBinding(new DefaultNettyHttpBinding(getHeaderFilterStrategy()));
     }
 
     @Override
@@ -95,8 +99,11 @@ public class NettyHttpComponent extends NettyComponent implements HeaderFilterSt
         answer.setTimer(getTimer());
 
         // set component options on endpoint as defaults
+        // As the component's NettyHttpBinding could be override by the setHeaderFilterStrategy
+        // Here we just create a new DefaultNettyHttpBinding here
         if (answer.getNettyHttpBinding() == null) {
-            answer.setNettyHttpBinding(getNettyHttpBinding());
+            DefaultNettyHttpBinding nettyHttpBinding = (DefaultNettyHttpBinding)getNettyHttpBinding();
+            answer.setNettyHttpBinding(nettyHttpBinding.copy());
         }
         if (answer.getHeaderFilterStrategy() == null) {
             answer.setHeaderFilterStrategy(getHeaderFilterStrategy());
@@ -142,9 +149,6 @@ public class NettyHttpComponent extends NettyComponent implements HeaderFilterSt
     }
 
     public NettyHttpBinding getNettyHttpBinding() {
-        if (nettyHttpBinding == null) {
-            nettyHttpBinding = new DefaultNettyHttpBinding(getHeaderFilterStrategy());
-        }
         return nettyHttpBinding;
     }
 
@@ -153,9 +157,6 @@ public class NettyHttpComponent extends NettyComponent implements HeaderFilterSt
     }
 
     public HeaderFilterStrategy getHeaderFilterStrategy() {
-        if (headerFilterStrategy == null) {
-            headerFilterStrategy = new NettyHttpHeaderFilterStrategy();
-        }
         return headerFilterStrategy;
     }
 
@@ -194,15 +195,6 @@ public class NettyHttpComponent extends NettyComponent implements HeaderFilterSt
     }
     
     @Override
-    protected void doStart() throws Exception {
-        if (getConfiguration() == null) {
-            setConfiguration(new NettyHttpConfiguration());
-        }
-      
-        super.doStart();
-    }
-
-    @Override
     protected void doStop() throws Exception {
         super.doStop();
 

http://git-wip-us.apache.org/repos/asf/camel/blob/5a74dfca/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpEndpoint.java b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpEndpoint.java
index 7d68050..173aa25 100644
--- a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpEndpoint.java
+++ b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpEndpoint.java
@@ -137,9 +137,7 @@ public class NettyHttpEndpoint extends NettyEndpoint implements HeaderFilterStra
 
     public void setHeaderFilterStrategy(HeaderFilterStrategy headerFilterStrategy) {
         this.headerFilterStrategy = headerFilterStrategy;
-        if (getNettyHttpBinding() != null) {
-            getNettyHttpBinding().setHeaderFilterStrategy(headerFilterStrategy);
-        }
+        getNettyHttpBinding().setHeaderFilterStrategy(headerFilterStrategy);
     }
 
     public boolean isTraceEnabled() {

http://git-wip-us.apache.org/repos/asf/camel/blob/5a74dfca/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpEndpointUriCustomHeaderFilterStrategyTest.java
----------------------------------------------------------------------
diff --git a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpEndpointUriCustomHeaderFilterStrategyTest.java b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpEndpointUriCustomHeaderFilterStrategyTest.java
new file mode 100644
index 0000000..ddbb06b
--- /dev/null
+++ b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpEndpointUriCustomHeaderFilterStrategyTest.java
@@ -0,0 +1,70 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.netty.http;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.impl.DefaultHeaderFilterStrategy;
+import org.apache.camel.impl.JndiRegistry;
+import org.junit.Test;
+
+public class NettyHttpEndpointUriCustomHeaderFilterStrategyTest extends BaseNettyTest {
+
+    @Test
+    public void testEndpointUriWithCustomHeaderStrategy() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:outbound");
+        mock.expectedMessageCount(1);
+        mock.expectedHeaderReceived("Date", "31-03-2014");
+
+        Exchange out = template.request("direct:request", null);
+
+        assertMockEndpointsSatisfied();
+
+        String date = out.getOut().getHeader("sub-date", String.class);
+        assertNull(date);
+    }
+
+    @Override protected JndiRegistry createRegistry() throws Exception {
+        JndiRegistry registry = super.createRegistry();
+        registry.bind("customHeaderFilterStrategy", new CustomHeaderFilterStrategy());
+        return registry;
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:request")
+                    .setHeader("Date", constant("31-03-2014"))
+                    .to("netty-http:http://localhost:{{port}}/myapp/mytest?headerFilterStrategy=#customHeaderFilterStrategy");
+
+                from("netty-http:http://localhost:{{port}}/myapp/mytest")
+                    .to("mock:outbound")
+                    .setHeader("sub-date", constant("31-05-2014"));
+            }
+        };
+    }
+
+    private class CustomHeaderFilterStrategy extends DefaultHeaderFilterStrategy {
+        public CustomHeaderFilterStrategy() {
+            // allow all outbound headers to pass through but only filter out below inbound header 
+            getInFilter().add("sub-date");
+        }   
+    }
+}