diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/FunctionContextUtils.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/FunctionContextUtils.java index 5fcf7b989..241d0b18a 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/FunctionContextUtils.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/FunctionContextUtils.java @@ -55,9 +55,15 @@ public abstract class FunctionContextUtils { } } + Class beanClass = null; + + if (definition == null) { return null; } + else { + beanClass = resolveBeanClass(definition); + } Object source = definition.getSource(); @@ -74,7 +80,7 @@ public abstract class FunctionContextUtils { } else { Type t = definition.getResolvableType().getType(); - if (!(t instanceof ParameterizedType) && definition.hasBeanClass()) { + if (!(t instanceof ParameterizedType) && beanClass != null) { return FunctionTypeUtils.discoverFunctionTypeFromClass(definition.getBeanClass()); } return t; @@ -99,6 +105,15 @@ public abstract class FunctionContextUtils { return params.toArray(new Class[0]); } + private static Class resolveBeanClass(AbstractBeanDefinition beanDefinition) { + try { + return beanDefinition.hasBeanClass() ? beanDefinition.getBeanClass() : ClassUtils.getDefaultClassLoader().loadClass(beanDefinition.getBeanClassName()); + } + catch (Exception e) { + return null; + } + } + private static Type findBeanType(AbstractBeanDefinition definition, String declaringClassName, String methodName) { Class factory = ClassUtils.resolveClassName(declaringClassName, null); Class[] params = getParamTypesFromBeanDefinitionFactory(factory, definition);