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/05/20 14:16:52 UTC
svn commit: r1340690 - in /camel/branches/camel-2.9.x: ./
camel-core/src/main/java/org/apache/camel/language/simple/
camel-core/src/test/java/org/apache/camel/language/simple/
Author: davsclaus
Date: Sun May 20 12:16:52 2012
New Revision: 1340690
URL: http://svn.apache.org/viewvc?rev=1340690&view=rev
Log:
CAMEL-5262: Relaxed syntax check in simple langauge in terms of balancing function tokens.
Modified:
camel/branches/camel-2.9.x/ (props changed)
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/SimpleExpressionParser.java
camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserExpressionInvalidTest.java
camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
Propchange: camel/branches/camel-2.9.x/
------------------------------------------------------------------------------
Merged /camel/trunk:r1340689
Propchange: camel/branches/camel-2.9.x/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Modified: camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/SimpleExpressionParser.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/SimpleExpressionParser.java?rev=1340690&r1=1340689&r2=1340690&view=diff
==============================================================================
--- camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/SimpleExpressionParser.java (original)
+++ camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/SimpleExpressionParser.java Sun May 20 12:16:52 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/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserExpressionInvalidTest.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserExpressionInvalidTest.java?rev=1340690&r1=1340689&r2=1340690&view=diff
==============================================================================
--- camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserExpressionInvalidTest.java (original)
+++ camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserExpressionInvalidTest.java Sun May 20 12:16:52 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/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java?rev=1340690&r1=1340689&r2=1340690&view=diff
==============================================================================
--- camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java (original)
+++ camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java Sun May 20 12:16:52 2012
@@ -1067,6 +1067,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";
}