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; }