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 2006/03/01 00:09:23 UTC

svn commit: r381815 - /incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/components/util/PipelineComponent.java

Author: gnodet
Date: Tue Feb 28 15:09:21 2006
New Revision: 381815

URL: http://svn.apache.org/viewcvs?rev=381815&view=rev
Log:
Ensure that all exchanges are finished (DONE) and handle exchanges with an ERROR status

Modified:
    incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/components/util/PipelineComponent.java

Modified: incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/components/util/PipelineComponent.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/components/util/PipelineComponent.java?rev=381815&r1=381814&r2=381815&view=diff
==============================================================================
--- incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/components/util/PipelineComponent.java (original)
+++ incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/components/util/PipelineComponent.java Tue Feb 28 15:09:21 2006
@@ -15,10 +15,6 @@
  */
 package org.apache.servicemix.components.util;
 
-import org.apache.servicemix.MessageExchangeListener;
-import org.apache.servicemix.jbi.MissingPropertyException;
-import org.apache.servicemix.jbi.NoServiceAvailableException;
-
 import javax.jbi.JBIException;
 import javax.jbi.messaging.DeliveryChannel;
 import javax.jbi.messaging.ExchangeStatus;
@@ -31,6 +27,10 @@
 import javax.jbi.servicedesc.ServiceEndpoint;
 import javax.xml.namespace.QName;
 
+import org.apache.servicemix.MessageExchangeListener;
+import org.apache.servicemix.jbi.MissingPropertyException;
+import org.apache.servicemix.jbi.NoServiceAvailableException;
+
 /**
  * This component acts as an InOnly component which pipelines a request/response (InOut) to a service
  * then forwards the response onto an InOut component.
@@ -69,31 +69,40 @@
     }
 
     public void onMessageExchange(MessageExchange exchange) throws MessagingException {
-        if (exchange.getStatus() != ExchangeStatus.DONE) {
-            // lets create an endpoint
-            DeliveryChannel deliveryChannel = getDeliveryChannel();
-            MessageExchangeFactory rpcFactory = deliveryChannel.createExchangeFactory(requestResponseEndpoint);
-            InOut rpc = rpcFactory.createInOutExchange();
-            rpc.setInMessage(exchange.getMessage("in"));
-            boolean answer = deliveryChannel.sendSync(rpc);
-    
-            MessageExchangeFactory outputFactory = deliveryChannel.createExchangeFactory(outputEndpoint);
-            InOnly inOnly = outputFactory.createInOnlyExchange();
-    
-            if (answer) {
-                inOnly.setInMessage(rpc.getOutMessage());
-                deliveryChannel.send(inOnly);
-                done(exchange);
-            }
-            else if (exchange instanceof InOnly == false) {
-                inOnly.setError(rpc.getError());
-                Fault fault = rpc.getFault();
-                fail(exchange, fault);
-            } 
-            else {
-                // TODO: log error
-            }
+        // Skip done exchanges
+        if (exchange.getStatus() == ExchangeStatus.DONE) {
+            return;
+        // Handle error exchanges
+        } else if (exchange.getStatus() == ExchangeStatus.ERROR) {
+            done(exchange);
+            return;
+        }
+
+        // lets create an endpoint
+        DeliveryChannel deliveryChannel = getDeliveryChannel();
+        MessageExchangeFactory rpcFactory = deliveryChannel.createExchangeFactory(requestResponseEndpoint);
+        InOut rpc = rpcFactory.createInOutExchange();
+        rpc.setInMessage(exchange.getMessage("in"));
+        boolean answer = deliveryChannel.sendSync(rpc);
+
+        MessageExchangeFactory outputFactory = deliveryChannel.createExchangeFactory(outputEndpoint);
+        InOnly inOnly = outputFactory.createInOnlyExchange();
+
+        if (answer) {
+            inOnly.setInMessage(rpc.getOutMessage());
+            deliveryChannel.send(inOnly);
+            done(exchange);
+        }
+        else if (exchange instanceof InOnly == false) {
+            inOnly.setError(rpc.getError());
+            Fault fault = rpc.getFault();
+            fail(exchange, fault);
+        } 
+        else {
+            // terminate the exchange
+            done(exchange);
         }
+        done(rpc);
     }
 
     // Properties