GH-764 Fix output header mapping timing

Resolves #764
This commit is contained in:
Oleg Zhurakousky
2021-11-09 08:19:44 +01:00
parent 255211df85
commit 28eea09bc8
2 changed files with 13 additions and 9 deletions

View File

@@ -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<Object, Object>) composedFunction);
Type mesageType = ResolvableType.forClassWithGenerics(Message.class, Object.class).getType();
FunctionInvocationWrapper enricherWrapper = new FunctionInvocationWrapper("outputHeaderEnricher", enricher, mesageType, mesageType);
composedFunction = (FunctionInvocationWrapper) composedFunction.andThen((Function<Object, Object>) enricherWrapper);
composedFunction.functionDefinition = functionDefinition;
}
}

View File

@@ -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<byte[]> result = (Message<byte[]>) 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<?>, Message<?>> foo() {
return x -> x;
return x -> {
assertThat(x.getHeaders().containsKey("keyOut1")).isFalse();
return x;
};
}
}
}