Cache result of isMessage() computation before function is wrapped
Otherwise you get the wrong result when you go back and ask later (but only if the bean is a singleton with no bean definition).
This commit is contained in:
@@ -233,6 +233,18 @@ public class ContextFunctionCatalogAutoConfigurationTests {
|
||||
.isAssignableFrom(Integer.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void singletonMessageFunction() {
|
||||
create(SingletonMessageConfiguration.class);
|
||||
assertThat(context.getBean("function")).isInstanceOf(Function.class);
|
||||
assertThat(catalog.lookupFunction("function")).isInstanceOf(Function.class);
|
||||
assertThat(inspector.getInputType(catalog.lookupFunction("function")))
|
||||
.isAssignableFrom(Integer.class);
|
||||
assertThat(inspector.getInputWrapper(catalog.lookupFunction("function")))
|
||||
.isAssignableFrom(Integer.class);
|
||||
assertThat(inspector.isMessage(catalog.lookupFunction("function"))).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void nonParametericTypeFunction() {
|
||||
create(NonParametricTypeSingletonConfiguration.class);
|
||||
@@ -529,6 +541,17 @@ public class ContextFunctionCatalogAutoConfigurationTests {
|
||||
}
|
||||
}
|
||||
|
||||
@EnableAutoConfiguration
|
||||
@Configuration
|
||||
protected static class SingletonMessageConfiguration implements BeanFactoryPostProcessor {
|
||||
|
||||
@Override
|
||||
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
|
||||
throws BeansException {
|
||||
beanFactory.registerSingleton("function", new SingletonMessageFunction());
|
||||
}
|
||||
}
|
||||
|
||||
@EnableAutoConfiguration
|
||||
@Configuration
|
||||
protected static class NonParametricTypeSingletonConfiguration {
|
||||
@@ -547,6 +570,15 @@ public class ContextFunctionCatalogAutoConfigurationTests {
|
||||
|
||||
}
|
||||
|
||||
protected static class SingletonMessageFunction implements Function<Message<Integer>, Message<String>> {
|
||||
|
||||
@Override
|
||||
public Message<String> apply(Message<Integer> input) {
|
||||
return MessageBuilder.withPayload("value=" + input.getPayload()).build();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@EnableAutoConfiguration
|
||||
@Configuration
|
||||
@ComponentScan(basePackageClasses = GenericFunction.class)
|
||||
|
||||
Reference in New Issue
Block a user