You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2008/09/03 16:51:50 UTC
svn commit: r691630 - in
/servicemix/components/engines/servicemix-camel/trunk/src:
main/java/org/apache/servicemix/camel/CamelJbiEndpoint.java
test/java/org/apache/servicemix/camel/JbiInOnlyTest.java
Author: gnodet
Date: Wed Sep 3 07:51:49 2008
New Revision: 691630
URL: http://svn.apache.org/viewvc?rev=691630&view=rev
Log:
SM-1473: servicemix-camel does not handle error from camel processing
Modified:
servicemix/components/engines/servicemix-camel/trunk/src/main/java/org/apache/servicemix/camel/CamelJbiEndpoint.java
servicemix/components/engines/servicemix-camel/trunk/src/test/java/org/apache/servicemix/camel/JbiInOnlyTest.java
Modified: servicemix/components/engines/servicemix-camel/trunk/src/main/java/org/apache/servicemix/camel/CamelJbiEndpoint.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-camel/trunk/src/main/java/org/apache/servicemix/camel/CamelJbiEndpoint.java?rev=691630&r1=691629&r2=691630&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-camel/trunk/src/main/java/org/apache/servicemix/camel/CamelJbiEndpoint.java (original)
+++ servicemix/components/engines/servicemix-camel/trunk/src/main/java/org/apache/servicemix/camel/CamelJbiEndpoint.java Wed Sep 3 07:51:49 2008
@@ -91,18 +91,44 @@
}
JbiExchange camelExchange = new JbiExchange(camelEndpoint.getCamelContext(), binding, exchange);
camelProcessor.process(camelExchange);
- done(exchange);
+ if (camelExchange.isFailed()) {
+ Throwable t = camelExchange.getException();
+ Exception e;
+ if (t == null) {
+ e = new Exception("Unknown error");
+ } else if (t instanceof Exception) {
+ e = (Exception) t;
+ } else {
+ e = new Exception(t);
+ }
+ fail(exchange, e);
+ } else {
+ done(exchange);
+ }
} else {
if (logger.isDebugEnabled()) {
logger.debug("Received exchange: " + exchange);
}
JbiExchange camelExchange = new JbiExchange(camelEndpoint.getCamelContext(), binding, exchange);
camelProcessor.process(camelExchange);
- boolean txSync = exchange.isTransacted() && Boolean.TRUE.equals(exchange.getProperty(JbiConstants.SEND_SYNC));
- if (txSync) {
- sendSync(exchange);
+ if (camelExchange.isFailed()) {
+ Throwable t = camelExchange.getException();
+ Exception e;
+ if (t == null) {
+ e = new Exception("Unknown error");
+ } else if (t instanceof Exception) {
+ e = (Exception) t;
+ } else {
+ e = new Exception(t);
+ }
+ fail(exchange, e);
} else {
- send(exchange);
+ boolean txSync = exchange.isTransacted() && Boolean.TRUE.equals(exchange.getProperty(JbiConstants.SEND_SYNC));
+ if (txSync) {
+ sendSync(exchange);
+ } else {
+ send(exchange);
+ }
}
}
// This is not compliant with the default MEPs
Modified: servicemix/components/engines/servicemix-camel/trunk/src/test/java/org/apache/servicemix/camel/JbiInOnlyTest.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-camel/trunk/src/test/java/org/apache/servicemix/camel/JbiInOnlyTest.java?rev=691630&r1=691629&r2=691630&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-camel/trunk/src/test/java/org/apache/servicemix/camel/JbiInOnlyTest.java (original)
+++ servicemix/components/engines/servicemix-camel/trunk/src/test/java/org/apache/servicemix/camel/JbiInOnlyTest.java Wed Sep 3 07:51:49 2008
@@ -19,11 +19,15 @@
import java.util.List;
import javax.jbi.messaging.InOnly;
+import javax.jbi.messaging.ExchangeStatus;
+import javax.jbi.messaging.InOut;
import javax.xml.namespace.QName;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.converter.jaxp.StringSource;
+import org.apache.camel.Processor;
+import org.apache.camel.Exchange;
import org.apache.servicemix.client.DefaultServiceMixClient;
import org.apache.servicemix.client.ServiceMixClient;
import org.apache.servicemix.jbi.container.ActivationSpec;
@@ -48,6 +52,24 @@
done.assertIsSatisfied();
}
+ public void testInOnlyWithException() throws Exception {
+ ServiceMixClient client = new DefaultServiceMixClient(jbiContainer);
+ InOnly exchange = client.createInOnlyExchange();
+ exchange.setService(new QName("urn:test", "in-only-error"));
+ exchange.getInMessage().setContent(new StringSource(MESSAGE));
+ client.sendSync(exchange);
+ assertEquals(ExchangeStatus.ERROR, exchange.getStatus());
+ }
+
+ public void testInOutWithException() throws Exception {
+ ServiceMixClient client = new DefaultServiceMixClient(jbiContainer);
+ InOut exchange = client.createInOutExchange();
+ exchange.setService(new QName("urn:test", "in-only-error"));
+ exchange.getInMessage().setContent(new StringSource(MESSAGE));
+ client.sendSync(exchange);
+ assertEquals(ExchangeStatus.ERROR, exchange.getStatus());
+ }
+
@Override
protected void appendJbiActivationSpecs(List<ActivationSpec> activationSpecList) {
// no additional activation specs required
@@ -60,6 +82,11 @@
@Override
public void configure() throws Exception {
from("jbi:service:urn:test:in-only").convertBodyTo(String.class).to("mock:done");
+ from("jbi:service:urn:test:in-only-error").process(new Processor() {
+ public void process(Exchange exchange) throws Exception {
+ throw new Exception("Error");
+ }
+ });
}
};