diff --git a/spring-cloud-stream/src/test/java/org/springframework/cloud/stream/function/ImplicitFunctionBindingTests.java b/spring-cloud-stream/src/test/java/org/springframework/cloud/stream/function/ImplicitFunctionBindingTests.java index 2565b2bd0..4fe2f48cd 100644 --- a/spring-cloud-stream/src/test/java/org/springframework/cloud/stream/function/ImplicitFunctionBindingTests.java +++ b/spring-cloud-stream/src/test/java/org/springframework/cloud/stream/function/ImplicitFunctionBindingTests.java @@ -384,7 +384,8 @@ public class ImplicitFunctionBindingTests { System.clearProperty("spring.cloud.function.definition"); try (ConfigurableApplicationContext context = new SpringApplicationBuilder( TestChannelBinderConfiguration.getCompleteConfiguration(ReactiveFunctionConfiguration.class)) - .web(WebApplicationType.NONE).run("--spring.jmx.enabled=false")) { + .web(WebApplicationType.NONE).run("--spring.jmx.enabled=false", + "--spring.cloud.function.definition=echo")) { InputDestination inputDestination = context.getBean(InputDestination.class); OutputDestination outputDestination = context.getBean(OutputDestination.class); @@ -872,6 +873,27 @@ public class ImplicitFunctionBindingTests { } } + @Test + public void testGh2054() { + System.clearProperty("spring.cloud.function.definition"); + try (ConfigurableApplicationContext context = new SpringApplicationBuilder( + TestChannelBinderConfiguration.getCompleteConfiguration(ReactiveFunctionConfiguration.class)) + .web(WebApplicationType.NONE).run("--spring.jmx.enabled=false", + "--spring.cloud.function.definition=reactivePojoMessage")) { + InputDestination inputDestination = context.getBean(InputDestination.class); + OutputDestination outputDestination = context.getBean(OutputDestination.class); + + String jsonPerson = "{\"name\":\"Ricky\",\"id\":1}"; + + inputDestination.send(MessageBuilder.withPayload(jsonPerson.getBytes()).build()); + + Message result = outputDestination.receive(2000); + assertThat(new String(result.getPayload())).isEqualTo("{\"name\":\"RICKY\",\"id\":1}"); + } + } + + + @SuppressWarnings("rawtypes") @Test public void testWithNativeEncodingImperative() { @@ -1197,6 +1219,15 @@ public class ImplicitFunctionBindingTests { return value; }); } + + @Bean + public Function>, Flux>> reactivePojoMessage() { + return flux -> flux.map(message -> { + Person p = message.getPayload(); + p.setName(p.getName().toUpperCase()); + return MessageBuilder.withPayload(p).copyHeaders(message.getHeaders()).build(); + }); + } } @EnableAutoConfiguration