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 42f59b302..1086fc537 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 @@ -753,11 +753,6 @@ public class SimpleFunctionRegistry implements FunctionRegistry { if (functionInvocationHelper != null && CloudEventMessageUtils.isCloudEvent(((Message) input))) { result = functionInvocationHelper.postProcessResult(result, (Message) input); } - else { - Map 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))) { diff --git a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistryTests.java b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistryTests.java index 7b8fcedfb..f75304055 100644 --- a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistryTests.java +++ b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistryTests.java @@ -156,6 +156,17 @@ public class BeanFactoryAwareFunctionRegistryTests { assertThat(c.size()).isEqualTo(2); } + @Test + public void testReturnedMessageIsUnmodified() throws Exception { + FunctionCatalog catalog = this.configureCatalog(); + Function, Message> function = catalog.lookup("uppercaseMessage", "application/json"); + assertThat(function).isNotNull(); + + Message 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> uppercaseMessage() { + return message -> { + Message result = MessageBuilder.fromMessage(message) + .removeHeader("foo").setHeader("bar", "bar").build(); + return result; + }; + } + @Bean public Function consumerFunction() { return v -> {