GH-919 Fix regression that was modifying result message

Resolves #919
This commit is contained in:
Oleg Zhurakousky
2022-08-24 16:19:22 +02:00
parent 9ad68f40f8
commit e83b0dfabe
2 changed files with 20 additions and 5 deletions

View File

@@ -753,11 +753,6 @@ public class SimpleFunctionRegistry implements FunctionRegistry {
if (functionInvocationHelper != null && CloudEventMessageUtils.isCloudEvent(((Message) input))) {
result = functionInvocationHelper.postProcessResult(result, (Message) input);
}
else {
Map<String, Object> headersMap = new HashMap<>(((Message) result).getHeaders());
this.sanitizeHeaders(((Message) input).getHeaders()).forEach((k, v) -> headersMap.putIfAbsent(k, v));
result = MessageBuilder.withPayload(((Message) result).getPayload()).copyHeaders(headersMap).build();
}
}
else {
if (functionInvocationHelper != null && CloudEventMessageUtils.isCloudEvent(((Message) input))) {

View File

@@ -156,6 +156,17 @@ public class BeanFactoryAwareFunctionRegistryTests {
assertThat(c.size()).isEqualTo(2);
}
@Test
public void testReturnedMessageIsUnmodified() throws Exception {
FunctionCatalog catalog = this.configureCatalog();
Function<Message<String>, Message<byte[]>> function = catalog.lookup("uppercaseMessage", "application/json");
assertThat(function).isNotNull();
Message<byte[]> result = function.apply(MessageBuilder.withPayload("bob").setHeader("foo", "foo").build());
assertThat(result.getHeaders().containsKey("foo")).isFalse();
assertThat(result.getHeaders().containsKey("bar")).isTrue();
}
@SuppressWarnings("unchecked")
@Test
public void testDefaultLookup() throws Exception {
@@ -1078,6 +1089,15 @@ public class BeanFactoryAwareFunctionRegistryTests {
return v -> v.toUpperCase();
}
@Bean
public Function<Message<String>, Message<String>> uppercaseMessage() {
return message -> {
Message<String> result = MessageBuilder.fromMessage(message)
.removeHeader("foo").setHeader("bar", "bar").build();
return result;
};
}
@Bean
public Function<String, Void> consumerFunction() {
return v -> {