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/07 19:08:52 UTC

[camel] 01/03: camel-core - Small optimizations in bean component

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 cf5b6cc71773a9e7f3afd11bea420727df3c1897
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Oct 7 18:28:49 2020 +0200

    camel-core - Small optimizations in bean component
---
 .../org/apache/camel/component/bean/BeanInfo.java  |  1 +
 .../apache/camel/language/bean/BeanExpression.java | 22 ++++++------
 .../apache/camel/language/bean/BeanLanguage.java   | 19 +++++-----
 .../java/org/apache/camel/util/ObjectHelper.java   | 12 ++++++-
 .../java/org/apache/camel/util/OgnlHelper.java     | 41 ++++++----------------
 5 files changed, 46 insertions(+), 49 deletions(-)

diff --git a/components/camel-bean/src/main/java/org/apache/camel/component/bean/BeanInfo.java b/components/camel-bean/src/main/java/org/apache/camel/component/bean/BeanInfo.java
index 28ddb58..1d7dc2d 100644
--- a/components/camel-bean/src/main/java/org/apache/camel/component/bean/BeanInfo.java
+++ b/components/camel-bean/src/main/java/org/apache/camel/component/bean/BeanInfo.java
@@ -110,6 +110,7 @@ public class BeanInfo {
         this.camelContext = camelContext;
         this.type = type;
         this.strategy = strategy;
+        // TODO: optimize this
         this.component = camelContext.getComponent("bean", BeanComponent.class);
 
         final BeanInfoCacheKey key = new BeanInfoCacheKey(type, explicitMethod);
diff --git a/components/camel-bean/src/main/java/org/apache/camel/language/bean/BeanExpression.java b/components/camel-bean/src/main/java/org/apache/camel/language/bean/BeanExpression.java
index 5a8982e..cbb7fb8 100644
--- a/components/camel-bean/src/main/java/org/apache/camel/language/bean/BeanExpression.java
+++ b/components/camel-bean/src/main/java/org/apache/camel/language/bean/BeanExpression.java
@@ -140,14 +140,16 @@ public class BeanExpression implements Expression, Predicate {
                 target = CamelContextHelper.mandatoryLookup(context, beanName);
             }
         }
-        validateHasMethod(context, target, type, method);
+        if (method != null) {
+            validateHasMethod(context, target, type, method);
 
-        // validate OGNL if its invalid syntax
-        if (OgnlHelper.isInvalidValidOgnlExpression(method)) {
-            throw new ExpressionIllegalSyntaxException(method);
-        }
+            // validate OGNL if its invalid syntax
+            if (OgnlHelper.isInvalidValidOgnlExpression(method)) {
+                throw new ExpressionIllegalSyntaxException(method);
+            }
 
-        ognlMethod = OgnlHelper.isValidOgnlExpression(method);
+            ognlMethod = OgnlHelper.isValidOgnlExpression(method);
+        }
     }
 
     @Override
@@ -224,15 +226,15 @@ public class BeanExpression implements Expression, Predicate {
             throw new IllegalArgumentException("Either bean or type should be provided on " + this);
         }
 
-        if (bean == null && hasDefaultPublicNoArgConstructor(type)) {
-            bean = context.getInjector().newInstance(type);
-        }
-
         // do not try to validate ognl methods
         if (OgnlHelper.isValidOgnlExpression(method)) {
             return;
         }
 
+        if (bean == null && hasDefaultPublicNoArgConstructor(type)) {
+            bean = context.getInjector().newInstance(type);
+        }
+
         // if invalid OGNL then fail
         if (OgnlHelper.isInvalidValidOgnlExpression(method)) {
             ExpressionIllegalSyntaxException cause = new ExpressionIllegalSyntaxException(method);
diff --git a/components/camel-bean/src/main/java/org/apache/camel/language/bean/BeanLanguage.java b/components/camel-bean/src/main/java/org/apache/camel/language/bean/BeanLanguage.java
index c1da63f..599ffa7 100644
--- a/components/camel-bean/src/main/java/org/apache/camel/language/bean/BeanLanguage.java
+++ b/components/camel-bean/src/main/java/org/apache/camel/language/bean/BeanLanguage.java
@@ -98,19 +98,22 @@ public class BeanLanguage extends LanguageSupport implements StaticService {
 
     @Override
     public Expression createExpression(String expression, Map<String, Object> properties) {
-        Object bean = properties.get("bean");
-        Class<?> beanType = (Class<?>) properties.get("beanType");
-        String ref = (String) properties.get("ref");
-        String method = (String) properties.get("method");
+        BeanExpression answer = null;
 
-        BeanExpression answer;
+        String method = (String) properties.get("method");
+        Object bean = properties.get("bean");
         if (bean != null) {
             answer = new BeanExpression(bean, method);
-        } else if (beanType != null) {
+        }
+        Class<?> beanType = (Class<?>) properties.get("beanType");
+        if (beanType != null) {
             answer = new BeanExpression(beanType, method);
-        } else if (ref != null) {
+        }
+        String ref = (String) properties.get("ref");
+        if (ref != null) {
             answer = new BeanExpression(ref, method);
-        } else {
+        }
+        if (answer == null) {
             throw new IllegalArgumentException("Bean language requires bean, beanType, or ref argument");
         }
 
diff --git a/core/camel-util/src/main/java/org/apache/camel/util/ObjectHelper.java b/core/camel-util/src/main/java/org/apache/camel/util/ObjectHelper.java
index a02edb7..e489551 100644
--- a/core/camel-util/src/main/java/org/apache/camel/util/ObjectHelper.java
+++ b/core/camel-util/src/main/java/org/apache/camel/util/ObjectHelper.java
@@ -181,7 +181,17 @@ public final class ObjectHelper {
      * @return       true if empty
      */
     public static boolean isEmpty(Object value) {
-        return !isNotEmpty(value);
+        if (value == null) {
+            return true;
+        } else if (value instanceof String) {
+            return ((String) value).trim().isEmpty();
+        } else if (value instanceof Collection) {
+            return ((Collection<?>) value).isEmpty();
+        } else if (value instanceof Map) {
+            return ((Map<?, ?>) value).isEmpty();
+        } else {
+            return false;
+        }
     }
 
     /**
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 ea3c0f6..c10f5d1 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
@@ -17,6 +17,7 @@
 package org.apache.camel.util;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -40,7 +41,7 @@ public final class OgnlHelper {
      * @return            <tt>true</tt> if a Camel OGNL expression, otherwise <tt>false</tt>.
      */
     public static boolean isValidOgnlExpression(String expression) {
-        if (ObjectHelper.isEmpty(expression)) {
+        if (expression == null || expression.isEmpty()) {
             return false;
         }
 
@@ -55,11 +56,7 @@ public final class OgnlHelper {
     }
 
     public static boolean isInvalidValidOgnlExpression(String expression) {
-        if (ObjectHelper.isEmpty(expression)) {
-            return false;
-        }
-
-        if (!expression.contains(".") && !expression.contains("[") && !expression.contains("]")) {
+        if (expression.indexOf('.') == -1 && expression.indexOf('[') == -1 && expression.indexOf(']') == -1) {
             return false;
         }
 
@@ -83,9 +80,6 @@ public final class OgnlHelper {
      * {@link IllegalArgumentException} if the method name is invalid.
      */
     public static void validateMethodName(String method) {
-        if (ObjectHelper.isEmpty(method)) {
-            return;
-        }
         for (int i = 0; i < method.length(); i++) {
             char ch = method.charAt(i);
             if (i == 0 && '.' == ch) {
@@ -113,10 +107,6 @@ public final class OgnlHelper {
      * @return                <tt>true</tt> if the null safe operator is used, otherwise <tt>false</tt>.
      */
     public static boolean isNullSafeOperator(String ognlExpression) {
-        if (ObjectHelper.isEmpty(ognlExpression)) {
-            return false;
-        }
-
         return ognlExpression.startsWith("?");
     }
 
@@ -129,17 +119,12 @@ public final class OgnlHelper {
      * @return                the Camel OGNL expression without any leading operators.
      */
     public static String removeLeadingOperators(String ognlExpression) {
-        if (ObjectHelper.isEmpty(ognlExpression)) {
-            return ognlExpression;
-        }
-
         if (ognlExpression.startsWith("?")) {
             ognlExpression = ognlExpression.substring(1);
         }
         if (ognlExpression.startsWith(".")) {
             ognlExpression = ognlExpression.substring(1);
         }
-
         return ognlExpression;
     }
 
@@ -150,12 +135,9 @@ public final class OgnlHelper {
      * @return                the Camel OGNL expression without any trailing operators.
      */
     public static String removeTrailingOperators(String ognlExpression) {
-        if (ObjectHelper.isEmpty(ognlExpression)) {
-            return ognlExpression;
-        }
-
-        if (ognlExpression.contains("[")) {
-            return StringHelper.before(ognlExpression, "[");
+        int pos = ognlExpression.indexOf('[');
+        if (pos != -1) {
+            return ognlExpression.substring(0, pos);
         }
         return ognlExpression;
     }
@@ -170,13 +152,13 @@ public final class OgnlHelper {
 
             // to avoid empty strings as we want key/value to be null in such cases
             String key = matcher.group(1);
-            if (ObjectHelper.isEmpty(key)) {
+            if (key != null && key.isEmpty()) {
                 key = null;
             }
 
             // to avoid empty strings as we want key/value to be null in such cases
             String value = matcher.group(2);
-            if (ObjectHelper.isEmpty(value)) {
+            if (value != null && value.isEmpty()) {
                 value = null;
             }
 
@@ -195,13 +177,12 @@ public final class OgnlHelper {
      * @throws IllegalArgumentException if the last method has a missing ending parenthesis
      */
     public static List<String> splitOgnl(String ognl) {
-        List<String> methods = new ArrayList<>();
-
         // return an empty list if ognl is empty
-        if (ObjectHelper.isEmpty(ognl)) {
-            return methods;
+        if (ognl == null || ognl.isEmpty() || ognl.trim().isEmpty()) {
+            return Collections.EMPTY_LIST;
         }
 
+        List<String> methods = new ArrayList<>(4);
         StringBuilder sb = new StringBuilder();
 
         int j = 0; // j is used as counter per method