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
commit 7f28e5670b8d9d8ccae40776d79e227e2e364d0e Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Fri Oct 2 19:07:55 2020 +0200 CAMEL-15606: Optimize simple language and expression builder a bit --- .../camel/support/builder/ExpressionBuilder.java | 29 ++++++++++------------ 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/core/camel-support/src/main/java/org/apache/camel/support/builder/ExpressionBuilder.java b/core/camel-support/src/main/java/org/apache/camel/support/builder/ExpressionBuilder.java index 7c2997e..e3ba768 100644 --- a/core/camel-support/src/main/java/org/apache/camel/support/builder/ExpressionBuilder.java +++ b/core/camel-support/src/main/java/org/apache/camel/support/builder/ExpressionBuilder.java @@ -32,7 +32,6 @@ import org.apache.camel.CamelContext; import org.apache.camel.CamelExecutionException; import org.apache.camel.Exchange; import org.apache.camel.Expression; -import org.apache.camel.ExtendedCamelContext; import org.apache.camel.InvalidPayloadException; import org.apache.camel.Message; import org.apache.camel.NoSuchLanguageException; @@ -300,7 +299,11 @@ public class ExpressionBuilder { * @return an expression object which will return the bean */ public static Expression refExpression(final String ref) { - return refExpression(simpleExpression(ref)); + if (LanguageSupport.hasSimpleFunction(ref)) { + return refExpression(simpleExpression(ref)); + } else { + return refExpression(constantExpression(ref)); + } } /** @@ -1632,21 +1635,23 @@ public class ExpressionBuilder { StringHelper.notEmpty(path, "path"); return new ExpressionAdapter() { public Object evaluate(Exchange exchange) { + // TODO: resolve language early Language language = exchange.getContext().resolveLanguage("xtokenize"); + Map<String, Object> map = new HashMap<>(5); if (headerName != null) { - setProperty(exchange.getContext(), language, "headerName", headerName); + map.put("headerName", headerName); } if (mode != 'i') { - setProperty(exchange.getContext(), language, "mode", mode); + map.put("mode", mode); } if (group > 1) { - setProperty(exchange.getContext(), language, "group", group); + map.put("group", group); } if (namespaces != null) { - setProperty(exchange.getContext(), language, "namespaces", namespaces); + map.put("namespaces", namespaces); } - setProperty(exchange.getContext(), language, "path", path); - return language.createExpression((String)null).evaluate(exchange, Object.class); + map.put("path", path); + return language.createExpression(map).evaluate(exchange, Object.class); } @Override @@ -1677,12 +1682,4 @@ public class ExpressionBuilder { }; } - protected static void setProperty(CamelContext camelContext, Object bean, String name, Object value) { - try { - camelContext.adapt(ExtendedCamelContext.class).getBeanIntrospection().setProperty(camelContext, bean, name, value); - } catch (Exception e) { - throw new IllegalArgumentException("Failed to set property " + name + " on " + bean + ". Reason: " + e, e); - } - } - }