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