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 6258982 CAMEL-15697: camel-joor - Camel expression langauge using
jOOR runtime java compiled.
6258982 is described below
commit 62589825b73fc1b2b145957b8124a564bf9d53da
Author: Claus Ibsen <[email protected]>
AuthorDate: Mon Oct 19 15:08:55 2020 +0200
CAMEL-15697: camel-joor - Camel expression langauge using jOOR runtime java
compiled.
---
.../apache/camel/language/joor/JoorCompiler.java | 28 +++++-----
.../camel/language/joor/JoorLanguageTest.java | 65 ++++++++++++++++++++++
2 files changed, 79 insertions(+), 14 deletions(-)
diff --git
a/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorCompiler.java
b/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorCompiler.java
index 01623d6..4168ff3 100644
---
a/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorCompiler.java
+++
b/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorCompiler.java
@@ -38,18 +38,18 @@ import org.slf4j.LoggerFactory;
public class JoorCompiler extends ServiceSupport implements StaticService {
- // TODO: OptionalXXX
-
- private static final Pattern BODY_AS_PATTERN =
Pattern.compile("bodyAs\\(([A-Za-z0-9.$]*)(.class)\\)");
- private static final Pattern BODY_AS_PATTERN_NO_CLASS =
Pattern.compile("bodyAs\\(([A-Za-z0-9.$]*)\\)");
+ private static final Pattern BODY_AS_PATTERN =
Pattern.compile("(optionalBodyAs|bodyAs)\\(([A-Za-z0-9.$]*)(.class)\\)");
+ private static final Pattern BODY_AS_PATTERN_NO_CLASS =
Pattern.compile("(optionalBodyAs|bodyAs)\\(([A-Za-z0-9.$]*)\\)");
private static final Pattern HEADER_AS_PATTERN
- =
Pattern.compile("headerAs\\((['|\"][A-Za-z0-9.$]*['|\"]\\s*,\\s*[A-Za-z0-9.$]*)(.class)\\)");
+ =
Pattern.compile("(optionalHeaderAs|headerAs)\\((['|\"][A-Za-z0-9.$]*['|\"]\\s*,\\s*[A-Za-z0-9.$]*)(.class)\\)");
private static final Pattern HEADER_AS_PATTERN_NO_CLASS
- =
Pattern.compile("headerAs\\((['|\"][A-Za-z0-9.$]*['|\"]\\s*,\\s*[A-Za-z0-9.$]*)\\)");
+ =
Pattern.compile("(optionalHeaderAs|headerAs)\\((['|\"][A-Za-z0-9.$]*['|\"]\\s*,\\s*[A-Za-z0-9.$]*)\\)");
private static final Pattern EXCHANGE_PROPERTY_AS_PATTERN
- =
Pattern.compile("exchangePropertyAs\\((['|\"][A-Za-z0-9.$]*['|\"]\\s*,\\s*[A-Za-z0-9.$]*)(.class)\\)");
+ = Pattern.compile(
+
"(optionalExchangePropertyAs|exchangePropertyAs)\\((['|\"][A-Za-z0-9.$]*['|\"]\\s*,\\s*[A-Za-z0-9.$]*)(.class)\\)");
private static final Pattern EXCHANGE_PROPERTY_AS_PATTERN_NO_CLASS
- =
Pattern.compile("exchangePropertyAs\\((['|\"][A-Za-z0-9.$]*['|\"]\\s*,\\s*[A-Za-z0-9.$]*)\\)");
+ = Pattern.compile(
+
"(optionalExchangePropertyAs|exchangePropertyAs)\\((['|\"][A-Za-z0-9.$]*['|\"]\\s*,\\s*[A-Za-z0-9.$]*)\\)");
private static final Logger LOG =
LoggerFactory.getLogger(JoorCompiler.class);
private static final AtomicInteger UUID = new AtomicInteger();
@@ -165,19 +165,19 @@ public class JoorCompiler extends ServiceSupport
implements StaticService {
private String staticHelper(String script) {
Matcher matcher = BODY_AS_PATTERN.matcher(script);
- script = matcher.replaceAll("bodyAs(exchange, $1$2)");
+ script = matcher.replaceAll("$1(exchange, $2$3)");
matcher = BODY_AS_PATTERN_NO_CLASS.matcher(script);
- script = matcher.replaceAll("bodyAs(exchange, $1.class)");
+ script = matcher.replaceAll("$1(exchange, $2.class)");
matcher = HEADER_AS_PATTERN.matcher(script);
- script = matcher.replaceAll("headerAs(exchange, $1$2)");
+ script = matcher.replaceAll("$1(exchange, $2$3)");
matcher = HEADER_AS_PATTERN_NO_CLASS.matcher(script);
- script = matcher.replaceAll("headerAs(exchange, $1.class)");
+ script = matcher.replaceAll("$1(exchange, $2.class)");
matcher = EXCHANGE_PROPERTY_AS_PATTERN.matcher(script);
- script = matcher.replaceAll("exchangePropertyAs(exchange, $1$2)");
+ script = matcher.replaceAll("$1(exchange, $2$3)");
matcher = EXCHANGE_PROPERTY_AS_PATTERN_NO_CLASS.matcher(script);
- script = matcher.replaceAll("exchangePropertyAs(exchange, $1.class)");
+ script = matcher.replaceAll("$1(exchange, $2.class)");
return script;
}
diff --git
a/components/camel-joor/src/test/java/org/apache/camel/language/joor/JoorLanguageTest.java
b/components/camel-joor/src/test/java/org/apache/camel/language/joor/JoorLanguageTest.java
index d47a80a..644e217 100644
---
a/components/camel-joor/src/test/java/org/apache/camel/language/joor/JoorLanguageTest.java
+++
b/components/camel-joor/src/test/java/org/apache/camel/language/joor/JoorLanguageTest.java
@@ -90,6 +90,16 @@ public class JoorLanguageTest extends LanguageTestSupport {
}
@Test
+ public void testOptionalBody() throws Exception {
+ exchange.getIn().setBody("22");
+ assertExpression("optionalBody.isPresent()", true);
+ assertExpression("optionalBody.get()", "22");
+
+ exchange.getIn().setBody(null);
+ assertExpression("optionalBody.isPresent()", false);
+ }
+
+ @Test
public void testExchangeBodyAs() throws Exception {
exchange.getIn().setBody("22");
@@ -103,6 +113,19 @@ public class JoorLanguageTest extends LanguageTestSupport {
}
@Test
+ public void testExchangeOptionalBodyAs() throws Exception {
+ exchange.getIn().setBody("22");
+
+ assertExpression("2 * optionalBodyAs(int.class).get()", "44");
+ assertExpression("2 * optionalBodyAs(int).get()", "44");
+ assertExpression("3 * optionalBodyAs(Integer.class).get()", "66");
+ assertExpression("3 * optionalBodyAs(Integer).get()", "66");
+ assertExpression("3 * optionalBodyAs(java.lang.Integer.class).get()",
"66");
+ assertExpression("3 * optionalBodyAs(java.lang.Integer).get()", "66");
+ assertExpression("var num = optionalBodyAs(int).get(); return num *
4", "88");
+ }
+
+ @Test
public void testExchangeHeaderAs() throws Exception {
exchange.getIn().setHeader("foo", 22);
@@ -124,6 +147,27 @@ public class JoorLanguageTest extends LanguageTestSupport {
}
@Test
+ public void testExchangeOptionalHeaderAs() throws Exception {
+ exchange.getIn().setHeader("foo", 22);
+
+ assertExpression("2 * optionalHeaderAs('foo', int.class).get()", "44");
+ assertExpression("2 * optionalHeaderAs('foo', int).get()", "44");
+ assertExpression("3 * optionalHeaderAs('foo', Integer.class).get()",
"66");
+ assertExpression("3 * optionalHeaderAs('foo', Integer).get()", "66");
+ assertExpression("3 * optionalHeaderAs('foo',
java.lang.Integer.class).get()", "66");
+ assertExpression("3 * optionalHeaderAs('foo',
java.lang.Integer).get()", "66");
+ assertExpression("var num = optionalHeaderAs('foo', int).get(); return
num * 4", "88");
+
+ assertExpression("2 * optionalHeaderAs(\"foo\", int.class).get()",
"44");
+ assertExpression("2 * optionalHeaderAs(\"foo\", int).get()", "44");
+ assertExpression("3 * optionalHeaderAs(\"foo\", Integer.class).get()",
"66");
+ assertExpression("3 * optionalHeaderAs(\"foo\", Integer).get()", "66");
+ assertExpression("3 * optionalHeaderAs(\"foo\",
java.lang.Integer.class).get()", "66");
+ assertExpression("3 * optionalHeaderAs(\"foo\",
java.lang.Integer).get()", "66");
+ assertExpression("var num = optionalHeaderAs(\"foo\", int).get();
return num * 4", "88");
+ }
+
+ @Test
public void testExchangePropertyAs() throws Exception {
exchange.setProperty("bar", 22);
@@ -144,4 +188,25 @@ public class JoorLanguageTest extends LanguageTestSupport {
assertExpression("var num = exchangePropertyAs(\"bar\", int); return
num * 4", "88");
}
+ @Test
+ public void testOptionalExchangePropertyAs() throws Exception {
+ exchange.setProperty("bar", 22);
+
+ assertExpression("2 * optionalExchangePropertyAs('bar',
int.class).get()", "44");
+ assertExpression("2 * optionalExchangePropertyAs('bar', int).get()",
"44");
+ assertExpression("3 * optionalExchangePropertyAs('bar',
Integer.class).get()", "66");
+ assertExpression("3 * optionalExchangePropertyAs('bar',
Integer).get()", "66");
+ assertExpression("3 * optionalExchangePropertyAs('bar',
java.lang.Integer.class).get()", "66");
+ assertExpression("3 * optionalExchangePropertyAs('bar',
java.lang.Integer).get()", "66");
+ assertExpression("var num = optionalExchangePropertyAs('bar',
int).get(); return num * 4", "88");
+
+ assertExpression("2 * optionalExchangePropertyAs(\"bar\",
int.class).get()", "44");
+ assertExpression("2 * optionalExchangePropertyAs(\"bar\", int).get()",
"44");
+ assertExpression("3 * optionalExchangePropertyAs(\"bar\",
Integer.class).get()", "66");
+ assertExpression("3 * optionalExchangePropertyAs(\"bar\",
Integer).get()", "66");
+ assertExpression("3 * optionalExchangePropertyAs(\"bar\",
java.lang.Integer.class).get()", "66");
+ assertExpression("3 * optionalExchangePropertyAs(\"bar\",
java.lang.Integer).get()", "66");
+ assertExpression("var num = optionalExchangePropertyAs(\"bar\",
int).get(); return num * 4", "88");
+ }
+
}