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 <[email protected]>
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);
}
}