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 2012/02/15 15:56:43 UTC

svn commit: r1244518 - in /camel/trunk: camel-core/src/main/java/org/apache/camel/builder/ camel-core/src/main/java/org/apache/camel/language/simple/ camel-core/src/test/java/org/apache/camel/language/simple/ components/camel-spring/src/test/java/org/a...

Author: davsclaus
Date: Wed Feb 15 14:56:42 2012
New Revision: 1244518

URL: http://svn.apache.org/viewvc?rev=1244518&view=rev
Log:
CAMEL-5005: Fixed NPE when empty expression evaluated by simple language.

Added:
    camel/trunk/components/camel-spring/src/test/java/org/apache/camel/language/SpringSimpleEmptyStringTest.java
      - copied, changed from r1244465, camel/trunk/components/camel-spring/src/test/java/org/apache/camel/language/SpringSimpleRegexTest.java
    camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/language/SpringSimpleEmptyStringTest.xml
      - copied, changed from r1244465, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/language/springSimpleRegexContext.xml
Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleExpressionParser.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimplePredicateParser.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java?rev=1244518&r1=1244517&r2=1244518&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java Wed Feb 15 14:56:42 2012
@@ -441,4 +441,24 @@ public final class PredicateBuilder {
         }
         return answer;
     }
+
+    /**
+     * A constant predicate.
+     *
+     * @param answer the constant matches
+     * @return a predicate that always returns the given answer.
+     */
+    public static Predicate constant(final boolean answer) {
+        return new Predicate() {
+            @Override
+            public boolean matches(Exchange exchange) {
+                return answer;
+            }
+
+            @Override
+            public String toString() {
+                return "" + answer;
+            }
+        };
+    }
 }

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleExpressionParser.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleExpressionParser.java?rev=1244518&r1=1244517&r2=1244518&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleExpressionParser.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleExpressionParser.java Wed Feb 15 14:56:42 2012
@@ -79,7 +79,8 @@ public class SimpleExpressionParser exte
         // create and return as a Camel expression
         List<Expression> expressions = createExpressions();
         if (expressions.isEmpty()) {
-            return null;
+            // return an empty string as response as there was nothing to parse
+            return ExpressionBuilder.constantExpression("");
         } else if (expressions.size() == 1) {
             return expressions.get(0);
         } else {

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java?rev=1244518&r1=1244517&r2=1244518&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java Wed Feb 15 14:56:42 2012
@@ -21,6 +21,7 @@ import org.apache.camel.IsSingleton;
 import org.apache.camel.Predicate;
 import org.apache.camel.builder.ExpressionBuilder;
 import org.apache.camel.spi.Language;
+import org.apache.camel.util.ObjectHelper;
 
 /**
  * A <a href="http://camel.apache.org/simple.html">simple language</a>
@@ -126,6 +127,8 @@ public class SimpleLanguage implements L
     }
 
     public Predicate createPredicate(String expression) {
+        ObjectHelper.notNull(expression, "expression");
+
         // trim the expression first
         expression = expression.trim();
         // support old simple language syntax
@@ -140,6 +143,8 @@ public class SimpleLanguage implements L
     }
 
     public Expression createExpression(String expression) {
+        ObjectHelper.notNull(expression, "expression");
+
         // trim the expression first
         expression = expression.trim();
         // support old simple language syntax

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimplePredicateParser.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimplePredicateParser.java?rev=1244518&r1=1244517&r2=1244518&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimplePredicateParser.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimplePredicateParser.java Wed Feb 15 14:56:42 2012
@@ -112,7 +112,8 @@ public class SimplePredicateParser exten
         // create and return as a Camel predicate
         List<Predicate> predicates = createPredicates();
         if (predicates.isEmpty()) {
-            return null;
+            // return a false predicate as response as there was nothing to parse
+            return PredicateBuilder.constant(false);
         } else if (predicates.size() == 1) {
             return predicates.get(0);
         } else {

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java?rev=1244518&r1=1244517&r2=1244518&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java Wed Feb 15 14:56:42 2012
@@ -75,6 +75,26 @@ public class SimpleTest extends Language
         assertExpression("Hello World", "Hello World");
     }
 
+    public void testEmptyExpression() throws Exception {
+        assertExpression("", "");
+        assertExpression(" ", "");
+        try {
+            assertExpression(null, null);
+            fail("Should have thrown exception");
+        } catch (IllegalArgumentException e) {
+            assertEquals("expression must be specified", e.getMessage());
+        }
+
+        assertPredicate("", false);
+        assertPredicate(" ", false);
+        try {
+            assertPredicate(null, false);
+            fail("Should have thrown exception");
+        } catch (IllegalArgumentException e) {
+            assertEquals("expression must be specified", e.getMessage());
+        }
+    }
+
     public void testBodyExpression() throws Exception {
         Expression exp = SimpleLanguage.simple("${body}");
         assertNotNull(exp);

Copied: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/language/SpringSimpleEmptyStringTest.java (from r1244465, camel/trunk/components/camel-spring/src/test/java/org/apache/camel/language/SpringSimpleRegexTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/language/SpringSimpleEmptyStringTest.java?p2=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/language/SpringSimpleEmptyStringTest.java&p1=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/language/SpringSimpleRegexTest.java&r1=1244465&r2=1244518&rev=1244518&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/language/SpringSimpleRegexTest.java (original)
+++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/language/SpringSimpleEmptyStringTest.java Wed Feb 15 14:56:42 2012
@@ -20,19 +20,19 @@ import org.apache.camel.spring.SpringTes
 import org.springframework.context.support.AbstractXmlApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
-public class SpringSimpleRegexTest extends SpringTestSupport {
+public class SpringSimpleEmptyStringTest extends SpringTestSupport {
 
     @Override
     protected AbstractXmlApplicationContext createApplicationContext() {
-        return new ClassPathXmlApplicationContext("org/apache/camel/language/springSimpleRegexContext.xml");
+        return new ClassPathXmlApplicationContext("org/apache/camel/language/SpringSimpleEmptyStringTest.xml");
     }
     
-    public void testSimpleRegex() {
-        String result = template.requestBody("direct:start", "Something is wrong", String.class);
-        assertEquals("Let's keep looking.", result);
+    public void testSimpleEmptyString() throws Exception {
+        getMockEndpoint("mock:result").expectedBodiesReceived("");
 
-        result = template.requestBody("direct:start", "12.34.5678", String.class);
-        assertEquals("Found the result.", result);
+        template.sendBody("direct:start", "Hello World");
+
+        assertMockEndpointsSatisfied();
     }
 
 }

Copied: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/language/SpringSimpleEmptyStringTest.xml (from r1244465, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/language/springSimpleRegexContext.xml)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/language/SpringSimpleEmptyStringTest.xml?p2=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/language/SpringSimpleEmptyStringTest.xml&p1=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/language/springSimpleRegexContext.xml&r1=1244465&r2=1244518&rev=1244518&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/language/springSimpleRegexContext.xml (original)
+++ camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/language/SpringSimpleEmptyStringTest.xml Wed Feb 15 14:56:42 2012
@@ -24,20 +24,11 @@
 
   <camelContext xmlns="http://camel.apache.org/schema/spring">
       <route>
-	      <from uri="direct:start" />
-	      <choice>
-	          <when>
-	              <simple>${body} regex '^\d{2}\.\d{2}\.\d{4}$'</simple>
-	                  <setBody>
-	                      <constant>Found the result.</constant>
-	                  </setBody>
-	           </when>
-	           <otherwise>
-	              <setBody>
-	                  <constant>Let's keep looking.</constant>
-	              </setBody>
-	           </otherwise>
-	      </choice>
+	      <from uri="direct:start"/>
+        <setBody>
+          <simple></simple>
+        </setBody>
+        <to uri="mock:result"/>
       </route>
   </camelContext>