diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/AbstractComposableFunctionRegistry.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/AbstractComposableFunctionRegistry.java index b944a6814..363434abb 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/AbstractComposableFunctionRegistry.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/AbstractComposableFunctionRegistry.java @@ -204,14 +204,14 @@ public abstract class AbstractComposableFunctionRegistry implements FunctionRegi */ protected void register(FunctionRegistration registration, String key) { Object target = registration.getTarget(); - if (key.equals("uppercase")) { - System.out.println(); - } if (registration.getType() != null) { this.addType(key, registration.getType()); } else { FunctionType functionType = findType(registration, key); + if (functionType == null) { + return; // TODO fixme + } this.addType(key, functionType); registration.type(functionType.getType()); } diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfiguration.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfiguration.java index 6398ec22b..2e01b60c5 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfiguration.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfiguration.java @@ -16,6 +16,7 @@ package org.springframework.cloud.function.context.config; +import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -156,13 +157,17 @@ public class ContextFunctionCatalogAutoConfiguration { if (functionType == null) { functionType = functionByNameExist(name) ? new FunctionType(functionRegistration.getTarget().getClass()) - : new FunctionType( - FunctionContextUtils.findType(name, this.beanFactory)); + : this.findType(name); } return functionType; } + private FunctionType findType(String name) { + Type type = FunctionContextUtils.findType(name, this.beanFactory); + return type == null ? null : new FunctionType(type); + } + // @checkstyle:off /** * @param initial a registration 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 aa072183f..3ff0116cd 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 @@ -67,16 +67,17 @@ public abstract class FunctionContextUtils { param = type.getType(); } else { - Class beanClass = definition.getBeanClass(); + Class beanClass = definition.hasBeanClass() ? definition.getBeanClass() : null; if (beanClass != null && !FunctionFactoryMetadata.class.isAssignableFrom(beanClass)) { param = beanClass; } else { - // assume FunctionFactoryMetadata - FunctionFactoryMetadata factory = (FunctionFactoryMetadata) registry - .getBean(name); - param = factory.getFactoryMethod().getGenericReturnType(); + Object bean = registry.getBean(name); + // could be FunctionFactoryMetadata. . . TODO investigate and fix + if (bean instanceof FunctionFactoryMetadata) { + param = ((FunctionFactoryMetadata) bean).getFactoryMethod().getGenericReturnType(); + } } } }