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");
+                    }
+                });
             }
             
         };