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/11/14 10:36:38 UTC

svn commit: r713959 - in /servicemix/components/engines/servicemix-bean/trunk/src: main/java/org/apache/servicemix/bean/support/TransformBeanSupport.java test/java/org/apache/servicemix/bean/TransformBeanSupportTest.java

Author: gnodet
Date: Fri Nov 14 01:36:38 2008
New Revision: 713959

URL: http://svn.apache.org/viewvc?rev=713959&view=rev
Log:
SM-1668, SM-1604: Fix TransformBeanSupport processing of faults and RobustInOnly meps

Modified:
    servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/support/TransformBeanSupport.java
    servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/TransformBeanSupportTest.java

Modified: servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/support/TransformBeanSupport.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/support/TransformBeanSupport.java?rev=713959&r1=713958&r2=713959&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/support/TransformBeanSupport.java (original)
+++ servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/support/TransformBeanSupport.java Fri Nov 14 01:36:38 2008
@@ -121,61 +121,14 @@
     public void onMessageExchange(MessageExchange exchange) throws MessagingException {
         // Handle consumer exchanges && non-active RobustInOnly provider exchanges
         if (exchange.getRole() == MessageExchange.Role.CONSUMER
-            || exchange.getProperty(correlation) != null) {
-            MessageExchange original = null;
-            String id = null;
-            try {
-                id = (String) exchange.getProperty(correlation);
-                original = (MessageExchange) store.load(id);
-            } catch (Exception e) {
-                // We can't do, so just return
-                return;
-            }
-            try {
-                if (exchange.getStatus() == ExchangeStatus.DONE) {
-                    done(original);
-                // Reproduce ERROR status to the other side
-                } else if (exchange.getStatus() == ExchangeStatus.ERROR) {
-                    fail(original, exchange.getError());
-                // Reproduce faults to the other side and listeners
-                } else if (exchange.getFault() != null) {
-                    store.store(exchange.getExchangeId(), exchange);
-                    try {
-                        MessageUtil.transferTo(exchange, original, "fault"); 
-                        send(original);
-                    } catch (Exception e) {
-                        store.load(exchange.getExchangeId());
-                        throw e;
-                    }
-                // Reproduce answers to the other side
-                } else if (exchange.getMessage("out") != null) {
-                    store.store(exchange.getExchangeId(), exchange);
-                    try {
-                        MessageUtil.transferTo(exchange, original, "out"); 
-                        send(original);
-                    } catch (Exception e) {
-                        store.load(exchange.getExchangeId());
-                        throw e;
-                    }
-                } else {
-                    throw new IllegalStateException("Exchange status is " + ExchangeStatus.ACTIVE
-                            + " but has no Out nor Fault message");
-                }
-            } catch (Exception e) {
-                if (logger.isDebugEnabled()) {
-                    logger.debug("Original error: " + e, e);
-                }
-            }
-            return;
-        }
-        
-        // Skip done exchanges
-        if (exchange.getStatus() == ExchangeStatus.DONE) {
-            return;
-        // Handle error exchanges
-        } else if (exchange.getStatus() == ExchangeStatus.ERROR) {
-            return;
+                || exchange.getProperty(correlation) != null) {
+            processOngoingExchange(exchange);
+        } else {
+            processFirstExchange(exchange);
         }
+    }
+
+    protected void processFirstExchange(MessageExchange exchange) {
         try {
             MessageExchange outExchange = null;
             NormalizedMessage in = getInMessage(exchange);
@@ -253,6 +206,53 @@
         }
     }
 
+    protected void processOngoingExchange(MessageExchange exchange) {
+        MessageExchange original = null;
+        String id = null;
+        try {
+            id = (String) exchange.getProperty(correlation);
+            original = (MessageExchange) store.load(id);
+        } catch (Exception e) {
+            // We can't do, so just return
+            return;
+        }
+        try {
+            if (exchange.getStatus() == ExchangeStatus.DONE) {
+                done(original);
+            // Reproduce ERROR status to the other side
+            } else if (exchange.getStatus() == ExchangeStatus.ERROR) {
+                fail(original, exchange.getError());
+            // Reproduce faults to the other side and listeners
+            } else if (exchange.getFault() != null) {
+                store.store(exchange.getExchangeId(), exchange);
+                try {
+                    MessageUtil.transferTo(exchange, original, "fault");
+                    send(original);
+                } catch (Exception e) {
+                    store.load(exchange.getExchangeId());
+                    throw e;
+                }
+            // Reproduce answers to the other side
+            } else if (exchange.getMessage("out") != null) {
+                store.store(exchange.getExchangeId(), exchange);
+                try {
+                    MessageUtil.transferTo(exchange, original, "out");
+                    send(original);
+                } catch (Exception e) {
+                    store.load(exchange.getExchangeId());
+                    throw e;
+                }
+            } else {
+                throw new IllegalStateException("Exchange status is " + ExchangeStatus.ACTIVE
+                        + " but has no Out nor Fault message");
+            }
+        } catch (Exception e) {
+            if (logger.isDebugEnabled()) {
+                logger.debug("Original error: " + e, e);
+            }
+        }
+    }
+
 
     /**
      * Transforms the given out message

Modified: servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/TransformBeanSupportTest.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/TransformBeanSupportTest.java?rev=713959&r1=713958&r2=713959&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/TransformBeanSupportTest.java (original)
+++ servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/TransformBeanSupportTest.java Fri Nov 14 01:36:38 2008
@@ -25,6 +25,7 @@
 
 import junit.framework.TestCase;
 
+import org.apache.servicemix.MessageExchangeListener;
 import org.apache.servicemix.bean.support.ExchangeTarget;
 import org.apache.servicemix.bean.support.TransformBeanSupport;
 import org.apache.servicemix.client.DefaultServiceMixClient;
@@ -32,7 +33,6 @@
 import org.apache.servicemix.components.util.ComponentSupport;
 import org.apache.servicemix.jbi.container.JBIContainer;
 import org.apache.servicemix.jbi.jaxp.StringSource;
-import org.apache.servicemix.MessageExchangeListener;
 import org.apache.servicemix.tck.ExchangeCompletedListener;
 import org.apache.servicemix.tck.ReceiverComponent;
 
@@ -70,8 +70,6 @@
         container.setFlowName("st");
     }
 
-    ReceiverComponent receiver = new ReceiverComponent();
-
     public void testInOnly() throws Exception {
         TransformBeanSupport transformer = createTransformer("receiver");
         BeanEndpoint transformEndpoint = createBeanEndpoint(transformer);
@@ -161,10 +159,10 @@
         return transformEndpoint;
     }
 
-    protected void activateComponent(ComponentSupport component, String name) throws Exception {
-        component.setService(new QName(name));
-        component.setEndpoint("endpoint");
-        container.activateComponent(component, name);
+    protected void activateComponent(ComponentSupport cmp, String name) throws Exception {
+        cmp.setService(new QName(name));
+        cmp.setEndpoint("endpoint");
+        container.activateComponent(cmp, name);
     }
 
     public static class MyTransformer extends TransformBeanSupport {
@@ -177,9 +175,9 @@
     public static class ReturnErrorComponent extends ComponentSupport implements MessageExchangeListener {
 
         public void onMessageExchange(MessageExchange exchange) throws MessagingException {
-        	if (exchange.getStatus() == ExchangeStatus.ACTIVE) {
-	            fail(exchange, new Exception());
-        	}
+            if (exchange.getStatus() == ExchangeStatus.ACTIVE) {
+                fail(exchange, new Exception());
+            }
         }
     }