Repository: cxf Updated Branches: refs/heads/3.0.x-fixes 32812b2bd -> 99311036f
[CXF-6438] Optimize ExtensionInvocationHandler Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/e76de136 Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/e76de136 Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/e76de136 Branch: refs/heads/3.0.x-fixes Commit: e76de136822100ba01f8f9902e689ce28e44a964 Parents: 32812b2 Author: Alessio Soldano <asold...@redhat.com> Authored: Thu Jun 4 16:07:25 2015 +0200 Committer: Alessio Soldano <asold...@redhat.com> Committed: Thu Jun 4 16:11:57 2015 +0200 ---------------------------------------------------------------------- .../cxf/common/util/ExtensionInvocationHandler.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/e76de136/core/src/main/java/org/apache/cxf/common/util/ExtensionInvocationHandler.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/cxf/common/util/ExtensionInvocationHandler.java b/core/src/main/java/org/apache/cxf/common/util/ExtensionInvocationHandler.java index 1524c18..7672382 100644 --- a/core/src/main/java/org/apache/cxf/common/util/ExtensionInvocationHandler.java +++ b/core/src/main/java/org/apache/cxf/common/util/ExtensionInvocationHandler.java @@ -30,15 +30,13 @@ public class ExtensionInvocationHandler implements InvocationHandler { } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { - Class<?>[] clzs = null; - if (args != null) { - clzs = new Class[args.length]; - for (int i = 0; i < args.length; i++) { - clzs[i] = args[i].getClass(); - } + if (method.getDeclaringClass().isAssignableFrom(obj.getClass())) { + return method.invoke(obj, args); + } else { + //in case obj has the required method with exact signature despite it's class + //not being assignable from the class declaring the specified method + Method m = obj.getClass().getMethod(method.getName(), method.getParameterTypes()); + return m.invoke(obj, args); } - - Method m = obj.getClass().getMethod(method.getName(), method.getParameterTypes()); - return m.invoke(obj, args); } }