GH-676 Fix mixed (index and not) input-header-mapping-expression
This commit is contained in:
3
pom.xml
3
pom.xml
@@ -20,7 +20,8 @@
|
|||||||
<java.version>1.8</java.version>
|
<java.version>1.8</java.version>
|
||||||
<maven.compiler.source>${java.version}</maven.compiler.source>
|
<maven.compiler.source>${java.version}</maven.compiler.source>
|
||||||
<maven.compiler.target>${java.version}</maven.compiler.target>
|
<maven.compiler.target>${java.version}</maven.compiler.target>
|
||||||
<wrapper.version>1.0.27.BUILD-SNAPSHOT</wrapper.version>
|
<!-- <wrapper.version>1.0.27.BUILD-SNAPSHOT</wrapper.version> -->
|
||||||
|
<wrapper.version>1.0.26.RELEASE</wrapper.version>
|
||||||
<docs.main>spring-cloud-function</docs.main>
|
<docs.main>spring-cloud-function</docs.main>
|
||||||
<maven-checkstyle-plugin.failsOnError>true</maven-checkstyle-plugin.failsOnError>
|
<maven-checkstyle-plugin.failsOnError>true</maven-checkstyle-plugin.failsOnError>
|
||||||
<maven-checkstyle-plugin.failsOnViolation>true
|
<maven-checkstyle-plugin.failsOnViolation>true
|
||||||
|
|||||||
@@ -82,6 +82,7 @@ public class FunctionProperties implements EnvironmentAware, ApplicationContextA
|
|||||||
*/
|
*/
|
||||||
private String routingExpression;
|
private String routingExpression;
|
||||||
|
|
||||||
|
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||||
public void setConfiguration(Map<String, FunctionConfigurationProperties> configuration) {
|
public void setConfiguration(Map<String, FunctionConfigurationProperties> configuration) {
|
||||||
for (Entry<String, FunctionConfigurationProperties> entry : configuration.entrySet()) {
|
for (Entry<String, FunctionConfigurationProperties> entry : configuration.entrySet()) {
|
||||||
String propertyX = "spring.cloud.function.configuration." + entry.getKey() + ".input-header-mapping-expression.";
|
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()) {
|
for (Object k : headerMapping.keySet()) {
|
||||||
if (this.environment.containsProperty(propertyX + k) || this.environment.containsProperty(propertyY + k)) {
|
if (this.environment.containsProperty(propertyX + k) || this.environment.containsProperty(propertyY + k)) {
|
||||||
Map<String, Object> originalMapping = entry.getValue().getInputHeaderMappingExpression();
|
Map<String, Object> originalMapping = entry.getValue().getInputHeaderMappingExpression();
|
||||||
entry.getValue().setInputHeaderMappingExpression(Collections.singletonMap("0", originalMapping));
|
Map current = entry.getValue().getInputHeaderMappingExpression();
|
||||||
break;
|
if (current.containsKey("0")) {
|
||||||
}
|
((Map) current.get("0")).put(k, headerMapping.get(k));
|
||||||
else {
|
}
|
||||||
break;
|
else {
|
||||||
|
entry.getValue().setInputHeaderMappingExpression(Collections.singletonMap("0", originalMapping));
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.configuration = configuration;
|
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
|
@Test
|
||||||
public void testInputHeaderMappingPropertyWithoutIndex() throws Exception {
|
public void testInputHeaderMappingPropertyWithoutIndex() throws Exception {
|
||||||
try (ConfigurableApplicationContext context = new SpringApplicationBuilder(
|
try (ConfigurableApplicationContext context = new SpringApplicationBuilder(
|
||||||
|
|||||||
Reference in New Issue
Block a user