Author: hadrian
Date: Tue Jul 28 23:55:20 2009
New Revision: 798728

URL: http://svn.apache.org/viewvc?rev=798728&view=rev
Log:
CAMEL-316.  Implement the Fault api as Out. Added a fault flag to Message.

Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/Message.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/util/ExchangeHelper.java
    
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/PipelineTest.java
    
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/enricher/EnricherTest.java
    
camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java
    
camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/non_wrapper/PersonProcessor.java
    
camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/wsdl_first/PersonProcessor.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java?rev=798728&r1=798727&r2=798728&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java 
(original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java Tue Jul 
28 23:55:20 2009
@@ -222,6 +222,7 @@
      *
      * @return the fault
      */
+    @Deprecated
     Message getFault();
 
     /**
@@ -229,6 +230,7 @@
      *
      * @return <tt>true</tt> if a FAULT message exists, <tt>false</tt> 
otherwise.
      */
+    @Deprecated
     boolean hasFault();
 
     /**

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/Message.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/Message.java?rev=798728&r1=798727&r2=798728&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/Message.java 
(original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/Message.java Tue Jul 
28 23:55:20 2009
@@ -48,6 +48,16 @@
     Exchange getExchange();
 
     /**
+     * Returns true if this message represents a fault
+     */
+    boolean isFault();
+
+    /**
+     * Sets the fault flag on this message
+     */
+    void setFault(boolean fault);
+
+    /**
      * Accesses a specific header
      *
      * @param name  name of header

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java?rev=798728&r1=798727&r2=798728&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java 
(original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java 
Tue Jul 28 23:55:20 2009
@@ -45,7 +45,6 @@
     private Map<String, Object> properties;
     private Message in;
     private Message out;
-    private Message fault;
     private Exception exception;
     private String exchangeId;
     private UnitOfWork unitOfWork;
@@ -266,7 +265,8 @@
     }
 
     public boolean hasFault() {
-        return fault != null;
+        Message out = getOut(false);
+        return out != null && out.isFault();
     }
 
     public Message getFault() {
@@ -274,17 +274,18 @@
     }
 
     public Message getFault(boolean lazyCreate) {
-        if (fault == null && lazyCreate) {
-            fault = (in != null && in instanceof MessageSupport)
-                ? ((MessageSupport)in).newInstance() : new DefaultMessage();
-            configureMessage(fault);
+        Message fault = getOut(lazyCreate);
+        if (fault != null) {
+            fault.setFault(true);
         }
         return fault;
     }
 
     public void setFault(Message fault) {
-        this.fault = fault;
-        configureMessage(fault);
+        if (fault != null) {
+            fault.setFault(true);
+        }
+        setOut(fault);
     }
 
     public String getExchangeId() {

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java?rev=798728&r1=798727&r2=798728&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java 
(original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java 
Tue Jul 28 23:55:20 2009
@@ -30,6 +30,7 @@
  * @version $Revision$
  */
 public class DefaultMessage extends MessageSupport {
+    private boolean fault = false; 
     private Map<String, Object> headers;
     private Map<String, DataHandler> attachments;
 
@@ -38,6 +39,17 @@
         return MessageHelper.extractBodyForLogging(this);
     }
 
+    public boolean isFault() {
+        return fault;
+    }
+
+    /**
+     * Sets the fault flag on this message
+     */
+    public void setFault(boolean fault) {
+        this.fault = fault;
+    }
+    
     public Object getHeader(String name) {
         return getHeaders().get(name);
     }

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/util/ExchangeHelper.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ExchangeHelper.java?rev=798728&r1=798727&r2=798728&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/util/ExchangeHelper.java 
(original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/util/ExchangeHelper.java 
Tue Jul 28 23:55:20 2009
@@ -243,7 +243,7 @@
         result.getIn().copyFrom(source.getIn());
     
         // copy out message
-        if (source.hasOut()) {
+        if (source.hasOut() && !source.getOut().isFault()) {
             // exchange pattern sensitive
             getResultMessage(result).copyFrom(source.getOut());
         }

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/PipelineTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/PipelineTest.java?rev=798728&r1=798727&r2=798728&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/PipelineTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/PipelineTest.java
 Tue Jul 28 23:55:20 2009
@@ -104,10 +104,6 @@
         // Check the fault..
         assertEquals("Fault Message", exchange.getFault().getBody());
         assertEquals(2, exchange.getFault().getHeader("copy-counter"));        
-        
-        // Check the out Message.. It should have only been processed once.
-        // since the fault should stop it from going to the next process.
-        assertEquals(1, exchange.getOut().getHeader("copy-counter"));          
      
     }
 
     public void testOnlyProperties() {

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/enricher/EnricherTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/enricher/EnricherTest.java?rev=798728&r1=798727&r2=798728&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/enricher/EnricherTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/enricher/EnricherTest.java
 Tue Jul 28 23:55:20 2009
@@ -60,7 +60,6 @@
         mock.assertIsSatisfied();
         assertEquals("test", exchange.getIn().getBody());
         assertEquals("failed", exchange.getFault().getBody());
-        assertFalse(exchange.hasOut());
         assertNull(exchange.getException());
     }
 
@@ -108,7 +107,6 @@
         });
         assertEquals("test", exchange.getIn().getBody());
         assertEquals("failed", exchange.getFault().getBody());
-        assertFalse(exchange.hasOut());
         assertNull(exchange.getException());
     }
 

Modified: 
camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java?rev=798728&r1=798727&r2=798728&view=diff
==============================================================================
--- 
camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java
 (original)
+++ 
camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java
 Tue Jul 28 23:55:20 2009
@@ -89,13 +89,10 @@
                 
                 // check failure
                 if (camelExchange.isFailed()) {
-                    Throwable t = 
(Throwable)camelExchange.getFault().getBody();
-                    if (t instanceof Fault) {
-                        throw (Fault)t;
-                    } else if (t == null) {
-                        t = camelExchange.getException();
-                    }
-                    throw new Fault(t);
+                    // either Fault or Exception
+                    Throwable t = (camelExchange.hasFault()) 
+                        ? (Throwable)camelExchange.getFault().getBody() : 
camelExchange.getException();
+                    throw (t instanceof Fault) ? (Fault)t : new Fault(t);
                 }
                 
                 // bind the Camel response into a CXF response

Modified: 
camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/non_wrapper/PersonProcessor.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/non_wrapper/PersonProcessor.java?rev=798728&r1=798727&r2=798728&view=diff
==============================================================================
--- 
camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/non_wrapper/PersonProcessor.java
 (original)
+++ 
camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/non_wrapper/PersonProcessor.java
 Tue Jul 28 23:55:20 2009
@@ -50,8 +50,9 @@
             org.apache.camel.non_wrapper.UnknownPersonFault fault =
                 new org.apache.camel.non_wrapper.UnknownPersonFault("Get the 
null value of person name", personFault);
             // Since camel has its own exception handler framework, we can't 
throw the exception to trigger it
-            // We just set the fault message in the exchange for camel-cxf 
component handling
+            // We just set the fault message in the exchange for camel-cxf 
component handling and return
             exchange.getFault().setBody(fault);
+            return;
         }
         response.setPersonId(personId);
         response.setName("Bonjour");

Modified: 
camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/wsdl_first/PersonProcessor.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/wsdl_first/PersonProcessor.java?rev=798728&r1=798727&r2=798728&view=diff
==============================================================================
--- 
camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/wsdl_first/PersonProcessor.java
 (original)
+++ 
camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/wsdl_first/PersonProcessor.java
 Tue Jul 28 23:55:20 2009
@@ -52,8 +52,9 @@
             org.apache.camel.wsdl_first.UnknownPersonFault fault =
                 new org.apache.camel.wsdl_first.UnknownPersonFault("Get the 
null value of person name", personFault);
             // Since camel has its own exception handler framework, we can't 
throw the exception to trigger it
-            // We just set the fault message in the exchange for camel-cxf 
component handling
+            // We just set the fault message in the exchange for camel-cxf 
component handling and return
             exchange.getFault().setBody(fault);
+            return;
         }
 
         name.value = "Bonjour";


Reply via email to