SMX4-1472 servicemix-camel component should hornor the synchronous option

git-svn-id: https://svn.apache.org/repos/asf/servicemix/smx4/features/trunk@1487707 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/camel/servicemix-camel/src/main/java/org/apache/servicemix/camel/nmr/ServiceMixConsumer.java b/camel/servicemix-camel/src/main/java/org/apache/servicemix/camel/nmr/ServiceMixConsumer.java
index 52f323f..2d41530 100644
--- a/camel/servicemix-camel/src/main/java/org/apache/servicemix/camel/nmr/ServiceMixConsumer.java
+++ b/camel/servicemix-camel/src/main/java/org/apache/servicemix/camel/nmr/ServiceMixConsumer.java
@@ -75,13 +75,17 @@
             try {
                 org.apache.camel.Exchange camelExchange = getEndpoint().createExchange(exchange);
                 camelExchange.addOnCompletion(this);
-
-                getAsyncProcessor().process(camelExchange, new AsyncCallback() {
-
-                    public void done(boolean doneSync) {
-                        // this is handled by the onComplete/onFailure method
-                    }
-                });
+                if (getEndpoint().isSynchronous()) {
+                    getProcessor().process(camelExchange);
+                    // need to send the response back here
+                    onComplete(camelExchange);
+                } else {
+                    getAsyncProcessor().process(camelExchange, new AsyncCallback() {
+                        public void done(boolean doneSync) {
+                            // this is handled by the onComplete/onFailure method
+                        }
+                    });
+                }
             } catch (Exception e) {
                 exchange.setError(e);
                 exchange.setStatus(Status.Error);
diff --git a/camel/servicemix-camel/src/main/java/org/apache/servicemix/camel/nmr/ServiceMixEndpoint.java b/camel/servicemix-camel/src/main/java/org/apache/servicemix/camel/nmr/ServiceMixEndpoint.java
index 9eaa390..ac9efa4 100644
--- a/camel/servicemix-camel/src/main/java/org/apache/servicemix/camel/nmr/ServiceMixEndpoint.java
+++ b/camel/servicemix-camel/src/main/java/org/apache/servicemix/camel/nmr/ServiceMixEndpoint.java
@@ -24,6 +24,7 @@
 import org.apache.camel.Producer;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
+import org.apache.camel.impl.SynchronousDelegateProducer;
 
 /**
  * A Camel {@link Endpoint} to interact with the ServiceMix NMR from within a Camel route
@@ -87,7 +88,11 @@
 
     
     public Producer createProducer() throws Exception {
-        return new ServiceMixProducer(this, getComponent().getNmr());
+        if (isSynchronous()) {
+            return new SynchronousDelegateProducer(new ServiceMixProducer(this, getComponent().getNmr()));
+        } else {
+            return new ServiceMixProducer(this, getComponent().getNmr());
+        }
     }
 
     public Consumer createConsumer(Processor processor) throws Exception {
diff --git a/camel/servicemix-camel/src/test/java/org/apache/servicemix/camel/nmr/ServiceMixComponentTest.java b/camel/servicemix-camel/src/test/java/org/apache/servicemix/camel/nmr/ServiceMixComponentTest.java
index 0a3ed39..91ed657 100644
--- a/camel/servicemix-camel/src/test/java/org/apache/servicemix/camel/nmr/ServiceMixComponentTest.java
+++ b/camel/servicemix-camel/src/test/java/org/apache/servicemix/camel/nmr/ServiceMixComponentTest.java
@@ -17,12 +17,9 @@
 package org.apache.servicemix.camel.nmr;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.Exchange;
-import org.apache.camel.Processor;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.Producer;
 import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.servicemix.nmr.api.AbortedException;
+import org.apache.camel.impl.SynchronousDelegateProducer;
 import org.junit.Test;
 
 /**
@@ -39,6 +36,14 @@
     }
 
     @Test
+    public void testSyncOperation() throws Exception {
+        ServiceMixEndpoint endpoint = (ServiceMixEndpoint) context.getEndpoint("nmr:Test?synchronous=true");
+        assertNotNull(endpoint);
+        Producer producer = endpoint.createProducer();
+        assertTrue("It should be the instance of ", producer instanceof SynchronousDelegateProducer);
+    }
+
+    @Test
     public void testUriRunAsSubject() {
         ServiceMixEndpoint endpoint = (ServiceMixEndpoint) context.getEndpoint("nmr:Test");
         assertNotNull(endpoint);