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>