You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2020/10/03 10:08:50 UTC

[camel] 03/04: CAMEL-15627: Optimize to eager initialize language for expressions.

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 91ddabd9fe0b010124f4439a4fa6019cd7f6a529
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sat Oct 3 10:25:45 2020 +0200

    CAMEL-15627: Optimize to eager initialize language for expressions.
---
 .../java/org/apache/camel/language/spel/SpelLanguage.java    | 12 ------------
 .../src/main/java/org/apache/camel/spi/Language.java         |  8 ++++++--
 .../org/apache/camel/support/builder/ExpressionBuilder.java  | 10 ++++++++--
 3 files changed, 14 insertions(+), 16 deletions(-)

diff --git a/components/camel-spring/src/main/java/org/apache/camel/language/spel/SpelLanguage.java b/components/camel-spring/src/main/java/org/apache/camel/language/spel/SpelLanguage.java
index 30f29b42..1f6f550 100644
--- a/components/camel-spring/src/main/java/org/apache/camel/language/spel/SpelLanguage.java
+++ b/components/camel-spring/src/main/java/org/apache/camel/language/spel/SpelLanguage.java
@@ -16,8 +16,6 @@
  */
 package org.apache.camel.language.spel;
 
-import java.util.Map;
-
 import org.apache.camel.Expression;
 import org.apache.camel.Predicate;
 import org.apache.camel.Service;
@@ -51,16 +49,6 @@ public class SpelLanguage extends LanguageSupport implements Service {
     }
 
     @Override
-    public Predicate createPredicate(String expression, Map<String, Object> properties) {
-        return createPredicate(expression);
-    }
-
-    @Override
-    public Expression createExpression(String expression, Map<String, Object> properties) {
-        return createExpression(expression);
-    }
-
-    @Override
     public void init() {
         ObjectHelper.notNull(getCamelContext(), "CamelContext", this);
 
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/Language.java b/core/camel-api/src/main/java/org/apache/camel/spi/Language.java
index 191ef86..a79a71d 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/Language.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/Language.java
@@ -52,7 +52,9 @@ public interface Language {
      * @param  properties configuration properties
      * @return            the created predicate
      */
-    Predicate createPredicate(String expression, Map<String, Object> properties);
+    default Predicate createPredicate(String expression, Map<String, Object> properties) {
+        return createPredicate(expression);
+    }
 
     /**
      * Creates an expression based on the input with properties
@@ -64,5 +66,7 @@ public interface Language {
      * @param  properties configuration properties
      * @return            the created expression
      */
-    Expression createExpression(String expression, Map<String, Object> properties);
+    default Expression createExpression(String expression, Map<String, Object> properties) {
+        return createExpression(expression);
+    }
 }
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 f07384a..0209ddf 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
@@ -1634,9 +1634,8 @@ public class ExpressionBuilder {
     public static Expression tokenizeXMLAwareExpression(String headerName, String path, char mode, int group, Namespaces namespaces) {
         StringHelper.notEmpty(path, "path");
         return new ExpressionAdapter() {
+            private Language language;
             public Object evaluate(Exchange exchange) {
-                // TODO: resolve language early
-                Language language = exchange.getContext().resolveLanguage("xtokenize");
                 Map<String, Object> map = new HashMap<>(4);
                 map.put("mode", mode);
                 map.put("group", group);
@@ -1650,6 +1649,13 @@ public class ExpressionBuilder {
             }
 
             @Override
+            public void init(CamelContext context) {
+                if (this.language == null) {
+                    this.language = context.resolveLanguage("xtokenize");
+                }
+            }
+
+            @Override
             public String toString() {
                 return "xtokenize(" + path + ")";
             }