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 6c3d567 CAMEL-15704: camel-csimple - Compiled simple language.
6c3d567 is described below
commit 6c3d5671945d1034e94d4b12aa02f2de8f2552b1
Author: Claus Ibsen <[email protected]>
AuthorDate: Thu Dec 3 20:06:34 2020 +0100
CAMEL-15704: camel-csimple - Compiled simple language.
---
.../language/csimple/joor/OriginalSimpleTest.java | 17 +++++++----
.../simple/ast/SimpleFunctionExpression.java | 5 ++++
.../java/org/apache/camel/util/OgnlHelperTest.java | 9 ++++++
.../java/org/apache/camel/util/OgnlHelper.java | 34 ++++++++++++++++++++++
4 files changed, 60 insertions(+), 5 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 f18b8ee..f30184f 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
@@ -1583,13 +1583,12 @@ public class OriginalSimpleTest extends
LanguageTestSupport {
public void testBodyOgnlSpaces() throws Exception {
exchange.getIn().setBody("Hello World");
- // no quotes, which is discouraged to use
- // TODO: single quotes as double quotes
- // assertExpression("${bodyAs(String).compareTo('Hello World')}", 0);
-
+ assertExpression("${bodyAs(String).compareTo('Hello World')}", 0);
assertExpression("${bodyAs(String).compareTo(\"Hello World\")}", 0);
+
+ assertExpression("${bodyAs(String).compareTo('Hello World')}", 0);
assertExpression("${bodyAs(String).compareTo(${bodyAs(String)})}", 0);
- assertExpression("${bodyAs(String).compareTo(\"foo\")}", "Hello
World".compareTo("foo"));
+ assertExpression("${bodyAs(String).compareTo('foo')}", "Hello
World".compareTo("foo"));
assertExpression("${bodyAs(String).compareTo( \"Hello World\" )}", 0);
assertExpression("${bodyAs(String).compareTo( ${bodyAs(String)} )}",
0);
@@ -1597,6 +1596,14 @@ public class OriginalSimpleTest extends
LanguageTestSupport {
}
@Test
+ public void testBodySingleQuote() throws Exception {
+ exchange.getIn().setBody("It's a great World");
+
+ assertExpression("${bodyAs(String).compareTo(\"It's a great
World\")}", 0);
+ assertExpression("${bodyAs(String).compareTo('It\\'s a great
World')}", 0);
+ }
+
+ @Test
public void testClassSimpleName() throws Exception {
Animal tiger = new Animal("Tony the Tiger", 13);
exchange.getIn().setBody(tiger);
diff --git
a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java
b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java
index 2db72c1..af823d8 100644
---
a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java
+++
b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java
@@ -1394,6 +1394,11 @@ public class SimpleFunctionExpression extends
LiteralExpression {
}
}
+ // single quotes for string literals should be replaced as
double quotes
+ if (m != null) {
+ m = OgnlHelper.methodAsDoubleQuotes(m);
+ }
+
// shorthand getter syntax: .name -> .getName()
if (m != null && !m.isEmpty()) {
// a method so append with a dot
diff --git
a/core/camel-core/src/test/java/org/apache/camel/util/OgnlHelperTest.java
b/core/camel-core/src/test/java/org/apache/camel/util/OgnlHelperTest.java
index bb86e95..297de96 100644
--- a/core/camel-core/src/test/java/org/apache/camel/util/OgnlHelperTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/util/OgnlHelperTest.java
@@ -136,4 +136,13 @@ public class OgnlHelperTest {
assertEquals(".bar(true, ${header.bar[0]?.code})", methods.get(1));
}
+ @Test
+ public void testMethodAsDoubleQuotes() throws Exception {
+ String out =
OgnlHelper.methodAsDoubleQuotes("${bodyAs(String).compareTo('It\\'s a great
World')}");
+ assertEquals("${bodyAs(String).compareTo(\"It's a great World\")}",
out);
+
+ out =
OgnlHelper.methodAsDoubleQuotes("${bodyAs(String).compareTo(\"It's a great
World\")}");
+ assertEquals("${bodyAs(String).compareTo(\"It's a great World\")}",
out);
+ }
+
}
diff --git
a/core/camel-util/src/main/java/org/apache/camel/util/OgnlHelper.java
b/core/camel-util/src/main/java/org/apache/camel/util/OgnlHelper.java
index b10d7ae..c1c2a8d 100644
--- a/core/camel-util/src/main/java/org/apache/camel/util/OgnlHelper.java
+++ b/core/camel-util/src/main/java/org/apache/camel/util/OgnlHelper.java
@@ -276,4 +276,38 @@ public final class OgnlHelper {
return methods;
}
+ public static String methodAsDoubleQuotes(String ognl) {
+ StringBuilder sb = new StringBuilder();
+
+ int singleBracketCnt = 0;
+ int doubleBracketCnt = 0;
+ for (int i = 0; i < ognl.length(); i++) {
+ char ch = ognl.charAt(i);
+ char next = i < ognl.length() - 1 ? ognl.charAt(i + 1) : 0;
+
+ if (ch == '\\' && next == '\'') {
+ if (singleBracketCnt % 2 != 0) {
+ // its an escaped single quote inside an existing quote
+ // then unescape it
+ sb.append('\'');
+ // and skip over to next
+ i++;
+ continue;
+ }
+ }
+
+ if (doubleBracketCnt % 2 == 0 && ch == '\'') {
+ singleBracketCnt++;
+ sb.append('"');
+ } else if (singleBracketCnt % 2 == 0 && ch == '"') {
+ doubleBracketCnt++;
+ sb.append('"');
+ } else {
+ sb.append(ch);
+ }
+ }
+
+ return sb.toString();
+ }
+
}