diff --git a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/SmartMessageMethodArgumentResolver.java b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/SmartMessageMethodArgumentResolver.java index 187abdd8d..102825246 100644 --- a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/SmartMessageMethodArgumentResolver.java +++ b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/SmartMessageMethodArgumentResolver.java @@ -74,7 +74,7 @@ class SmartMessageMethodArgumentResolver extends MessageMethodArgumentResolver { Object payload = message.getPayload(); if (isEmptyPayload(payload)) { if (isExplicitNullPayload(payload)) { - return null; + return message; } throw new MessageConversionException(message, "Cannot convert from actual payload type '" 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 81bb5e0e6..ba8284f77 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 @@ -149,16 +149,21 @@ public class ImplicitFunctionBindingTests { try (ConfigurableApplicationContext context = new SpringApplicationBuilder( TestChannelBinderConfiguration.getCompleteConfiguration(NullMessagerConfiguration.class)) .web(WebApplicationType.NONE) - .run("--spring.jmx.enabled=false", "--spring.cloud.function.definition=func")) { + .run("--spring.jmx.enabled=false", "--spring.cloud.function.definition=func;funcMessage")) { InputDestination inputDestination = context.getBean(InputDestination.class); OutputDestination outputDestination = context.getBean(OutputDestination.class); Message inputMessage = MessageBuilder.withPayload(KafkaNull.INSTANCE).build(); - inputDestination.send(inputMessage); + inputDestination.send(inputMessage, "func-in-0"); - Message outputMessage = outputDestination.receive(); + Message outputMessage = outputDestination.receive(1000, "func-out-0"); + assertThat(outputMessage.getPayload()).isEqualTo("NULL".getBytes()); + + inputDestination.send(inputMessage, "funcMessage-in-0"); + + outputMessage = outputDestination.receive(1000, "funcMessage-out-0"); assertThat(outputMessage.getPayload()).isEqualTo("NULL".getBytes()); } } @@ -941,6 +946,22 @@ public class ImplicitFunctionBindingTests { return "NULL"; }; } + + @Bean + public Function, String> funcMessage() { + return value -> { + Object v = value.getPayload(); + System.out.println(v.getClass()); + if (value.getPayload() instanceof Object) { + System.out.println(""); + } + if (((Object) value.getPayload()).getClass() != null) { + System.out.println(); + } + //assertThat(value.getPayload().getClass().getName()).isEqualTo("org.springframework.kafka.support.KafkaNull"); + return "NULL"; + }; + } } @EnableAutoConfiguration