diff --git a/pom.xml b/pom.xml
index bd8123e63..60ea10410 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,7 +20,8 @@
1.8
${java.version}
${java.version}
- 1.0.27.BUILD-SNAPSHOT
+
+ 1.0.26.RELEASE
spring-cloud-function
true
true
diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/FunctionProperties.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/FunctionProperties.java
index 2bda325e6..5ca33bd4e 100644
--- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/FunctionProperties.java
+++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/FunctionProperties.java
@@ -82,6 +82,7 @@ public class FunctionProperties implements EnvironmentAware, ApplicationContextA
*/
private String routingExpression;
+ @SuppressWarnings({ "unchecked", "rawtypes" })
public void setConfiguration(Map configuration) {
for (Entry entry : configuration.entrySet()) {
String propertyX = "spring.cloud.function.configuration." + entry.getKey() + ".input-header-mapping-expression.";
@@ -90,14 +91,18 @@ public class FunctionProperties implements EnvironmentAware, ApplicationContextA
for (Object k : headerMapping.keySet()) {
if (this.environment.containsProperty(propertyX + k) || this.environment.containsProperty(propertyY + k)) {
Map originalMapping = entry.getValue().getInputHeaderMappingExpression();
- entry.getValue().setInputHeaderMappingExpression(Collections.singletonMap("0", originalMapping));
- break;
- }
- else {
- break;
+ Map current = entry.getValue().getInputHeaderMappingExpression();
+ if (current.containsKey("0")) {
+ ((Map) current.get("0")).put(k, headerMapping.get(k));
+ }
+ else {
+ entry.getValue().setInputHeaderMappingExpression(Collections.singletonMap("0", originalMapping));
+ break;
+ }
}
}
}
+
this.configuration = configuration;
}
diff --git a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/InputHeaderMappingTests.java b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/InputHeaderMappingTests.java
index 10893248f..0467f16e7 100644
--- a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/InputHeaderMappingTests.java
+++ b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/InputHeaderMappingTests.java
@@ -69,6 +69,40 @@ public class InputHeaderMappingTests {
}
}
+ @Test
+ public void testInputHeaderMappingPropertyWithIndexMix() throws Exception {
+ try (ConfigurableApplicationContext context = new SpringApplicationBuilder(
+ SampleFunctionConfiguration.class).web(WebApplicationType.NONE).run(
+ "--logging.level.org.springframework.cloud.function=DEBUG",
+ "--spring.main.lazy-initialization=true",
+ "--spring.cloud.function.configuration.echo.input-header-mapping-expression[0].key1='hello1'",
+ "--spring.cloud.function.configuration.echo.input-header-mapping-expression[0].key2='hello2'",
+ "--spring.cloud.function.configuration.echo.input-header-mapping-expression.foo=headers.contentType")) {
+
+ FunctionCatalog functionCatalog = context.getBean(FunctionCatalog.class);
+ FunctionInvocationWrapper function = functionCatalog.lookup("echo");
+ function.apply(MessageBuilder.withPayload("helo")
+ .setHeader(MessageHeaders.CONTENT_TYPE, "application/json").build());
+ }
+ }
+
+ @Test
+ public void testInputHeaderMappingPropertyWithIndexMixDeux() throws Exception {
+ try (ConfigurableApplicationContext context = new SpringApplicationBuilder(
+ SampleFunctionConfiguration.class).web(WebApplicationType.NONE).run(
+ "--logging.level.org.springframework.cloud.function=DEBUG",
+ "--spring.main.lazy-initialization=true",
+ "--spring.cloud.function.configuration.echo.input-header-mapping-expression.key1='hello1'",
+ "--spring.cloud.function.configuration.echo.input-header-mapping-expression[0].key2='hello2'",
+ "--spring.cloud.function.configuration.echo.input-header-mapping-expression.foo=headers.contentType")) {
+
+ FunctionCatalog functionCatalog = context.getBean(FunctionCatalog.class);
+ FunctionInvocationWrapper function = functionCatalog.lookup("echo");
+ function.apply(MessageBuilder.withPayload("helo")
+ .setHeader(MessageHeaders.CONTENT_TYPE, "application/json").build());
+ }
+ }
+
@Test
public void testInputHeaderMappingPropertyWithoutIndex() throws Exception {
try (ConfigurableApplicationContext context = new SpringApplicationBuilder(