CAMEL-5402: Camel proxy allows to bind to method interface using @Body @Header 
and @ExchangeProperty to bind arguments to the exchange


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

Branch: refs/heads/master
Commit: c2396c35aa1a65359429f8958c735760bde99028
Parents: 32b6c51
Author: Claus Ibsen <davscl...@apache.org>
Authored: Mon Aug 10 18:52:32 2015 +0200
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Mon Aug 10 18:52:32 2015 +0200

----------------------------------------------------------------------
 .../camel/component/bean/ProxyHelper.java       | 20 +++++++++++++++-----
 .../camel/component/bean/MyAuditService.java    |  2 --
 .../camel/blueprint/CamelProxyFactoryBean.java  | 14 +++++++++++++-
 .../core/xml/CamelProxyFactoryDefinition.java   |  2 ++
 .../spring/remoting/CamelProxyFactoryBean.java  | 13 ++++++++++++-
 5 files changed, 42 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/c2396c35/camel-core/src/main/java/org/apache/camel/component/bean/ProxyHelper.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/component/bean/ProxyHelper.java 
b/camel-core/src/main/java/org/apache/camel/component/bean/ProxyHelper.java
index f80a9a9..95e6524 100644
--- a/camel-core/src/main/java/org/apache/camel/component/bean/ProxyHelper.java
+++ b/camel-core/src/main/java/org/apache/camel/component/bean/ProxyHelper.java
@@ -61,7 +61,7 @@ public final class ProxyHelper {
      */
     @Deprecated
     public static <T> T createProxy(Endpoint endpoint, ClassLoader cl, 
Class<T> interfaceClass, MethodInfoCache methodCache) throws Exception {
-        return createProxy(endpoint, cl, toArray(interfaceClass), methodCache);
+        return createProxy(endpoint, false, cl, toArray(interfaceClass), 
methodCache);
     }
 
     /**
@@ -94,7 +94,7 @@ public final class ProxyHelper {
      * Creates a Proxy which sends the exchange to the endpoint.
      */
     public static <T> T createProxy(Endpoint endpoint, ClassLoader cl, 
Class<T> interfaceClass) throws Exception {
-        return createProxy(endpoint, cl, toArray(interfaceClass));
+        return createProxy(endpoint, false, cl, toArray(interfaceClass));
     }
 
     /**
@@ -118,7 +118,7 @@ public final class ProxyHelper {
      * Creates a Proxy which sends the exchange to the endpoint.
      */
     public static <T> T createProxy(Endpoint endpoint, Class<T> 
interfaceClass) throws Exception {
-        return createProxy(endpoint, toArray(interfaceClass));
+        return createProxy(endpoint, false, toArray(interfaceClass));
     }
 
     /**
@@ -142,14 +142,24 @@ public final class ProxyHelper {
      * Creates a Proxy which sends the exchange to the endpoint.
      */
     public static <T> T createProxy(Endpoint endpoint, Producer producer, 
Class<T> interfaceClass) throws Exception {
-        return createProxy(endpoint, producer, toArray(interfaceClass));
+        return createProxy(endpoint, false, producer, toArray(interfaceClass));
     }
 
     /**
      * Creates a Proxy which sends the exchange to the endpoint.
+     *
+     * @deprecated use the same method name with binding as parameter
      */
+    @Deprecated
     public static <T> T createProxy(Endpoint endpoint, Producer producer, 
Class<T>... interfaceClasses) throws Exception {
-        return createProxyObject(endpoint, producer, 
getClassLoader(interfaceClasses), interfaceClasses, 
createMethodInfoCache(endpoint));
+        return createProxyObject(endpoint, false, producer, 
getClassLoader(interfaceClasses), interfaceClasses, 
createMethodInfoCache(endpoint));
+    }
+
+    /**
+     * Creates a Proxy which sends the exchange to the endpoint.
+     */
+    public static <T> T createProxy(Endpoint endpoint, boolean binding, 
Producer producer, Class<T>... interfaceClasses) throws Exception {
+        return createProxyObject(endpoint, binding, producer, 
getClassLoader(interfaceClasses), interfaceClasses, 
createMethodInfoCache(endpoint));
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/camel/blob/c2396c35/camel-core/src/test/java/org/apache/camel/component/bean/MyAuditService.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/test/java/org/apache/camel/component/bean/MyAuditService.java 
b/camel-core/src/test/java/org/apache/camel/component/bean/MyAuditService.java
index 7a1518a..cad4a05 100644
--- 
a/camel-core/src/test/java/org/apache/camel/component/bean/MyAuditService.java
+++ 
b/camel-core/src/test/java/org/apache/camel/component/bean/MyAuditService.java
@@ -18,11 +18,9 @@ package org.apache.camel.component.bean;
 
 import org.apache.camel.Body;
 import org.apache.camel.Header;
-import org.apache.camel.InOnly;
 
 public interface MyAuditService {
 
-    @InOnly
     void auditMessage(@Header("uuid") String uuid, @Body String body);
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/c2396c35/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelProxyFactoryBean.java
----------------------------------------------------------------------
diff --git 
a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelProxyFactoryBean.java
 
b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelProxyFactoryBean.java
index b291195..c22fa38 100644
--- 
a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelProxyFactoryBean.java
+++ 
b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelProxyFactoryBean.java
@@ -45,6 +45,8 @@ public class CamelProxyFactoryBean extends 
AbstractCamelFactoryBean<Object> {
     private String serviceRef;
     @XmlAttribute
     private String serviceInterface;
+    @XmlAttribute
+    private Boolean binding;
     @XmlTransient
     private Endpoint endpoint;
     @XmlTransient
@@ -103,11 +105,13 @@ public class CamelProxyFactoryBean extends 
AbstractCamelFactoryBean<Object> {
             }
         }
 
+        boolean bind = getBinding() != null ? getBinding() : false;
+
         try {
             producer = endpoint.createProducer();
             ServiceHelper.startService(producer);
             Class<?> clazz = 
blueprintContainer.loadClass(getServiceInterface());
-            serviceProxy = ProxyHelper.createProxy(endpoint, producer, clazz);
+            serviceProxy = ProxyHelper.createProxy(endpoint, bind, producer, 
clazz);
         } catch (Exception e) {
             throw new FailedToCreateProducerException(endpoint, e);
         }
@@ -133,6 +137,14 @@ public class CamelProxyFactoryBean extends 
AbstractCamelFactoryBean<Object> {
         this.serviceRef = serviceRef;
     }
 
+    public Boolean getBinding() {
+        return binding;
+    }
+
+    public void setBinding(Boolean binding) {
+        this.binding = binding;
+    }
+
     public String getServiceInterface() {
         return serviceInterface;
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/c2396c35/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelProxyFactoryDefinition.java
----------------------------------------------------------------------
diff --git 
a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelProxyFactoryDefinition.java
 
b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelProxyFactoryDefinition.java
index d59c3f1..dc54bea 100644
--- 
a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelProxyFactoryDefinition.java
+++ 
b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelProxyFactoryDefinition.java
@@ -36,5 +36,7 @@ public class CamelProxyFactoryDefinition extends 
IdentifiedType {
     private Class<?> serviceInterface;
     @XmlAttribute
     private String camelContextId;
+    @XmlAttribute
+    private Boolean binding;
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/c2396c35/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelProxyFactoryBean.java
----------------------------------------------------------------------
diff --git 
a/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelProxyFactoryBean.java
 
b/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelProxyFactoryBean.java
index 1725d79..ecd3d56 100644
--- 
a/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelProxyFactoryBean.java
+++ 
b/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelProxyFactoryBean.java
@@ -39,6 +39,7 @@ public class CamelProxyFactoryBean extends 
UrlBasedRemoteAccessor implements Fac
     private String serviceRef;
     private CamelContext camelContext;
     private String camelContextId;
+    private Boolean binding;
     private ApplicationContext applicationContext;
     private Endpoint endpoint;
     private Object serviceProxy;
@@ -70,10 +71,12 @@ public class CamelProxyFactoryBean extends 
UrlBasedRemoteAccessor implements Fac
             }
         }
 
+        boolean bind = getBinding() != null ? getBinding() : false;
+
         try {
             producer = endpoint.createProducer();
             ServiceHelper.startService(producer);
-            serviceProxy = ProxyHelper.createProxy(endpoint, producer, 
getServiceInterface());
+            serviceProxy = ProxyHelper.createProxy(endpoint, bind, producer, 
getServiceInterface());
         } catch (Exception e) {
             throw new FailedToCreateProducerException(endpoint, e);
         }
@@ -111,6 +114,14 @@ public class CamelProxyFactoryBean extends 
UrlBasedRemoteAccessor implements Fac
         this.serviceRef = serviceRef;
     }
 
+    public Boolean getBinding() {
+        return binding;
+    }
+
+    public void setBinding(Boolean binding) {
+        this.binding = binding;
+    }
+
     public Endpoint getEndpoint() {
         return endpoint;
     }

Reply via email to