You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2010/06/28 09:03:53 UTC

svn commit: r958475 - in /camel/trunk/camel-core/src: main/java/org/apache/camel/processor/ test/java/org/apache/camel/processor/ test/java/org/apache/camel/processor/async/

Author: davsclaus
Date: Mon Jun 28 07:03:53 2010
New Revision: 958475

URL: http://svn.apache.org/viewvc?rev=958475&view=rev
Log:
CAMEL-2867: Fixed convertBodyTo accepting null bodies. CAMEL-2866: Fixed filter EIP.

Added:
    camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointTransformTest.java
      - copied, changed from r958464, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointCBRTest.java
Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/processor/ChoiceProcessor.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/processor/ConvertBodyProcessor.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DelegateAsyncProcessor.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DelegateProcessor.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ConvertBodyTest.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/ChoiceProcessor.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/ChoiceProcessor.java?rev=958475&r1=958474&r2=958475&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/ChoiceProcessor.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/ChoiceProcessor.java Mon Jun 28 07:03:53 2010
@@ -56,7 +56,7 @@ public class ChoiceProcessor extends Ser
             if (predicate != null && predicate.matches(exchange)) {
                 // process next will also take care (has not null test) if next was a stop().
                 // stop() has no processor to execute, and thus we will end in a NPE
-                return filterProcessor.process(exchange, callback);
+                return filterProcessor.processNext(exchange, callback);
             }
         }
         if (otherwise != null) {

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/ConvertBodyProcessor.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/ConvertBodyProcessor.java?rev=958475&r1=958474&r2=958475&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/ConvertBodyProcessor.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/ConvertBodyProcessor.java Mon Jun 28 07:03:53 2010
@@ -51,14 +51,18 @@ public class ConvertBodyProcessor implem
         if (charset != null) {
             exchange.setProperty(Exchange.CHARSET_NAME, charset);
         }
-        Object value = in.getMandatoryBody(type);
 
-        if (exchange.getPattern().isOutCapable()) {
-            Message out = exchange.getOut();
-            out.copyFrom(in);
-            out.setBody(value);
-        } else {
-            in.setBody(value);
+        // only convert if the is a body
+        if (in.getBody() != null) {
+            Object value = in.getMandatoryBody(type);
+
+            if (exchange.getPattern().isOutCapable()) {
+                Message out = exchange.getOut();
+                out.copyFrom(in);
+                out.setBody(value);
+            } else {
+                in.setBody(value);
+            }
         }
     }
 

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DelegateAsyncProcessor.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DelegateAsyncProcessor.java?rev=958475&r1=958474&r2=958475&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DelegateAsyncProcessor.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DelegateAsyncProcessor.java Mon Jun 28 07:03:53 2010
@@ -32,6 +32,9 @@ import org.apache.camel.util.ServiceHelp
 /**
  * A Delegate pattern which delegates processing to a nested {@link AsyncProcessor} which can
  * be useful for implementation inheritance when writing an {@link org.apache.camel.spi.Policy}
+ * <p/>
+ * <b>Important:</b> This implementation <b>does</b> support the asynchronous routing engine.
+ * If you are implementing a EIP pattern please use this as the delegate.
  *
  * @version $Revision$
  * @see org.apache.camel.processor.DelegateProcessor
@@ -78,7 +81,15 @@ public class DelegateAsyncProcessor exte
         ServiceHelper.stopServices(processor);
     }
 
+    public void process(Exchange exchange) throws Exception {
+        AsyncProcessorHelper.process(this, exchange);
+    }
+
     public boolean process(final Exchange exchange, final AsyncCallback callback) {
+        return processNext(exchange, callback);
+    }
+
+    protected boolean processNext(Exchange exchange, AsyncCallback callback) {
         if (processor == null) {
             // no processor then we are done
             callback.done(true);
@@ -87,10 +98,6 @@ public class DelegateAsyncProcessor exte
         return processor.process(exchange, callback);
     }
 
-    public void process(Exchange exchange) throws Exception {
-        AsyncProcessorHelper.process(this, exchange);
-    }
-
     public boolean hasNext() {
         return processor != null;
     }

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DelegateProcessor.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DelegateProcessor.java?rev=958475&r1=958474&r2=958475&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DelegateProcessor.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DelegateProcessor.java Mon Jun 28 07:03:53 2010
@@ -82,7 +82,10 @@ public class DelegateProcessor extends S
 
     /**
      * Proceed with the underlying delegated processor
+     *
+     * @deprecated will be removed in Camel 2.5
      */
+    @Deprecated
     public void proceed(Exchange exchange) throws Exception {
         processNext(exchange);
     }

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ConvertBodyTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ConvertBodyTest.java?rev=958475&r1=958474&r2=958475&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ConvertBodyTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ConvertBodyTest.java Mon Jun 28 07:03:53 2010
@@ -38,6 +38,16 @@ public class ConvertBodyTest extends Con
         assertMockEndpointsSatisfied();
     }
 
+    public void testConvertNullBody() throws Exception {
+        MockEndpoint result = getMockEndpoint("mock:result");
+        result.expectedMessageCount(1);
+        result.message(0).body().isNull();
+
+        template.sendBody("direct:start", null);
+
+        assertMockEndpointsSatisfied();
+    }
+
     public void testConvertFailed() throws Exception {
         MockEndpoint dead = getMockEndpoint("mock:dead");
         dead.expectedMessageCount(1);

Copied: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointTransformTest.java (from r958464, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointCBRTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointTransformTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointTransformTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointCBRTest.java&r1=958464&r2=958475&rev=958475&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointCBRTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointTransformTest.java Mon Jun 28 07:03:53 2010
@@ -24,7 +24,7 @@ import org.apache.camel.builder.RouteBui
 /**
  * @version $Revision$
  */
-public class AsyncEndpointCBRTest extends ContextTestSupport {
+public class AsyncEndpointTransformTest extends ContextTestSupport {
 
     private static String beforeThreadName;
     private static String afterThreadName;
@@ -52,22 +52,21 @@ public class AsyncEndpointCBRTest extend
                 from("direct:start")
                         .to("mock:before")
                         .to("log:before")
-                        .choice()
-                            .when(body().contains("Camel"))
-                                .process(new Processor() {
-                                    public void process(Exchange exchange) throws Exception {
-                                        beforeThreadName = Thread.currentThread().getName();
-                                    }
-                                })
-                                .to("async:Bye Camel")
-                                .process(new Processor() {
-                                    public void process(Exchange exchange) throws Exception {
-                                        afterThreadName = Thread.currentThread().getName();
-                                    }
-                                })
-                                .to("log:after")
-                                .to("mock:after")
-                            .end()
+                        .process(new Processor() {
+                            public void process(Exchange exchange) throws Exception {
+                                beforeThreadName = Thread.currentThread().getName();
+                            }
+                        })
+                        .to("async:Hi Camel")
+                        .transform(simple("Hello World"))
+                        .to("async:Bye Camel")
+                        .process(new Processor() {
+                            public void process(Exchange exchange) throws Exception {
+                                afterThreadName = Thread.currentThread().getName();
+                            }
+                        })
+                        .to("log:after")
+                        .to("mock:after")
                         .to("mock:result");
             }
         };