GH-676 Fix mixed (index and not) input-header-mapping-expression
This commit is contained in:
@@ -82,6 +82,7 @@ public class FunctionProperties implements EnvironmentAware, ApplicationContextA
|
||||
*/
|
||||
private String routingExpression;
|
||||
|
||||
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||
public void setConfiguration(Map<String, FunctionConfigurationProperties> configuration) {
|
||||
for (Entry<String, FunctionConfigurationProperties> 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<String, Object> 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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user