Author: davsclaus
Date: Sun May 20 12:14:27 2012
New Revision: 1340689
URL: http://svn.apache.org/viewvc?rev=1340689&view=rev
Log:
CAMEL-5262: Relaxed syntax check in simple langauge in terms of balancing
function tokens.
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleExpressionParser.java
camel/trunk/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserExpressionInvalidTest.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/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=1340689&r1=1340688&r2=1340689&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
Sun May 20 12:14:27 2012
@@ -18,6 +18,7 @@ package org.apache.camel.language.simple
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
import org.apache.camel.Expression;
import org.apache.camel.builder.ExpressionBuilder;
@@ -92,6 +93,9 @@ public class SimpleExpressionParser exte
protected void parseAndCreateAstModel() {
// we loop the tokens and create a sequence of ast nodes
+ // counter to keep track of number of functions in the tokens
+ AtomicInteger functions = new AtomicInteger();
+
LiteralNode imageToken = null;
for (SimpleToken token : tokens) {
// break if eol
@@ -100,7 +104,7 @@ public class SimpleExpressionParser exte
}
// create a node from the token
- SimpleNode node = createNode(token);
+ SimpleNode node = createNode(token, functions);
if (node != null) {
// a new token was created so the current image token need to
be added first
if (imageToken != null) {
@@ -127,11 +131,15 @@ public class SimpleExpressionParser exte
}
}
- private SimpleNode createNode(SimpleToken token) {
+ private SimpleNode createNode(SimpleToken token, AtomicInteger functions) {
// expression only support functions and unary operators
if (token.getType().isFunctionStart()) {
+ // starting a new function
+ functions.incrementAndGet();
return new SimpleFunctionStart(token);
- } else if (token.getType().isFunctionEnd()) {
+ } else if (functions.get() > 0 && token.getType().isFunctionEnd()) {
+ // there must be a start function already, to let this be a end
function
+ functions.decrementAndGet();
return new SimpleFunctionEnd(token);
} else if (token.getType().isUnary()) {
return new UnaryExpression(token);
Modified:
camel/trunk/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserExpressionInvalidTest.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserExpressionInvalidTest.java?rev=1340689&r1=1340688&r2=1340689&view=diff
==============================================================================
---
camel/trunk/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserExpressionInvalidTest.java
(original)
+++
camel/trunk/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserExpressionInvalidTest.java
Sun May 20 12:14:27 2012
@@ -75,34 +75,4 @@ public class SimpleParserExpressionInval
}
}
- public void testNoStartFunction() throws Exception {
- SimpleExpressionParser parser = new SimpleExpressionParser("Hello
{body}");
- try {
- parser.parseExpression();
- fail("Should thrown exception");
- } catch (SimpleIllegalSyntaxException e) {
- assertEquals(11, e.getIndex());
- }
- }
-
- public void testNoStartFunction2() throws Exception {
- SimpleExpressionParser parser = new SimpleExpressionParser("Hello
body}");
- try {
- parser.parseExpression();
- fail("Should thrown exception");
- } catch (SimpleIllegalSyntaxException e) {
- assertEquals(10, e.getIndex());
- }
- }
-
- public void testPropertyPlaceholderSyntax() throws Exception {
- SimpleExpressionParser parser = new
SimpleExpressionParser("{{myserver}}/${header.myapp}");
- try {
- parser.parseExpression();
- fail("Should thrown exception");
- } catch (SimpleIllegalSyntaxException e) {
- assertEquals(10, e.getIndex());
- }
- }
-
}
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=1340689&r1=1340688&r2=1340689&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
Sun May 20 12:14:27 2012
@@ -1091,6 +1091,23 @@ public class SimpleTest extends Language
assertExpression("foo\\${header.foo}", "foo\\abc");
}
+ public void testJSonLike() throws Exception {
+ exchange.getIn().setBody("Something");
+
+ assertExpression("{\n\"data\": \"${body}\"\n}", "{\n\"data\":
\"Something\"\n}");
+ }
+
+ public void testFunctionEnds() throws Exception {
+ exchange.getIn().setBody("Something");
+
+ assertExpression("{{", "{{");
+ assertExpression("}}", "}}");
+ assertExpression("{{}}", "{{}}");
+ assertExpression("{{foo}}", "{{foo}}");
+ assertExpression("{{${body}}}", "{{Something}}");
+ assertExpression("{{${body}-${body}}}", "{{Something-Something}}");
+ }
+
protected String getLanguageName() {
return "simple";
}