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
The following commit(s) were added to refs/heads/master by this push: new d4ef673 CAMEL-14582: camel-bean - Optimize excluded methods d4ef673 is described below commit d4ef6735148a5c4e2de94f0b588765e1fd4b09e0 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Mon Feb 17 19:14:18 2020 +0100 CAMEL-14582: camel-bean - Optimize excluded methods --- .../org/apache/camel/component/bean/BeanInfo.java | 30 ++++++---------------- 1 file changed, 8 insertions(+), 22 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 899b03e..297e806 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 @@ -19,7 +19,6 @@ package org.apache.camel.component.bean; import java.lang.annotation.Annotation; import java.lang.reflect.Method; import java.lang.reflect.Modifier; -import java.lang.reflect.Proxy; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -62,7 +61,10 @@ import org.slf4j.LoggerFactory; public class BeanInfo { private static final Logger LOG = LoggerFactory.getLogger(BeanInfo.class); private static final String CGLIB_CLASS_SEPARATOR = "$$"; - private static final List<Method> EXCLUDED_METHODS = new ArrayList<>(); + private static final String[] EXCLUDED_METHOD_NAMES = new String[]{ + "clone", "equals", "finalize", "getClass", "hashCode", "notify", "notifyAll", "wait", // java.lang.Object + "getInvocationHandler", "getProxyClass", "isProxyClass", "newProxyInstance" // java.lang.Proxy + }; private final CamelContext camelContext; private final BeanComponent component; private final Class<?> type; @@ -78,22 +80,6 @@ public class BeanInfo { private boolean publicConstructors; private boolean publicNoArgConstructors; - static { - // exclude all java.lang.Object methods as we dont want to invoke them - EXCLUDED_METHODS.addAll(Arrays.asList(Object.class.getDeclaredMethods())); - // exclude all java.lang.reflect.Proxy methods as we dont want to invoke them - EXCLUDED_METHODS.addAll(Arrays.asList(Proxy.class.getDeclaredMethods())); - // Remove private methods - EXCLUDED_METHODS.removeIf(m -> Modifier.isPrivate(m.getModifiers())); - try { - // but keep toString as this method is okay - EXCLUDED_METHODS.remove(Object.class.getDeclaredMethod("toString")); - EXCLUDED_METHODS.remove(Proxy.class.getDeclaredMethod("toString")); - } catch (Throwable e) { - // ignore - } - } - public BeanInfo(CamelContext camelContext, Class<?> type) { this(camelContext, type, createParameterMappingStrategy(camelContext)); } @@ -886,10 +872,10 @@ public class BeanInfo { * @return true if valid, false to skip the method */ protected boolean isValidMethod(Class<?> clazz, Method method) { - // must not be in the excluded list - for (Method excluded : EXCLUDED_METHODS) { - if (org.apache.camel.util.ObjectHelper.isOverridingMethod(excluded, method)) { - // the method is overriding an excluded method so its not valid + // method name must not be in the excluded list + String name = method.getName(); + for (String s : EXCLUDED_METHOD_NAMES) { + if (name.equals(s)) { return false; } }