This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push: new 24ae4eb CAMEL-15704: camel-csimple - Compiled simple language. 24ae4eb is described below commit 24ae4eb0a472b3779cc6e8ab0a9253c8f4b1c803 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Thu Nov 26 19:06:55 2020 +0100 CAMEL-15704: camel-csimple - Compiled simple language. --- .../language/csimple/joor/OriginalSimpleTest.java | 35 ++++++++++------------ .../language/simple/SimpleExpressionParser.java | 4 +++ .../language/simple/SimplePredicateParser.java | 12 +++++++- 3 files changed, 31 insertions(+), 20 deletions(-) diff --git a/components/camel-csimple-joor/src/test/java/org/apache/camel/language/csimple/joor/OriginalSimpleTest.java b/components/camel-csimple-joor/src/test/java/org/apache/camel/language/csimple/joor/OriginalSimpleTest.java index 496d68d..42333d2 100644 --- a/components/camel-csimple-joor/src/test/java/org/apache/camel/language/csimple/joor/OriginalSimpleTest.java +++ b/components/camel-csimple-joor/src/test/java/org/apache/camel/language/csimple/joor/OriginalSimpleTest.java @@ -29,7 +29,6 @@ import java.util.TimeZone; import org.apache.camel.BindToRegistry; import org.apache.camel.CamelAuthorizationException; import org.apache.camel.CamelContext; -import org.apache.camel.CamelExecutionException; import org.apache.camel.Exchange; import org.apache.camel.ExchangePattern; import org.apache.camel.Expression; @@ -48,6 +47,7 @@ import org.apache.camel.util.InetAddressUtil; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; + import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf; import static org.apache.camel.test.junit5.TestSupport.getJavaMajorVersion; import static org.junit.jupiter.api.Assertions.*; @@ -78,12 +78,12 @@ public class OriginalSimpleTest extends LanguageTestSupport { assertFalse(predicate.matches(exchange)); Expression expression = context.resolveLanguage("csimple").createExpression("${body}"); - assertEquals("<hello id=\"m123\">world!</hello>", expression.evaluate(exchange, String.class)); + assertEquals("<hello id='m123'>world!</hello>", expression.evaluate(exchange, String.class)); expression = context.resolveLanguage("csimple").createExpression("${body}"); - assertEquals("<hello id=\"m123\">world!</hello>", expression.evaluate(exchange, String.class)); + assertEquals("<hello id='m123'>world!</hello>", expression.evaluate(exchange, String.class)); expression = context.resolveLanguage("csimple").createExpression("${body}"); - assertEquals("<hello id=\"m123\">world!</hello>", expression.evaluate(exchange, String.class)); + assertEquals("<hello id='m123'>world!</hello>", expression.evaluate(exchange, String.class)); predicate = context.resolveLanguage("csimple").createPredicate("${header.bar} == 123"); assertEquals(Boolean.TRUE, predicate.matches(exchange)); @@ -226,8 +226,8 @@ public class OriginalSimpleTest extends LanguageTestSupport { public void testSimpleExpressions() throws Exception { assertExpression("${exchangeId}", exchange.getExchangeId()); assertExpression("${id}", exchange.getIn().getMessageId()); - assertExpression("${body}", "<hello id=\"m123\">world!</hello>"); - assertExpression("${in.body}", "<hello id=\"m123\">world!</hello>"); + assertExpression("${body}", "<hello id='m123'>world!</hello>"); + assertExpression("${in.body}", "<hello id='m123'>world!</hello>"); assertExpression("${in.header.foo}", "abc"); assertExpression("${in.headers.foo}", "abc"); assertExpression("${header.foo}", "abc"); @@ -546,9 +546,9 @@ public class OriginalSimpleTest extends LanguageTestSupport { try { assertExpression("${exchangeProperty.foobar[bar}", null); fail("Should have thrown an exception"); - } catch (ExpressionIllegalSyntaxException e) { + } catch (Exception e) { assertTrue(e.getMessage() - .startsWith("Valid syntax: ${exchangeProperty.OGNL} was: exchangeProperty.foobar[bar at location 0")); + .startsWith("Valid syntax: ${exchangePropertyAs.OGNL} was: exchangeProperty.foobar[bar at location 0")); } } @@ -737,8 +737,8 @@ public class OriginalSimpleTest extends LanguageTestSupport { @Test public void testBodyAs() throws Exception { - assertExpression("${bodyAs(String)}", "<hello id=\"m123\">world!</hello>"); - assertExpression("${bodyAs(\"String\")}", "<hello id=\"m123\">world!</hello>"); + assertExpression("${bodyAs(String)}", "<hello id='m123'>world!</hello>"); + assertExpression("${bodyAs(\"String\")}", "<hello id='m123'>world!</hello>"); exchange.getIn().setBody(null); assertExpression("${bodyAs(\"String\")}", null); @@ -751,8 +751,8 @@ public class OriginalSimpleTest extends LanguageTestSupport { try { assertExpression("${bodyAs(XXX)}", 456); fail("Should have thrown an exception"); - } catch (CamelExecutionException e) { - assertIsInstanceOf(ClassNotFoundException.class, e.getCause()); + } catch (JoorCSimpleCompilationException e) { + // expected } } @@ -1665,9 +1665,6 @@ public class OriginalSimpleTest extends LanguageTestSupport { public void testEscape() throws Exception { exchange.getIn().setBody("Something"); - // slash foo - assertExpression("\\foo", "\\foo"); - assertExpression("\\n${body}", "\nSomething"); assertExpression("\\t${body}", "\tSomething"); assertExpression("\\r${body}", "\rSomething"); @@ -1861,8 +1858,8 @@ public class OriginalSimpleTest extends LanguageTestSupport { try { assertExpression("${random(10,21,30)}", null); fail("Should have thrown exception"); - } catch (Exception e) { - assertEquals("Valid syntax: ${random(min,max)} or ${random(max)} was: random(10,21,30)", e.getCause().getMessage()); + } catch (JoorCSimpleCompilationException e) { + // expected } try { assertExpression("${random()}", null); @@ -1886,7 +1883,7 @@ public class OriginalSimpleTest extends LanguageTestSupport { assertEquals(2, data.size()); - Expression expression = context.resolveLanguage("csimple").createExpression("${body.remove(\"A\")}"); + Expression expression = context.resolveLanguage("csimple").createExpression("${bodyAs(List).remove(\"A\")}"); expression.evaluate(exchange, Object.class); assertEquals(1, data.size()); @@ -1902,7 +1899,7 @@ public class OriginalSimpleTest extends LanguageTestSupport { assertEquals(2, data.size()); - Expression expression = context.resolveLanguage("csimple").createExpression("${body.remove(0)}"); + Expression expression = context.resolveLanguage("csimple").createExpression("${bodyAs(List).remove(0)}"); expression.evaluate(exchange, Object.class); assertEquals(1, data.size()); diff --git a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/SimpleExpressionParser.java b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/SimpleExpressionParser.java index a9967da..949856a 100644 --- a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/SimpleExpressionParser.java +++ b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/SimpleExpressionParser.java @@ -222,6 +222,10 @@ public class SimpleExpressionParser extends BaseSimpleParser { if (node instanceof LiteralNode) { exp = StringHelper.removeLeadingAndEndingQuotes(exp); sb.append("\""); + // \n \t \r should be escaped + exp = exp.replaceAll("\n", "\\\\n"); + exp = exp.replaceAll("\t", "\\\\t"); + exp = exp.replaceAll("\r", "\\\\r"); sb.append(exp); sb.append("\""); } else { diff --git a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/SimplePredicateParser.java b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/SimplePredicateParser.java index a675e85..a1d759d 100644 --- a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/SimplePredicateParser.java +++ b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/SimplePredicateParser.java @@ -51,6 +51,7 @@ import org.apache.camel.language.simple.types.SimpleToken; import org.apache.camel.language.simple.types.TokenType; import org.apache.camel.support.ExpressionToPredicateAdapter; import org.apache.camel.support.builder.PredicateBuilder; +import org.apache.camel.util.StringHelper; import static org.apache.camel.support.ObjectHelper.isFloatingNumber; import static org.apache.camel.support.ObjectHelper.isNumber; @@ -168,7 +169,16 @@ public class SimplePredicateParser extends BaseSimpleParser { StringBuilder sb = new StringBuilder(); for (SimpleNode node : nodes) { String exp = node.createCode(expression); - if (exp != null) { + if (node instanceof LiteralNode) { + exp = StringHelper.removeLeadingAndEndingQuotes(exp); + sb.append("\""); + // \n \t \r should be escaped + exp = exp.replaceAll("\n", "\\\\n"); + exp = exp.replaceAll("\t", "\\\\t"); + exp = exp.replaceAll("\r", "\\\\r"); + sb.append(exp); + sb.append("\""); + } else { sb.append(exp); } }