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"; }