diff --git a/core/spring-cloud-stream/pom.xml b/core/spring-cloud-stream/pom.xml index 2cfbb10bd..c573abe70 100644 --- a/core/spring-cloud-stream/pom.xml +++ b/core/spring-cloud-stream/pom.xml @@ -84,6 +84,10 @@ org.jetbrains.kotlin kotlin-stdlib-jdk8 + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + diff --git a/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/AbstractMessageChannelBinder.java b/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/AbstractMessageChannelBinder.java index f9daf5c0c..6b966fd75 100644 --- a/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/AbstractMessageChannelBinder.java +++ b/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/AbstractMessageChannelBinder.java @@ -27,6 +27,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import org.apache.commons.logging.Log; import org.springframework.beans.factory.BeanFactoryAware; @@ -147,7 +148,7 @@ public abstract class AbstractMessageChannelBinder binder = new AbstractMessageChannelBinder<>(null, null) { + @Override + protected MessageHandler createProducerMessageHandler(ProducerDestination destination, ProducerProperties producerProperties, MessageChannel errorChannel) { + return null; + } + + @Override + protected MessageProducer createConsumerEndpoint(ConsumerDestination destination, String group, ConsumerProperties properties) { + return null; + } + }; + final GenericApplicationContext applicationContext = new GenericApplicationContext(); + applicationContext.refresh(); + binder.setApplicationContext(applicationContext); + binder.onInit(); + + Field objectMapperField = ReflectionUtils.findField(AbstractMessageChannelBinder.class, "objectMapper"); + assertThat(objectMapperField).isNotNull(); + ReflectionUtils.makeAccessible(objectMapperField); + final ObjectMapper objectMapper = (ObjectMapper) ReflectionUtils.getField(objectMapperField, binder); + assertThat(objectMapper).isNotNull(); + + Duration duration = Duration.ofHours(1); + Map properties = Map.of("foo", duration); + final Map convertedMap = objectMapper.convertValue(properties, Map.class); + + assertThat(convertedMap).isNotEmpty(); + } +}