CAMEL-10195: rest-dsl - automatic binding failure with 
waitForTaskToComplete=Never


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

Branch: refs/heads/camel-2.17.x
Commit: 9fedf6aa6ae5a55ed02920d63cd888dbb8b42934
Parents: 17f24ad
Author: Claus Ibsen <davscl...@apache.org>
Authored: Fri Jul 29 15:56:32 2016 +0200
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Fri Jul 29 15:58:21 2016 +0200

----------------------------------------------------------------------
 .../camel/component/seda/SedaProducer.java      | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/9fedf6aa/camel-core/src/main/java/org/apache/camel/component/seda/SedaProducer.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/component/seda/SedaProducer.java 
b/camel-core/src/main/java/org/apache/camel/component/seda/SedaProducer.java
index 1e28eaa..3e34e8a 100644
--- a/camel-core/src/main/java/org/apache/camel/component/seda/SedaProducer.java
+++ b/camel-core/src/main/java/org/apache/camel/component/seda/SedaProducer.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.component.seda;
 
+import java.util.List;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
@@ -25,6 +26,7 @@ import org.apache.camel.Exchange;
 import org.apache.camel.ExchangeTimedOutException;
 import org.apache.camel.WaitForTaskToComplete;
 import org.apache.camel.impl.DefaultAsyncProducer;
+import org.apache.camel.spi.Synchronization;
 import org.apache.camel.support.SynchronizationAdapter;
 import org.apache.camel.util.ExchangeHelper;
 
@@ -178,7 +180,23 @@ public class SedaProducer extends DefaultAsyncProducer {
 
     protected Exchange prepareCopy(Exchange exchange, boolean handover) {
         // use a new copy of the exchange to route async (and use same message 
id)
-        Exchange copy = ExchangeHelper.createCorrelatedCopy(exchange, 
handover, true);
+        Exchange copy = ExchangeHelper.createCorrelatedCopy(exchange, false, 
true);
+        // if handover we need to do special handover to avoid handing over
+        // RestBindingMarshalOnCompletion as it should not be handed over with 
SEDA
+        if (handover) {
+            List<Synchronization> completions = exchange.handoverCompletions();
+            if (completions != null) {
+                for (Synchronization sync : completions) {
+                    if 
(sync.getClass().getName().contains("RestBindingMarshalOnCompletion")) {
+                        // keep this one
+                        exchange.addOnCompletion(sync);
+                    } else {
+                        // handover
+                        copy.addOnCompletion(sync);
+                    }
+                }
+            }
+        }
         // set a new from endpoint to be the seda queue
         copy.setFromEndpoint(endpoint);
         return copy;

Reply via email to