You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by lb...@apache.org on 2016/05/09 15:40:42 UTC

camel git commit: CAMEL-9944 : FluentProducerTemplate - Make extract as part of UoW

Repository: camel
Updated Branches:
  refs/heads/master 35527c18e -> 1b838547b


CAMEL-9944 : FluentProducerTemplate - Make extract as part of UoW


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

Branch: refs/heads/master
Commit: 1b838547b573670683baa6660cf63c664335ed54
Parents: 35527c1
Author: lburgazzoli <lb...@gmail.com>
Authored: Mon May 9 17:38:57 2016 +0200
Committer: lburgazzoli <lb...@gmail.com>
Committed: Mon May 9 17:38:57 2016 +0200

----------------------------------------------------------------------
 .../java/org/apache/camel/ProducerTemplate.java   | 18 ++++++++++++++++++
 .../camel/builder/FluentProducerTemplate.java     | 16 +++++++++++++++-
 .../camel/impl/DefaultProducerTemplate.java       |  4 ++++
 3 files changed, 37 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/1b838547/camel-core/src/main/java/org/apache/camel/ProducerTemplate.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/ProducerTemplate.java b/camel-core/src/main/java/org/apache/camel/ProducerTemplate.java
index 2404d85..53e7936 100644
--- a/camel-core/src/main/java/org/apache/camel/ProducerTemplate.java
+++ b/camel-core/src/main/java/org/apache/camel/ProducerTemplate.java
@@ -309,6 +309,24 @@ public interface ProducerTemplate extends Service {
      */
     Exchange send(Endpoint endpoint, ExchangePattern pattern, Processor processor);
 
+
+    /**
+     * Sends an exchange to an endpoint using a supplied processor
+     * <br/><br/>
+     * <p/><b>Notice:</b> that if the processing of the exchange failed with an Exception
+     * it is <b>not</b> thrown from this method, but you can access it from the returned exchange using
+     * {@link org.apache.camel.Exchange#getException()}.
+     *
+     * @param endpoint  the endpoint to send the exchange to
+     * @param pattern   the message {@link ExchangePattern} such as
+     *                  {@link ExchangePattern#InOnly} or {@link ExchangePattern#InOut}
+     * @param processor the transformer used to populate the new exchange
+     * @param resultProcessor a processor to process the exchange when the send is complete.
+     * {@link Processor} to populate the exchange
+     * @return the returned exchange
+     */
+    Exchange send(Endpoint endpoint, ExchangePattern pattern, Processor processor, Processor resultProcessor);
+
     /**
      * Send the body to an endpoint
      * <br/><br/>

http://git-wip-us.apache.org/repos/asf/camel/blob/1b838547/camel-core/src/main/java/org/apache/camel/builder/FluentProducerTemplate.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/builder/FluentProducerTemplate.java b/camel-core/src/main/java/org/apache/camel/builder/FluentProducerTemplate.java
index 98bec58..54c34e5 100644
--- a/camel-core/src/main/java/org/apache/camel/builder/FluentProducerTemplate.java
+++ b/camel-core/src/main/java/org/apache/camel/builder/FluentProducerTemplate.java
@@ -30,11 +30,13 @@ import org.apache.camel.ExchangePattern;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.ProducerTemplate;
+import org.apache.camel.processor.ConvertBodyProcessor;
 import org.apache.camel.util.ExchangeHelper;
 import org.apache.camel.util.ObjectHelper;
 
 public class FluentProducerTemplate {
     private final CamelContext context;
+    private final ClassValue<ConvertBodyProcessor> resultProcessors;
     private Map<String, Object> headers;
     private Object body;
     private Endpoint endpoint;
@@ -52,6 +54,12 @@ public class FluentProducerTemplate {
         this.exchangeSupplier = null;
         this.processorSupplier = () -> this::populateExchange;
         this.template = null;
+        this.resultProcessors = new ClassValue<ConvertBodyProcessor>() {
+            @Override
+            protected ConvertBodyProcessor computeValue(Class<?> type) {
+                return new ConvertBodyProcessor(type);
+            }
+        };
     }
 
     /**
@@ -259,7 +267,13 @@ public class FluentProducerTemplate {
             Exchange exchange = template().request(endpoint, processorSupplier.get());
             result = exchange.hasOut() ? (T)exchange.getOut() : (T)exchange.getIn();
         } else {
-            Exchange exchange = template().send(endpoint, ExchangePattern.InOut, processorSupplier.get());
+            Exchange exchange = template().send(
+                endpoint,
+                ExchangePattern.InOut,
+                processorSupplier.get(),
+                resultProcessors.get(type)
+            );
+
             result = context.getTypeConverter().convertTo(
                 type,
                 ExchangeHelper.extractResultBody(exchange, exchange.getPattern())

http://git-wip-us.apache.org/repos/asf/camel/blob/1b838547/camel-core/src/main/java/org/apache/camel/impl/DefaultProducerTemplate.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultProducerTemplate.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultProducerTemplate.java
index a5c8867..6eff970 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/DefaultProducerTemplate.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultProducerTemplate.java
@@ -135,6 +135,10 @@ public class DefaultProducerTemplate extends ServiceSupport implements ProducerT
         return getProducerCache().send(endpoint, pattern, processor);
     }
 
+    public Exchange send(Endpoint endpoint, ExchangePattern pattern, Processor processor, Processor resultProcessor) {
+        return getProducerCache().send(endpoint, pattern, processor, resultProcessor);
+    }
+
     public Object sendBody(Endpoint endpoint, ExchangePattern pattern, Object body) {
         Exchange result = send(endpoint, pattern, createSetBodyProcessor(body));
         return extractResultBody(result, pattern);