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