You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2014/02/05 11:09:31 UTC

[2/4] git commit: CAMEL-7172: Fixed netty configurations to all support # lookup. Introduce method on default component to do all the work for us. So its useable in other components as well.

CAMEL-7172: Fixed netty configurations to all support # lookup. Introduce method on default component to do all the work for us. So its useable in other components as well.


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

Branch: refs/heads/camel-2.12.x
Commit: 26327acaecd3318cbaa01c795f9383c6db79b374
Parents: a5af43c
Author: Claus Ibsen <da...@apache.org>
Authored: Wed Feb 5 11:09:41 2014 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Wed Feb 5 11:10:01 2014 +0100

----------------------------------------------------------------------
 .../org/apache/camel/impl/DefaultComponent.java | 35 +++++++++++
 .../apache/camel/impl/DefaultComponentTest.java | 21 +++++++
 .../component/netty/NettyConfiguration.java     | 22 +++----
 .../netty/NettySSLPassphaseBeanTest.java        | 65 ++++++++++++++++++++
 4 files changed, 132 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/26327aca/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java
index 584c9f0..3a0b3a0 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java
@@ -28,6 +28,7 @@ import org.apache.camel.Component;
 import org.apache.camel.ComponentConfiguration;
 import org.apache.camel.Endpoint;
 import org.apache.camel.EndpointConfiguration;
+import org.apache.camel.NoTypeConversionAvailableException;
 import org.apache.camel.ResolveEndpointFailedException;
 import org.apache.camel.support.ServiceSupport;
 import org.apache.camel.util.CamelContextHelper;
@@ -317,6 +318,40 @@ public abstract class DefaultComponent extends ServiceSupport implements Compone
     }
 
     /**
+     * Gets the parameter and remove it from the parameter map. This method resolves
+     * reference parameters in the registry as well.
+     *
+     * @param parameters    the parameters
+     * @param key           the key
+     * @param type          the requested type to convert the value from the parameter
+     * @return  the converted value parameter
+     */
+    public <T> T getAndRemoveOrResolveReferenceParameter(Map<String, Object> parameters, String key, Class<T> type) {
+        return getAndRemoveOrResolveReferenceParameter(parameters, key, type, null);
+    }
+
+    /**
+     * Gets the parameter and remove it from the parameter map. This method resolves
+     * reference parameters in the registry as well.
+     *
+     * @param parameters    the parameters
+     * @param key           the key
+     * @param type          the requested type to convert the value from the parameter
+     * @param defaultValue  use this default value if the parameter does not contain the key
+     * @return  the converted value parameter
+     */
+    public <T> T getAndRemoveOrResolveReferenceParameter(Map<String, Object> parameters, String key, Class<T> type, T defaultValue) {
+        String value = getAndRemoveParameter(parameters, key, String.class);
+        if (value == null) {
+            return defaultValue;
+        } else if (EndpointHelper.isReferenceParameter(value)) {
+            return EndpointHelper.resolveReferenceParameter(getCamelContext(), value, type);
+        } else {
+            return getCamelContext().getTypeConverter().convertTo(type, value);
+        }
+    }
+
+    /**
      * Resolves a reference parameter in the registry and removes it from the map. 
      * 
      * @param <T>           type of object to lookup in the registry.

http://git-wip-us.apache.org/repos/asf/camel/blob/26327aca/camel-core/src/test/java/org/apache/camel/impl/DefaultComponentTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/impl/DefaultComponentTest.java b/camel-core/src/test/java/org/apache/camel/impl/DefaultComponentTest.java
index 044329d..508c4e2 100644
--- a/camel-core/src/test/java/org/apache/camel/impl/DefaultComponentTest.java
+++ b/camel-core/src/test/java/org/apache/camel/impl/DefaultComponentTest.java
@@ -190,6 +190,27 @@ public class DefaultComponentTest extends ContextTestSupport {
         }
     }
 
+    public void testGetAndRemoveOrResolveReferenceParameter() {
+        Map<String, Object> parameters = new HashMap<String, Object>();
+        parameters.put("size", 123);
+        parameters.put("date", "#bean1");
+        MyComponent my = new MyComponent(this.context);
+
+        Integer value = my.getAndRemoveOrResolveReferenceParameter(parameters, "size", Integer.class);
+        assertNotNull(value);
+        assertEquals(123, value.intValue());
+        assertEquals(1, parameters.size());
+
+        Date bean1 = my.getAndRemoveOrResolveReferenceParameter(parameters, "date", Date.class);
+        assertNotNull(bean1);
+        assertEquals(new Date(10), bean1);
+        assertEquals(0, parameters.size());
+
+        Integer age = my.getAndRemoveOrResolveReferenceParameter(parameters, "age", Integer.class, 7);
+        assertNotNull(age);
+        assertEquals(7, age.intValue());
+    }
+
     public void testContextShouldBeSet() throws Exception {
         MyComponent my = new MyComponent(null);
         try {

http://git-wip-us.apache.org/repos/asf/camel/blob/26327aca/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyConfiguration.java
----------------------------------------------------------------------
diff --git a/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyConfiguration.java b/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyConfiguration.java
index 14066ce..83ab62d 100644
--- a/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyConfiguration.java
+++ b/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyConfiguration.java
@@ -131,17 +131,17 @@ public class NettyConfiguration extends NettyServerBootstrapConfiguration implem
         setHost(uri.getHost());
         setPort(uri.getPort());
 
-        ssl = component.getAndRemoveParameter(parameters, "ssl", boolean.class, false);
-        sslHandler = component.resolveAndRemoveReferenceParameter(parameters, "sslHandler", SslHandler.class, sslHandler);
-        passphrase = component.getAndRemoveParameter(parameters, "passphrase", String.class, passphrase);
-        keyStoreFormat = component.getAndRemoveParameter(parameters, "keyStoreFormat", String.class, keyStoreFormat == null ? "JKS" : keyStoreFormat);
-        securityProvider = component.getAndRemoveParameter(parameters, "securityProvider", String.class, securityProvider == null ? "SunX509" : securityProvider);
-        keyStoreFile = component.resolveAndRemoveReferenceParameter(parameters, "keyStoreFile", File.class, keyStoreFile);
-        trustStoreFile = component.resolveAndRemoveReferenceParameter(parameters, "trustStoreFile", File.class, trustStoreFile);
-        keyStoreResource = component.getAndRemoveParameter(parameters, "keyStoreResource", String.class, keyStoreResource);
-        trustStoreResource = component.getAndRemoveParameter(parameters, "trustStoreResource", String.class, trustStoreResource);
-        clientPipelineFactory = component.resolveAndRemoveReferenceParameter(parameters, "clientPipelineFactory", ClientPipelineFactory.class, clientPipelineFactory);
-        serverPipelineFactory = component.resolveAndRemoveReferenceParameter(parameters, "serverPipelineFactory", ServerPipelineFactory.class, serverPipelineFactory);
+        ssl = component.getAndRemoveOrResolveReferenceParameter(parameters, "ssl", boolean.class, false);
+        sslHandler = component.getAndRemoveOrResolveReferenceParameter(parameters, "sslHandler", SslHandler.class, sslHandler);
+        passphrase = component.getAndRemoveOrResolveReferenceParameter(parameters, "passphrase", String.class, passphrase);
+        keyStoreFormat = component.getAndRemoveOrResolveReferenceParameter(parameters, "keyStoreFormat", String.class, keyStoreFormat == null ? "JKS" : keyStoreFormat);
+        securityProvider = component.getAndRemoveOrResolveReferenceParameter(parameters, "securityProvider", String.class, securityProvider == null ? "SunX509" : securityProvider);
+        keyStoreFile = component.getAndRemoveOrResolveReferenceParameter(parameters, "keyStoreFile", File.class, keyStoreFile);
+        trustStoreFile = component.getAndRemoveOrResolveReferenceParameter(parameters, "trustStoreFile", File.class, trustStoreFile);
+        keyStoreResource = component.getAndRemoveOrResolveReferenceParameter(parameters, "keyStoreResource", String.class, keyStoreResource);
+        trustStoreResource = component.getAndRemoveOrResolveReferenceParameter(parameters, "trustStoreResource", String.class, trustStoreResource);
+        clientPipelineFactory = component.getAndRemoveOrResolveReferenceParameter(parameters, "clientPipelineFactory", ClientPipelineFactory.class, clientPipelineFactory);
+        serverPipelineFactory = component.getAndRemoveOrResolveReferenceParameter(parameters, "serverPipelineFactory", ServerPipelineFactory.class, serverPipelineFactory);
 
         // set custom encoders and decoders first
         List<ChannelHandler> referencedEncoders = component.resolveAndRemoveReferenceListParameter(parameters, "encoders", ChannelHandler.class, null);

http://git-wip-us.apache.org/repos/asf/camel/blob/26327aca/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettySSLPassphaseBeanTest.java
----------------------------------------------------------------------
diff --git a/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettySSLPassphaseBeanTest.java b/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettySSLPassphaseBeanTest.java
new file mode 100644
index 0000000..1665cd0
--- /dev/null
+++ b/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettySSLPassphaseBeanTest.java
@@ -0,0 +1,65 @@
+/**
+ * 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;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.impl.JndiRegistry;
+import org.junit.Test;
+
+public class NettySSLPassphaseBeanTest extends BaseNettyTest {
+
+    @Override
+    protected JndiRegistry createRegistry() throws Exception {
+        JndiRegistry jndi = super.createRegistry();
+        jndi.bind("myBean", "changeit");
+        return jndi;
+    }
+
+    @Override
+    public boolean isUseRouteBuilder() {
+        return false;
+    }
+
+    @Test
+    public void testPassphaseBean() throws Exception {
+        // ibm jdks dont have sun security algorithms
+        if (isJavaVendor("ibm")) {
+            return;
+        }
+
+        context.addRoutes(new RouteBuilder() {
+            public void configure() {
+                from("netty:tcp://localhost:{{port}}?sync=true&ssl=true&passphrase=#myBean&keyStoreResource=classpath:keystore.jks&trustStoreResource=classpath:keystore.jks")
+                    .process(new Processor() {
+                        public void process(Exchange exchange) throws Exception {
+                            exchange.getOut().setBody("When You Go Home, Tell Them Of Us And Say, For Your Tomorrow, We Gave Our Today.");                           
+                        }
+                    });
+            }
+        });
+        context.start();
+
+        String response = template.requestBody(
+                "netty:tcp://localhost:{{port}}?sync=true&ssl=true&passphrase=#myBean&keyStoreResource=classpath:keystore.jks&trustStoreResource=classpath:keystore.jks",
+                "Epitaph in Kohima, India marking the WWII Battle of Kohima and Imphal, Burma Campaign - Attributed to John Maxwell Edmonds", String.class);
+        assertEquals("When You Go Home, Tell Them Of Us And Say, For Your Tomorrow, We Gave Our Today.", response);
+    }
+
+}