From 22c9fd346d23066dda318fc6ccae5251f814265c Mon Sep 17 00:00:00 2001 From: robokaso Date: Wed, 7 Jan 2009 14:58:00 +0000 Subject: [PATCH] REOPENED - BATCH-988: MethodInvokingTaskletAdapter (via AbstractMethodInvokingDelegator) only allows specification of targetObject's declared methods search for the target method in both getMethods() and getDelcaredMethods() --- .../AbstractMethodInvokingDelegator.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/adapter/AbstractMethodInvokingDelegator.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/adapter/AbstractMethodInvokingDelegator.java index a1cfcb958..8ee47afcd 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/adapter/AbstractMethodInvokingDelegator.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/adapter/AbstractMethodInvokingDelegator.java @@ -18,6 +18,9 @@ package org.springframework.batch.item.adapter; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import org.springframework.beans.factory.InitializingBean; import org.springframework.util.Assert; @@ -129,12 +132,19 @@ public abstract class AbstractMethodInvokingDelegator implements Initializing */ private boolean targetClassDeclaresTargetMethod() { MethodInvoker invoker = createMethodInvoker(targetObject, targetMethod); - Method[] methods = invoker.getTargetClass().getMethods(); + + Method[] memberMethods = invoker.getTargetClass().getMethods(); + Method[] declaredMethods = invoker.getTargetClass().getDeclaredMethods(); + + List allMethods = new ArrayList(); + allMethods.addAll(Arrays.asList(memberMethods)); + allMethods.addAll(Arrays.asList(declaredMethods)); + String targetMethodName = invoker.getTargetMethod(); - for (int i = 0; i < methods.length; i++) { - if (methods[i].getName().equals(targetMethodName)) { - Class[] params = methods[i].getParameterTypes(); + for (Method method : allMethods) { + if (method.getName().equals(targetMethodName)) { + Class[] params = method.getParameterTypes(); if (arguments == null) { // don't check signature, assume arguments will be supplied // correctly at runtime