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 <[email protected]> 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
