Skip to content

Commit d70079e

Browse files
committed
GH-1117 Enhance support for function composition to handle null returns
Resolves #1117
1 parent 8745f32 commit d70079e

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistry.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -725,7 +725,7 @@ Object doApply(Object input) {
725725

726726
input = this.fluxifyInputIfNecessary(input);
727727

728-
Object convertedInput = this.convertInputIfNecessary(input, this.inputType);
728+
Object convertedInput = input == null ? null : this.convertInputIfNecessary(input, this.inputType);
729729

730730
if (this.isRoutingFunction() || this.isComposed()) {
731731
result = ((Function) this.target).apply(convertedInput);

spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistryTests.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,15 @@ public void testEmptyPojoConversion() {
115115
assertThat(result).isEqualTo("{}");
116116
}
117117

118+
@SuppressWarnings({ "rawtypes", "unchecked" })
119+
@Test
120+
public void testCompositionWithNullReturnInBetween() {
121+
FunctionCatalog catalog = this.configureCatalog(CompositionWithNullReturnInBetween.class);
122+
Function function = catalog.lookup("echo1|echo2");
123+
String result = (String) function.apply(MessageBuilder.withPayload(new EmptyPojo()).build());
124+
assertThat(result).isEqualTo("null");
125+
}
126+
118127
@Test
119128
public void testFunctionEligibilityFiltering() {
120129
System.setProperty("spring.cloud.function.ineligible-definitions", "asJsonNode");
@@ -1455,4 +1464,24 @@ public Function<String, String> echo() {
14551464
public static class EmptyPojo {
14561465

14571466
}
1467+
1468+
@EnableAutoConfiguration
1469+
@Configuration
1470+
public static class CompositionWithNullReturnInBetween {
1471+
1472+
@Bean
1473+
public Function<String, String> echo1() {
1474+
return v -> null;
1475+
}
1476+
@Bean
1477+
public Function<String, String> echo2() {
1478+
return v -> {
1479+
if (v == null) {
1480+
return "null";
1481+
}
1482+
return v;
1483+
};
1484+
}
1485+
}
1486+
14581487
}

0 commit comments

Comments
 (0)