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