diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistry.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistry.java index d3921062c..6a8bdb32c 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistry.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistry.java @@ -355,8 +355,9 @@ public class SimpleFunctionRegistry implements FunctionRegistry, FunctionInspect ? new BeanFactoryResolver(this.functionProperties.getApplicationContext()) : null; HeaderEnricher enricher = new HeaderEnricher(configuration.getOutputHeaderMappingExpression(), beanResolver); - FunctionInvocationWrapper w = new FunctionInvocationWrapper("outputHeaderEnricher", enricher, Message.class, Message.class); - composedFunction = (FunctionInvocationWrapper) w.andThen((Function) composedFunction); + Type mesageType = ResolvableType.forClassWithGenerics(Message.class, Object.class).getType(); + FunctionInvocationWrapper enricherWrapper = new FunctionInvocationWrapper("outputHeaderEnricher", enricher, mesageType, mesageType); + composedFunction = (FunctionInvocationWrapper) composedFunction.andThen((Function) enricherWrapper); composedFunction.functionDefinition = functionDefinition; } } diff --git a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/HeaderMappingTests.java b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/HeaderMappingTests.java index 16eaef369..67c3506e9 100644 --- a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/HeaderMappingTests.java +++ b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/HeaderMappingTests.java @@ -180,17 +180,17 @@ public class HeaderMappingTests { SampleFunctionConfiguration.class).web(WebApplicationType.NONE).run( "--logging.level.org.springframework.cloud.function=DEBUG", "--spring.main.lazy-initialization=true", - "--spring.cloud.function.configuration.foo.output-header-mapping-expression.key1='hello1'", - "--spring.cloud.function.configuration.foo.output-header-mapping-expression.key2=headers.contentType")) { + "--spring.cloud.function.configuration.foo.output-header-mapping-expression.keyOut1='hello1'", + "--spring.cloud.function.configuration.foo.output-header-mapping-expression.keyOut2=headers.contentType")) { FunctionCatalog functionCatalog = context.getBean(FunctionCatalog.class); FunctionInvocationWrapper function = functionCatalog.lookup("foo"); Message result = (Message) function.apply(MessageBuilder.withPayload("helo") .setHeader(MessageHeaders.CONTENT_TYPE, "application/json").build()); - assertThat(result.getHeaders().containsKey("key1")).isTrue(); - assertThat(result.getHeaders().get("key1")).isEqualTo("hello1"); - assertThat(result.getHeaders().containsKey("key2")).isTrue(); - assertThat(result.getHeaders().get("key2")).isEqualTo("application/json"); + assertThat(result.getHeaders().containsKey("keyOut1")).isTrue(); + assertThat(result.getHeaders().get("keyOut1")).isEqualTo("hello1"); + assertThat(result.getHeaders().containsKey("keyOut2")).isTrue(); + assertThat(result.getHeaders().get("keyOut2")).isEqualTo("application/json"); } } @@ -255,7 +255,10 @@ public class HeaderMappingTests { @Bean public Function, Message> foo() { - return x -> x; + return x -> { + assertThat(x.getHeaders().containsKey("keyOut1")).isFalse(); + return x; + }; } } }