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 2d16785 CAMEL-15704: camel-csimple - Compiled simple language. 2d16785 is described below commit 2d167853ab3f69d028de914d038250f431a15013 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Sat Nov 28 23:57:54 2020 +0100 CAMEL-15704: camel-csimple - Compiled simple language. --- .../language/csimple/joor/OriginalSimpleTest.java | 28 ++++++++++------------ .../camel/language/csimple/CSimpleHelper.java | 1 + .../simple/ast/SimpleFunctionExpression.java | 2 +- 3 files changed, 15 insertions(+), 16 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 4469519..8b29d79 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 @@ -342,14 +342,14 @@ public class OriginalSimpleTest extends LanguageTestSupport { exchange.getIn().setBody(map); - assertExpression("${in.body?.get(\"list\")[0].toString}", null); + assertExpression("${BodyAs(Map)?.get(\"list\")[0].toString}", null); } @Test public void testOGNLBodyExpression() throws Exception { exchange.getIn().setBody("hello world"); assertPredicate("${body} == \"hello world\"", true); - assertPredicate("${body.toUpperCase()} == \"HELLO WORLD\"", true); + assertPredicate("${bodyAs(String).toUpperCase()} == \"HELLO WORLD\"", true); } @Test @@ -360,11 +360,10 @@ public class OriginalSimpleTest extends LanguageTestSupport { // there is no upper case method on byte array, but we can convert to // String as below try { - assertPredicate("${body.toUpperCase()} == \"HELLO WORLD\"", true); + assertPredicate("${bodyAs(byte[]).toUpperCase()} == \"HELLO WORLD\"", true); fail("Should throw exception"); - } catch (RuntimeBeanExpressionException e) { - MethodNotFoundException cause = assertIsInstanceOf(MethodNotFoundException.class, e.getCause()); - assertEquals("toUpperCase()", cause.getMethodName()); + } catch (JoorCSimpleCompilationException e) { + assertTrue(e.getCause().getMessage().contains("method toUpperCase()")); } assertPredicate("${bodyAs(String)} == \"hello world\"", true); @@ -382,11 +381,10 @@ public class OriginalSimpleTest extends LanguageTestSupport { // there is no upper case method on byte array, but we can convert to // String as below try { - assertPredicate("${body.toUpperCase()} == \"HELLO WORLD\"", true); + assertPredicate("${bodyAs(byte[]).toUpperCase()} == \"HELLO WORLD\"", true); fail("Should throw exception"); - } catch (RuntimeBeanExpressionException e) { - MethodNotFoundException cause = assertIsInstanceOf(MethodNotFoundException.class, e.getCause()); - assertEquals("toUpperCase()", cause.getMethodName()); + } catch (JoorCSimpleCompilationException e) { + assertTrue(e.getCause().getMessage().contains("method toUpperCase()")); } assertPredicate("${mandatoryBodyAs(String)} == \"hello world\"", true); @@ -403,7 +401,7 @@ public class OriginalSimpleTest extends LanguageTestSupport { map.put("dude", "Hey dude"); exchange.getIn().setHeaders(map); - assertExpression("${headers.cool.replaceAll(\"rocks\", \"is so cool\")}", "Camel is so cool"); + assertExpression("${headerAs(cool, String).replaceAll(\"rocks\", \"is so cool\")}", "Camel is so cool"); } @Test @@ -458,8 +456,8 @@ public class OriginalSimpleTest extends LanguageTestSupport { lines.add(new OrderLine(456, "ActiveMQ in Action")); exchange.setProperty("wicket", lines); - assertExpression("${exchangeProperty.wicket[0].getId}", 123); - assertExpression("${exchangeProperty.wicket[1].getName}", "ActiveMQ in Action"); + assertExpression("${exchangePropertyAs(wicket, List)[0].getId}", 123); + assertExpression("${exchangePropertyAs(wicket, List)[1].getName}", "ActiveMQ in Action"); try { assertExpression("${exchangeProperty.wicket[2]}", ""); fail("Should have thrown an exception"); @@ -899,8 +897,8 @@ public class OriginalSimpleTest extends LanguageTestSupport { try { assertExpression("${headerAs(fool,String).test}", null); fail("Should have thrown an exception"); - } catch (ExpressionIllegalSyntaxException e) { - assertTrue(e.getMessage().startsWith("Valid syntax: ${headerAs(key, type)} was: headerAs(fool,String).test")); + } catch (JoorCSimpleCompilationException e) { + // expected } try { diff --git a/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleHelper.java b/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleHelper.java index d923b95..654eab8 100644 --- a/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleHelper.java +++ b/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleHelper.java @@ -83,6 +83,7 @@ public final class CSimpleHelper { public static <T> T bodyAsIndex(Message message, Class<T> type, String key) { // TODO: array + // TODO: key can have multiple elements [0][foo] or [0][0] Object body = message.getBody(); if (body instanceof Map) { Map map = (Map) body; 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 47462f8..ba986e5 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 @@ -982,7 +982,7 @@ public class SimpleFunctionExpression extends LiteralExpression { String key = StringHelper.before(keyAndType, ","); String type = StringHelper.after(keyAndType, ","); remainder = StringHelper.after(remainder, ")"); - if (ObjectHelper.isEmpty(key) || ObjectHelper.isEmpty(type) || ObjectHelper.isNotEmpty(remainder)) { + if (ObjectHelper.isEmpty(key) || ObjectHelper.isEmpty(type)) { throw new SimpleParserException("Valid syntax: ${headerAs(key, type)} was: " + function, token.getIndex()); } key = StringHelper.removeQuotes(key);