Skip to content

Commit 2db95c7

Browse files
committed
GH-1246 Fix logic around getting parameter names from 'factory method'
Changed condition to ensure we use method name when iterating thru methods instead of validating if it is a 'factory method' Resolves #1246
1 parent 6c3505d commit 2db95c7

File tree

2 files changed

+9
-3
lines changed

2 files changed

+9
-3
lines changed

spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/FunctionTypeUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ public static Type getInputType(Type functionType) {
378378
}
379379

380380
ResolvableType resolvableFunctionType = ResolvableType.forType(functionType);
381-
381+
382382
ResolvableType resolvableInputType;
383383
if (FunctionTypeUtils.isFunction(functionType)) {
384384
resolvableInputType = resolvableFunctionType.as(Function.class);

spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/FunctionContextUtils.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,18 @@ else if (source instanceof Resource) {
8585
return param;
8686
}
8787

88+
@Deprecated(since = "4.2.3", forRemoval = true)
8889
public static Class<?>[] getParamTypesFromBeanDefinitionFactory(Class<?> factory,
8990
AbstractBeanDefinition definition) {
91+
return getParamTypesFromBeanDefinitionFactory(factory, definition, null);
92+
}
93+
94+
public static Class<?>[] getParamTypesFromBeanDefinitionFactory(Class<?> factory,
95+
AbstractBeanDefinition definition, String methodName) {
9096
if (definition instanceof RootBeanDefinition) {
9197
RootBeanDefinition root = (RootBeanDefinition) definition;
9298
for (Method method : getCandidateMethods(factory, root)) {
93-
if (root.isFactoryMethod(method)) {
99+
if (method.getName().equals(methodName)) {
94100
return method.getParameterTypes();
95101
}
96102
}
@@ -114,7 +120,7 @@ private static Class<?> resolveBeanClass(AbstractBeanDefinition beanDefinition)
114120

115121
private static Type findBeanType(AbstractBeanDefinition definition, String declaringClassName, String methodName) {
116122
Class<?> factory = ClassUtils.resolveClassName(declaringClassName, null);
117-
Class<?>[] params = getParamTypesFromBeanDefinitionFactory(factory, definition);
123+
Class<?>[] params = getParamTypesFromBeanDefinitionFactory(factory, definition, methodName);
118124
Method method = ReflectionUtils.findMethod(factory, methodName,
119125
params);
120126
Type type = method.getGenericReturnType();

0 commit comments

Comments
 (0)