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

Reply via email to