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/05/20 08:35:54 UTC

svn commit: r946538 - in /camel/trunk: camel-core/src/main/java/org/apache/camel/model/ camel-core/src/main/java/org/apache/camel/processor/validation/ camel-core/src/main/resources/org/apache/camel/model/ camel-core/src/test/java/org/apache/camel/proc...

Author: davsclaus
Date: Thu May 20 06:35:54 2010
New Revision: 946538

URL: http://svn.apache.org/viewvc?rev=946538&view=rev
Log:
CAMEL-1537: Validate EIP. Polished patch a bit and added test to Spring XML.

Added:
    camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ValidateSimpleTest.java
      - copied, changed from r946531, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ValidateRegExpTest.java
    camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringValidateSimpleTest.java
      - copied, changed from r946531, camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringConvertBodyTest.java
    camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/ValidateSimpleTest.xml
      - copied, changed from r946531, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/convertBody.xml
Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/model/ValidateDefinition.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/processor/validation/PredicateValidatingProcessor.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/processor/validation/PredicateValidationException.java
    camel/trunk/camel-core/src/main/resources/org/apache/camel/model/jaxb.index
    camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ValidateRegExpTest.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java?rev=946538&r1=946537&r2=946538&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java Thu May 20 06:35:54 2010
@@ -1112,19 +1112,47 @@ public abstract class ProcessorDefinitio
     
     /**
      * Creates a validation expression which only if it is <tt>true</tt> then the
-     * exchange is forwarded to the destination. Otherwise a 
-     * PredicateExpValidationException is thrown.
+     * exchange is forwarded to the destination.
+     * Otherwise a {@link org.apache.camel.processor.validation.PredicateValidationException} is thrown.
      *
-     * @param builder the value builder
-     * @return the validate definition
+     * @param expression  the expression
+     * @return the builder
+     */
+    public ValidateDefinition validate(Expression expression) {
+        ValidateDefinition answer = new ValidateDefinition();
+        answer.setExpression(new ExpressionDefinition(expression));
+        addOutput(answer);
+        return answer;
+    }
+
+    /**
+     * Creates a validation expression which only if it is <tt>true</tt> then the
+     * exchange is forwarded to the destination.
+     * Otherwise a {@link org.apache.camel.processor.validation.PredicateValidationException} is thrown.
+     *
+     * @param predicate  the predicate
+     * @return the builder
      */
-    public ValidateDefinition validate(ValueBuilder builder) {
-        ValidateDefinition validate = new ValidateDefinition(builder);
-        addOutput(validate);
-        return validate;
+    public ValidateDefinition validate(Predicate predicate) {
+        ValidateDefinition answer = new ValidateDefinition();
+        answer.setExpression(new ExpressionDefinition(predicate));
+        addOutput(answer);
+        return answer;
     }
 
     /**
+     * Creates a validation expression which only if it is <tt>true</tt> then the
+     * exchange is forwarded to the destination.
+     * Otherwise a {@link org.apache.camel.processor.validation.PredicateValidationException} is thrown.
+     *
+     * @return the builder
+     */
+    public ExpressionClause<ValidateDefinition> validate() {
+        ValidateDefinition answer = new ValidateDefinition();
+        addOutput(answer);
+        return ExpressionClause.createAndSetExpression(answer);
+    }
+    /**
      * <a href="http://camel.apache.org/load-balancer.html">Load Balancer EIP:</a>
      * Creates a loadbalance
      *

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/model/ValidateDefinition.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ValidateDefinition.java?rev=946538&r1=946537&r2=946538&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/model/ValidateDefinition.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/model/ValidateDefinition.java Thu May 20 06:35:54 2010
@@ -16,18 +16,11 @@
  */
 package org.apache.camel.model;
 
-import java.util.Comparator;
-
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
 
 import org.apache.camel.Processor;
-import org.apache.camel.builder.ExpressionClause;
-import org.apache.camel.builder.PredicateBuilder;
-import org.apache.camel.builder.ValueBuilder;
-import org.apache.camel.model.language.ExpressionDefinition;
 import org.apache.camel.processor.validation.PredicateValidatingProcessor;
 import org.apache.camel.spi.RouteContext;
 
@@ -39,27 +32,11 @@ import org.apache.camel.spi.RouteContext
 @XmlRootElement(name = "validate")
 @XmlAccessorType(XmlAccessType.FIELD)
 public class ValidateDefinition extends ExpressionNode {
-    @XmlAttribute(required = false)
-    private String regexExpression;
-    
+
     public ValidateDefinition() {
-        // TODO need to find a way to set the ValueBuilder from XML
         super();
     }
     
-    public ValidateDefinition(ValueBuilder builder) {
-        super(builder);
-    }
-    
-    public void setRegexExpression(String regex) {
-        this.regexExpression = regex;
-        regex(regex);
-    }
-
-    public String getComparatorRef() {
-        return regexExpression;
-    }
-    
     @Override
     public String toString() {
         return "Validate[" + getExpression() + " -> " + getOutputs() + "]";
@@ -76,27 +53,5 @@ public class ValidateDefinition extends 
         Processor childProcessor = routeContext.createProcessor(this);
         return new PredicateValidatingProcessor(getExpression().createPredicate(routeContext), childProcessor);
     }
-    
-    // Fluent API
-    //-------------------------------------------------------------------------
-    
-    /**
-     * Sets the regular expression
-     *
-     * @param regex  the regeular expression
-     * @return the ValidateDefinition
-     */
-    public ValidateDefinition regex(String regex) {
-        setExpression(new ExpressionDefinition(PredicateBuilder.regex(getExpression(), regex)));
-        return this;
-    }
-    
-    
-    /**
-     * Set the expression that this FilterType will use
-     * @return the builder
-     */
-    public ExpressionClause<ValidateDefinition> expression() {
-        return ExpressionClause.createAndSetExpression(this);
-    }
+
 }
\ No newline at end of file

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/validation/PredicateValidatingProcessor.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/validation/PredicateValidatingProcessor.java?rev=946538&r1=946537&r2=946538&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/validation/PredicateValidatingProcessor.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/validation/PredicateValidatingProcessor.java Thu May 20 06:35:54 2010
@@ -45,7 +45,7 @@ public class PredicateValidatingProcesso
         boolean matches = predicate.matches(exchange);
 
         if (LOG.isDebugEnabled()) {
-            LOG.debug("Validation " + (matches ? "succeed " : "failed ") + "for " + exchange + " and Predicate[" + predicate + "]");
+            LOG.debug("Validation " + (matches ? "succeed " : "failed ") + "for " + exchange + " with Predicate[" + predicate + "]");
         }
 
         if (matches) {
@@ -57,11 +57,11 @@ public class PredicateValidatingProcesso
     
     @Override
     public String toString() {
-        return "validate[if: " + predicate + " matches]";
+        return "validate[" + predicate + "]";
     }
 
     public String getTraceLabel() {
-        return toString();
+        return "validate";
     }
     
     public Predicate getPredicate() {

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/validation/PredicateValidationException.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/validation/PredicateValidationException.java?rev=946538&r1=946537&r2=946538&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/validation/PredicateValidationException.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/validation/PredicateValidationException.java Thu May 20 06:35:54 2010
@@ -40,7 +40,6 @@ public class PredicateValidationExceptio
         StringBuilder builder = new StringBuilder("Validation failed for Predicate[");
         builder.append(predicate.toString());
         builder.append("]");
-
         return builder.toString();
     }
 

Modified: camel/trunk/camel-core/src/main/resources/org/apache/camel/model/jaxb.index
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/resources/org/apache/camel/model/jaxb.index?rev=946538&r1=946537&r2=946538&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/resources/org/apache/camel/model/jaxb.index (original)
+++ camel/trunk/camel-core/src/main/resources/org/apache/camel/model/jaxb.index Thu May 20 06:35:54 2010
@@ -79,5 +79,6 @@ TransactedDefinition
 TransformDefinition
 TryDefinition
 UnmarshalDefinition
+ValidateDefinition
 WhenDefinition
 WireTapDefinition

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ValidateRegExpTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ValidateRegExpTest.java?rev=946538&r1=946537&r2=946538&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ValidateRegExpTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ValidateRegExpTest.java Thu May 20 06:35:54 2010
@@ -44,7 +44,7 @@ public class ValidateRegExpTest extends 
 
         template.sendBody(startEndpoint, "01.01.2010");
         
-        resultEndpoint.assertIsSatisfied();
+        assertMockEndpointsSatisfied();
     }
 
     public void testSendNotMatchingMessage() throws Exception {
@@ -55,12 +55,12 @@ public class ValidateRegExpTest extends 
             fail("CamelExecutionException expected");
         } catch (CamelExecutionException e) {
             // expected
-            assertTrue(e.getCause() instanceof PredicateValidationException);
-            String message = ((PredicateValidationException) e.getCause()).getMessage();
-            assertEquals("Validation failed for Predicate[{bodyAs[java.lang.String]}.matches('^\\d{2}\\.\\d{2}\\.\\d{4}$')]. Exchange[Message: 1.1.2010]", message);
+            assertIsInstanceOf(PredicateValidationException.class, e.getCause());
+            assertEquals("Validation failed for Predicate[bodyAs[java.lang.String].matches('^\\d{2}\\.\\d{2}\\.\\d{4}$')]."
+                + " Exchange[Message: 1.1.2010]", e.getCause().getMessage());
         }
 
-        resultEndpoint.assertIsSatisfied();
+        assertMockEndpointsSatisfied();
     }
 
 
@@ -68,7 +68,7 @@ public class ValidateRegExpTest extends 
         return new RouteBuilder() {
             public void configure() {
                 from("direct:start")
-                    .validate(body(String.class)).regex("^\\d{2}\\.\\d{2}\\.\\d{4}$")
+                    .validate(body(String.class).regex("^\\d{2}\\.\\d{2}\\.\\d{4}$"))
                     .to("mock:result");
             }
         };

Copied: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ValidateSimpleTest.java (from r946531, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ValidateRegExpTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ValidateSimpleTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ValidateSimpleTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ValidateRegExpTest.java&r1=946531&r2=946538&rev=946538&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ValidateRegExpTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ValidateSimpleTest.java Thu May 20 06:35:54 2010
@@ -26,15 +26,15 @@ import org.apache.camel.processor.valida
 /**
  * @version $Revision$
  */
-public class ValidateRegExpTest extends ContextTestSupport {
-    
+public class ValidateSimpleTest extends ContextTestSupport {
+
     private Endpoint startEndpoint;
     private MockEndpoint resultEndpoint;
-    
+
     @Override
     protected void setUp() throws Exception {
         super.setUp();
-        
+
         startEndpoint = resolveMandatoryEndpoint("direct:start", Endpoint.class);
         resultEndpoint = resolveMandatoryEndpoint("mock:result", MockEndpoint.class);
     }
@@ -42,25 +42,25 @@ public class ValidateRegExpTest extends 
     public void testSendMatchingMessage() throws Exception {
         resultEndpoint.expectedMessageCount(1);
 
-        template.sendBody(startEndpoint, "01.01.2010");
-        
-        resultEndpoint.assertIsSatisfied();
+        template.sendBody(startEndpoint, "Hello Camel");
+
+        assertMockEndpointsSatisfied();
     }
 
     public void testSendNotMatchingMessage() throws Exception {
         resultEndpoint.expectedMessageCount(0);
 
         try {
-            template.sendBody(startEndpoint, "1.1.2010");
+            template.sendBody(startEndpoint, "Bye World");
             fail("CamelExecutionException expected");
         } catch (CamelExecutionException e) {
             // expected
-            assertTrue(e.getCause() instanceof PredicateValidationException);
-            String message = ((PredicateValidationException) e.getCause()).getMessage();
-            assertEquals("Validation failed for Predicate[{bodyAs[java.lang.String]}.matches('^\\d{2}\\.\\d{2}\\.\\d{4}$')]. Exchange[Message: 1.1.2010]", message);
+            assertIsInstanceOf(PredicateValidationException.class, e.getCause());
+            assertEquals("Validation failed for Predicate[body contains Camel]."
+                + " Exchange[Message: Bye World]", e.getCause().getMessage());
         }
 
-        resultEndpoint.assertIsSatisfied();
+        assertMockEndpointsSatisfied();
     }
 
 
@@ -68,7 +68,7 @@ public class ValidateRegExpTest extends 
         return new RouteBuilder() {
             public void configure() {
                 from("direct:start")
-                    .validate(body(String.class)).regex("^\\d{2}\\.\\d{2}\\.\\d{4}$")
+                    .validate().simple("${body} contains 'Camel'")
                     .to("mock:result");
             }
         };

Copied: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringValidateSimpleTest.java (from r946531, camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringConvertBodyTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringValidateSimpleTest.java?p2=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringValidateSimpleTest.java&p1=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringConvertBodyTest.java&r1=946531&r2=946538&rev=946538&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringConvertBodyTest.java (original)
+++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringValidateSimpleTest.java Thu May 20 06:35:54 2010
@@ -17,12 +17,13 @@
 package org.apache.camel.spring.processor;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.processor.ConvertBodyTest;
+import org.apache.camel.processor.ValidateSimpleTest;
+
 import static org.apache.camel.spring.processor.SpringTestHelper.createSpringCamelContext;
 
-public class SpringConvertBodyTest extends ConvertBodyTest {
+public class SpringValidateSimpleTest extends ValidateSimpleTest {
+
     protected CamelContext createCamelContext() throws Exception {
-        return createSpringCamelContext(this,
-                "org/apache/camel/spring/processor/convertBody.xml");
+        return createSpringCamelContext(this, "org/apache/camel/spring/processor/ValidateSimpleTest.xml");
     }
-}
+}
\ No newline at end of file

Copied: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/ValidateSimpleTest.xml (from r946531, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/convertBody.xml)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/ValidateSimpleTest.xml?p2=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/ValidateSimpleTest.xml&p1=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/convertBody.xml&r1=946531&r2=946538&rev=946538&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/convertBody.xml (original)
+++ camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/ValidateSimpleTest.xml Thu May 20 06:35:54 2010
@@ -22,49 +22,16 @@
        http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
     ">
 
-    <!-- START SNIPPET: example -->
     <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
 
         <route>
             <from uri="direct:start"/>
-            <convertBodyTo type="java.lang.Integer"/>
-            <to uri="mock:result"/>
-        </route>
-
-        <route errorHandlerRef="deadLetterErrorHandler">
-            <from uri="direct:invalid"/>
-            <convertBodyTo type="java.util.Date"/>
-            <to uri="mock:result"/>
-        </route>
-
-        <route>
-            <from uri="direct:charset"/>
-            <convertBodyTo type="java.lang.byte[]" charset="iso-8859-1"/>
-            <to uri="mock:result"/>
-        </route>
-
-        <route>
-            <from uri="direct:charset2"/>
-            <convertBodyTo type="java.lang.byte[]" charset="utf-16"/>
-            <to uri="mock:result"/>
-        </route>
-        
-        <route>
-            <from uri="direct:charset3"/>
-            <convertBodyTo type="java.lang.String" charset="utf-16"/>
+            <validate>
+                <simple>${body} contains 'Camel'</simple>
+            </validate>
             <to uri="mock:result"/>
         </route>
 
     </camelContext>
 
-    <bean id="deadLetterErrorHandler" class="org.apache.camel.builder.DeadLetterChannelBuilder">
-        <property name="deadLetterUri" value="mock:dead"/>
-        <property name="redeliveryPolicy" ref="redeliveryPolicy"/>
-        <property name="handled" value="false"/>
-    </bean>
-
-    <bean id="redeliveryPolicy" class="org.apache.camel.processor.RedeliveryPolicy">
-        <property name="maximumRedeliveries" value="0"/>
-    </bean>
-    <!-- END SNIPPET: example -->
 </beans>