From 32d4f582c89bdbbb25735d48f2769b5e3a745b78 Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Tue, 9 Sep 2025 11:49:22 -0400 Subject: [PATCH 1/3] Initial changes for Jackson 3 support --- .../jackson/BusJacksonIntegrationTests.java | 9 +++-- spring-cloud-bus/pom.xml | 2 +- .../jackson/BusJacksonAutoConfiguration.java | 36 ++++++++++--------- .../cloud/bus/jackson/SubtypeModule.java | 3 +- .../cloud/bus/jackson/SerializationTests.java | 11 +++--- .../cloud/bus/jackson/SubtypeModuleTests.java | 10 +++--- 6 files changed, 36 insertions(+), 35 deletions(-) diff --git a/spring-cloud-bus-tests/src/test/java/org/springframework/cloud/bus/jackson/BusJacksonIntegrationTests.java b/spring-cloud-bus-tests/src/test/java/org/springframework/cloud/bus/jackson/BusJacksonIntegrationTests.java index 617ad513..0e64fc54 100644 --- a/spring-cloud-bus-tests/src/test/java/org/springframework/cloud/bus/jackson/BusJacksonIntegrationTests.java +++ b/spring-cloud-bus-tests/src/test/java/org/springframework/cloud/bus/jackson/BusJacksonIntegrationTests.java @@ -24,7 +24,6 @@ import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import com.fasterxml.jackson.databind.SerializationFeature; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -47,8 +46,9 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; +import static tools.jackson.databind.cfg.DateTimeFeature.WRITE_DATES_AS_TIMESTAMPS; -@SpringBootTest(properties = "spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS:true", +@SpringBootTest(/*properties = "spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS:true",*/ webEnvironment = RANDOM_PORT) @DirtiesContext public class BusJacksonIntegrationTests { @@ -68,9 +68,8 @@ public void testCustomEventSerializes() { assertThat(this.converter.isMapperCreated()).isFalse(); // set by configuration - assertThat(this.converter.getMapper() - .getSerializationConfig() - .isEnabled(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)).isTrue(); + assertThat(this.converter.getMapper().build().serializationConfig() + .isEnabled(WRITE_DATES_AS_TIMESTAMPS)).isTrue(); Map map = this.rest.getForObject("http://localhost:" + this.port + "/date", Map.class); assertThat(map).containsOnlyKeys("date"); diff --git a/spring-cloud-bus/pom.xml b/spring-cloud-bus/pom.xml index 65ab06b1..65dd9495 100644 --- a/spring-cloud-bus/pom.xml +++ b/spring-cloud-bus/pom.xml @@ -47,7 +47,7 @@ spring-integration-core - com.fasterxml.jackson.dataformat + tools.jackson.dataformat jackson-dataformat-cbor true diff --git a/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/jackson/BusJacksonAutoConfiguration.java b/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/jackson/BusJacksonAutoConfiguration.java index 4a847977..46df0c3a 100644 --- a/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/jackson/BusJacksonAutoConfiguration.java +++ b/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/jackson/BusJacksonAutoConfiguration.java @@ -21,11 +21,14 @@ import java.util.List; import java.util.Set; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.exc.InvalidTypeIdException; -import com.fasterxml.jackson.dataformat.cbor.CBORFactory; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.cfg.MapperBuilder; +import tools.jackson.databind.exc.InvalidTypeIdException; +import tools.jackson.databind.json.JsonMapper; +import tools.jackson.dataformat.cbor.CBORFactory; +import tools.jackson.dataformat.cbor.CBORMapper; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; @@ -66,7 +69,7 @@ public class BusJacksonAutoConfiguration { // otherwise RemoteApplicationEventRegistrar will register the bean @Bean @ConditionalOnMissingBean(name = "busJsonConverter") - public AbstractMessageConverter busJsonConverter(@Autowired(required = false) ObjectMapper objectMapper) { + public AbstractMessageConverter busJsonConverter(@Autowired(required = false) MapperBuilder objectMapper) { return new BusJacksonMessageConverter(objectMapper); } @@ -77,7 +80,7 @@ protected static class CborConfiguration { @Bean public AbstractMessageConverter busCborConverter() { return new BusJacksonMessageConverter(new MimeType("application", "cbor"), - new ObjectMapper(new CBORFactory())); + CBORMapper.builder()); } } @@ -90,7 +93,7 @@ class BusJacksonMessageConverter extends AbstractMessageConverter implements Ini private static final String DEFAULT_PACKAGE = ClassUtils.getPackageName(RemoteApplicationEvent.class); - private final ObjectMapper mapper; + private final MapperBuilder mapperBuilder; private final boolean mapperCreated; @@ -101,20 +104,20 @@ private BusJacksonMessageConverter() { } @Autowired(required = false) - BusJacksonMessageConverter(@Nullable ObjectMapper objectMapper) { + BusJacksonMessageConverter(@Nullable MapperBuilder objectMapper) { this(MimeTypeUtils.APPLICATION_JSON, objectMapper); } @Autowired(required = false) - BusJacksonMessageConverter(MimeType mimeType, @Nullable ObjectMapper objectMapper) { + BusJacksonMessageConverter(MimeType mimeType, @Nullable MapperBuilder objectMapper) { super(mimeType); if (objectMapper != null) { - this.mapper = objectMapper; + this.mapperBuilder = objectMapper; this.mapperCreated = false; } else { - this.mapper = new ObjectMapper(); + this.mapperBuilder = JsonMapper.builder(); this.mapperCreated = true; } } @@ -123,8 +126,8 @@ private BusJacksonMessageConverter() { return this.mapperCreated; } - /* for testing */ ObjectMapper getMapper() { - return this.mapper; + /* for testing */ MapperBuilder getMapper() { + return this.mapperBuilder; } public void setPackagesToScan(String[] packagesToScan) { @@ -168,13 +171,14 @@ protected boolean supports(Class aClass) { @Override public Object convertFromInternal(Message message, Class targetClass, Object conversionHint) { + ObjectMapper mapper = this.mapperBuilder.build(); Object result = null; try { Object payload = message.getPayload(); if (payload instanceof byte[]) { try { - result = this.mapper.readValue((byte[]) payload, targetClass); + result = mapper.readValue((byte[]) payload, targetClass); } catch (InvalidTypeIdException e) { return new UnknownRemoteApplicationEvent(new Object(), e.getTypeId(), (byte[]) payload); @@ -182,7 +186,7 @@ public Object convertFromInternal(Message message, Class targetClass, Obje } else if (payload instanceof String) { try { - result = this.mapper.readValue((String) payload, targetClass); + result = mapper.readValue((String) payload, targetClass); } catch (InvalidTypeIdException e) { return new UnknownRemoteApplicationEvent(new Object(), e.getTypeId(), @@ -203,8 +207,8 @@ else if (payload instanceof RemoteApplicationEvent) { } @Override - public void afterPropertiesSet() throws Exception { - this.mapper.registerModule(new SubtypeModule(findSubTypes())); + public void afterPropertiesSet() { + this.mapperBuilder.addModule(new SubtypeModule(findSubTypes())); } } diff --git a/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/jackson/SubtypeModule.java b/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/jackson/SubtypeModule.java index 148576d5..07e7c746 100644 --- a/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/jackson/SubtypeModule.java +++ b/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/jackson/SubtypeModule.java @@ -16,7 +16,8 @@ package org.springframework.cloud.bus.jackson; -import com.fasterxml.jackson.databind.module.SimpleModule; + +import tools.jackson.databind.module.SimpleModule; /** * @author Spencer Gibb diff --git a/spring-cloud-bus/src/test/java/org/springframework/cloud/bus/jackson/SerializationTests.java b/spring-cloud-bus/src/test/java/org/springframework/cloud/bus/jackson/SerializationTests.java index d5c0c0d5..3b5f2d81 100644 --- a/spring-cloud-bus/src/test/java/org/springframework/cloud/bus/jackson/SerializationTests.java +++ b/spring-cloud-bus/src/test/java/org/springframework/cloud/bus/jackson/SerializationTests.java @@ -18,8 +18,9 @@ import java.util.Collections; -import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.Test; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; import org.springframework.cloud.bus.event.EnvironmentChangeRemoteApplicationEvent; import org.springframework.cloud.bus.event.RefreshRemoteApplicationEvent; @@ -33,12 +34,11 @@ */ public class SerializationTests { - ObjectMapper mapper = new ObjectMapper(); + ObjectMapper mapper; @Test public void vanillaDeserialize() throws Exception { - this.mapper.registerModule( - new SubtypeModule(RefreshRemoteApplicationEvent.class, EnvironmentChangeRemoteApplicationEvent.class)); + this.mapper = JsonMapper.builder().addModule(new SubtypeModule(RefreshRemoteApplicationEvent.class, EnvironmentChangeRemoteApplicationEvent.class)).build(); EnvironmentChangeRemoteApplicationEvent source = new EnvironmentChangeRemoteApplicationEvent(this, "foo", "bar", Collections.emptyMap()); String value = this.mapper.writeValueAsString(source); @@ -50,8 +50,7 @@ public void vanillaDeserialize() throws Exception { @Test public void deserializeOldValueWithNoId() throws Exception { - this.mapper.registerModule( - new SubtypeModule(RefreshRemoteApplicationEvent.class, EnvironmentChangeRemoteApplicationEvent.class)); + this.mapper = JsonMapper.builder().addModule(new SubtypeModule(RefreshRemoteApplicationEvent.class, EnvironmentChangeRemoteApplicationEvent.class)).build(); EnvironmentChangeRemoteApplicationEvent source = new EnvironmentChangeRemoteApplicationEvent(this, "foo", "bar", Collections.emptyMap()); String value = this.mapper.writeValueAsString(source); diff --git a/spring-cloud-bus/src/test/java/org/springframework/cloud/bus/jackson/SubtypeModuleTests.java b/spring-cloud-bus/src/test/java/org/springframework/cloud/bus/jackson/SubtypeModuleTests.java index c59afc1b..e4cd1c07 100644 --- a/spring-cloud-bus/src/test/java/org/springframework/cloud/bus/jackson/SubtypeModuleTests.java +++ b/spring-cloud-bus/src/test/java/org/springframework/cloud/bus/jackson/SubtypeModuleTests.java @@ -17,9 +17,9 @@ package org.springframework.cloud.bus.jackson; import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.PropertyNamingStrategy; import org.junit.Test; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; import org.springframework.cloud.bus.event.AckRemoteApplicationEvent; import org.springframework.cloud.bus.event.RemoteApplicationEvent; @@ -38,8 +38,7 @@ public class SubtypeModuleTests { @Test public void testDeserializeSubclass() throws Exception { - ObjectMapper mapper = new ObjectMapper(); - mapper.registerModule(new SubtypeModule(MyRemoteApplicationEvent.class)); + ObjectMapper mapper = JsonMapper.builder().addModule(new SubtypeModule(MyRemoteApplicationEvent.class)).build(); RemoteApplicationEvent event = mapper.readValue( "{\"type\":\"my\", \"destinationService\":\"myservice\", \"originService\":\"myorigin\"}", @@ -60,8 +59,7 @@ public void testDeserializeWhenTypeIsKnown() throws Exception { @Test public void testDeserializeCustomizedObjectMapper() throws Exception { - ObjectMapper mapper = new ObjectMapper(); - mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE); + JsonMapper.Builder mapper = JsonMapper.builder().propertyNamingStrategy(tools.jackson.databind.PropertyNamingStrategies.SNAKE_CASE); BusJacksonMessageConverter converter = new BusJacksonMessageConverter(mapper); converter.afterPropertiesSet(); From 567c076968e38c7ed427e77cc3d6222389fa6c89 Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Wed, 17 Sep 2025 13:05:55 -0400 Subject: [PATCH 2/3] Additional changes for Jackson 3 --- .../bus/jackson/BusJacksonIntegrationTests.java | 7 +++---- .../cloud/bus/event/RemoteApplicationEvent.java | 6 +++--- .../bus/jackson/BusJacksonAutoConfiguration.java | 15 +++++++-------- .../cloud/bus/jackson/SubtypeModule.java | 1 - .../jackson/RemoteApplicationEventScanTests.java | 8 ++++---- .../cloud/bus/jackson/SerializationTests.java | 12 ++++++++++-- .../cloud/bus/jackson/SubtypeModuleTests.java | 5 +++-- 7 files changed, 30 insertions(+), 24 deletions(-) diff --git a/spring-cloud-bus-tests/src/test/java/org/springframework/cloud/bus/jackson/BusJacksonIntegrationTests.java b/spring-cloud-bus-tests/src/test/java/org/springframework/cloud/bus/jackson/BusJacksonIntegrationTests.java index 0e64fc54..704c3dd2 100644 --- a/spring-cloud-bus-tests/src/test/java/org/springframework/cloud/bus/jackson/BusJacksonIntegrationTests.java +++ b/spring-cloud-bus-tests/src/test/java/org/springframework/cloud/bus/jackson/BusJacksonIntegrationTests.java @@ -48,8 +48,7 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; import static tools.jackson.databind.cfg.DateTimeFeature.WRITE_DATES_AS_TIMESTAMPS; -@SpringBootTest(/*properties = "spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS:true",*/ - webEnvironment = RANDOM_PORT) +@SpringBootTest(properties = "spring.jackson.datetime.write-dates-as-timestamps=true", webEnvironment = RANDOM_PORT) @DirtiesContext public class BusJacksonIntegrationTests { @@ -68,8 +67,8 @@ public void testCustomEventSerializes() { assertThat(this.converter.isMapperCreated()).isFalse(); // set by configuration - assertThat(this.converter.getMapper().build().serializationConfig() - .isEnabled(WRITE_DATES_AS_TIMESTAMPS)).isTrue(); + assertThat(this.converter.getMapper().build().serializationConfig().isEnabled(WRITE_DATES_AS_TIMESTAMPS)) + .isTrue(); Map map = this.rest.getForObject("http://localhost:" + this.port + "/date", Map.class); assertThat(map).containsOnlyKeys("date"); diff --git a/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/event/RemoteApplicationEvent.java b/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/event/RemoteApplicationEvent.java index 12ecd407..09e15675 100644 --- a/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/event/RemoteApplicationEvent.java +++ b/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/event/RemoteApplicationEvent.java @@ -41,11 +41,11 @@ public abstract class RemoteApplicationEvent extends ApplicationEvent { protected static final PathDestinationFactory DEFAULT_DESTINATION_FACTORY = new PathDestinationFactory(); - private final String originService; + private String originService; - private final String destinationService; + private String destinationService; - private final String id; + private String id; protected RemoteApplicationEvent() { // for serialization libs like jackson diff --git a/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/jackson/BusJacksonAutoConfiguration.java b/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/jackson/BusJacksonAutoConfiguration.java index 46df0c3a..de04b99e 100644 --- a/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/jackson/BusJacksonAutoConfiguration.java +++ b/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/jackson/BusJacksonAutoConfiguration.java @@ -69,7 +69,7 @@ public class BusJacksonAutoConfiguration { // otherwise RemoteApplicationEventRegistrar will register the bean @Bean @ConditionalOnMissingBean(name = "busJsonConverter") - public AbstractMessageConverter busJsonConverter(@Autowired(required = false) MapperBuilder objectMapper) { + public AbstractMessageConverter busJsonConverter(@Autowired(required = false) ObjectMapper objectMapper) { return new BusJacksonMessageConverter(objectMapper); } @@ -79,8 +79,7 @@ protected static class CborConfiguration { @Bean public AbstractMessageConverter busCborConverter() { - return new BusJacksonMessageConverter(new MimeType("application", "cbor"), - CBORMapper.builder()); + return new BusJacksonMessageConverter(new MimeType("application", "cbor"), CBORMapper.builder().build()); } } @@ -104,16 +103,16 @@ private BusJacksonMessageConverter() { } @Autowired(required = false) - BusJacksonMessageConverter(@Nullable MapperBuilder objectMapper) { + BusJacksonMessageConverter(@Nullable ObjectMapper objectMapper) { this(MimeTypeUtils.APPLICATION_JSON, objectMapper); } @Autowired(required = false) - BusJacksonMessageConverter(MimeType mimeType, @Nullable MapperBuilder objectMapper) { + BusJacksonMessageConverter(MimeType mimeType, @Nullable ObjectMapper objectMapper) { super(mimeType); if (objectMapper != null) { - this.mapperBuilder = objectMapper; + this.mapperBuilder = objectMapper.rebuild(); this.mapperCreated = false; } else { @@ -207,8 +206,8 @@ else if (payload instanceof RemoteApplicationEvent) { } @Override - public void afterPropertiesSet() { - this.mapperBuilder.addModule(new SubtypeModule(findSubTypes())); + public void afterPropertiesSet() { + this.mapperBuilder.subtypeResolver().registerSubtypes(findSubTypes()); } } diff --git a/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/jackson/SubtypeModule.java b/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/jackson/SubtypeModule.java index 07e7c746..61c24048 100644 --- a/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/jackson/SubtypeModule.java +++ b/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/jackson/SubtypeModule.java @@ -16,7 +16,6 @@ package org.springframework.cloud.bus.jackson; - import tools.jackson.databind.module.SimpleModule; /** diff --git a/spring-cloud-bus/src/test/java/org/springframework/cloud/bus/jackson/RemoteApplicationEventScanTests.java b/spring-cloud-bus/src/test/java/org/springframework/cloud/bus/jackson/RemoteApplicationEventScanTests.java index bcb735db..fffda7d8 100644 --- a/spring-cloud-bus/src/test/java/org/springframework/cloud/bus/jackson/RemoteApplicationEventScanTests.java +++ b/spring-cloud-bus/src/test/java/org/springframework/cloud/bus/jackson/RemoteApplicationEventScanTests.java @@ -21,10 +21,10 @@ import java.util.LinkedHashSet; import java.util.List; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.jsontype.NamedType; import org.junit.Test; import test.foo.bar.FooBarTestRemoteApplicationEvent; +import tools.jackson.databind.cfg.MapperBuilder; +import tools.jackson.databind.jsontype.NamedType; import org.springframework.boot.Banner; import org.springframework.boot.WebApplicationType; @@ -96,11 +96,11 @@ private ConfigurableApplicationContext createTestContext(Class configuration) private void assertConverterBeanAfterPropertiesSet(final String[] expectedPackageToScan, final Class... expectedRegisterdClasses) { - final ObjectMapper mapper = (ObjectMapper) ReflectionTestUtils.getField(this.converter, "mapper"); + final MapperBuilder mapper = this.converter.getMapper(); @SuppressWarnings("unchecked") final LinkedHashSet registeredSubtypes = (LinkedHashSet) ReflectionTestUtils - .getField(mapper.getSubtypeResolver(), "_registeredSubtypes"); + .getField(mapper.subtypeResolver(), "_registeredSubtypes"); final List> expectedRegisterdClassesAsList = new ArrayList<>(Arrays.asList(expectedRegisterdClasses)); addStandardSpringCloudEventBusEvents(expectedRegisterdClassesAsList); diff --git a/spring-cloud-bus/src/test/java/org/springframework/cloud/bus/jackson/SerializationTests.java b/spring-cloud-bus/src/test/java/org/springframework/cloud/bus/jackson/SerializationTests.java index 3b5f2d81..8a1aa65d 100644 --- a/spring-cloud-bus/src/test/java/org/springframework/cloud/bus/jackson/SerializationTests.java +++ b/spring-cloud-bus/src/test/java/org/springframework/cloud/bus/jackson/SerializationTests.java @@ -19,6 +19,7 @@ import java.util.Collections; import org.junit.Test; +import tools.jackson.databind.MapperFeature; import tools.jackson.databind.ObjectMapper; import tools.jackson.databind.json.JsonMapper; @@ -38,7 +39,11 @@ public class SerializationTests { @Test public void vanillaDeserialize() throws Exception { - this.mapper = JsonMapper.builder().addModule(new SubtypeModule(RefreshRemoteApplicationEvent.class, EnvironmentChangeRemoteApplicationEvent.class)).build(); + this.mapper = JsonMapper.builder() + .addModule(new SubtypeModule(RefreshRemoteApplicationEvent.class, + EnvironmentChangeRemoteApplicationEvent.class)) + .configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true) + .build(); EnvironmentChangeRemoteApplicationEvent source = new EnvironmentChangeRemoteApplicationEvent(this, "foo", "bar", Collections.emptyMap()); String value = this.mapper.writeValueAsString(source); @@ -50,7 +55,10 @@ public void vanillaDeserialize() throws Exception { @Test public void deserializeOldValueWithNoId() throws Exception { - this.mapper = JsonMapper.builder().addModule(new SubtypeModule(RefreshRemoteApplicationEvent.class, EnvironmentChangeRemoteApplicationEvent.class)).build(); + this.mapper = JsonMapper.builder() + .addModule(new SubtypeModule(RefreshRemoteApplicationEvent.class, + EnvironmentChangeRemoteApplicationEvent.class)) + .build(); EnvironmentChangeRemoteApplicationEvent source = new EnvironmentChangeRemoteApplicationEvent(this, "foo", "bar", Collections.emptyMap()); String value = this.mapper.writeValueAsString(source); diff --git a/spring-cloud-bus/src/test/java/org/springframework/cloud/bus/jackson/SubtypeModuleTests.java b/spring-cloud-bus/src/test/java/org/springframework/cloud/bus/jackson/SubtypeModuleTests.java index e4cd1c07..f4ab610e 100644 --- a/spring-cloud-bus/src/test/java/org/springframework/cloud/bus/jackson/SubtypeModuleTests.java +++ b/spring-cloud-bus/src/test/java/org/springframework/cloud/bus/jackson/SubtypeModuleTests.java @@ -59,9 +59,10 @@ public void testDeserializeWhenTypeIsKnown() throws Exception { @Test public void testDeserializeCustomizedObjectMapper() throws Exception { - JsonMapper.Builder mapper = JsonMapper.builder().propertyNamingStrategy(tools.jackson.databind.PropertyNamingStrategies.SNAKE_CASE); + JsonMapper.Builder mapper = JsonMapper.builder() + .propertyNamingStrategy(tools.jackson.databind.PropertyNamingStrategies.SNAKE_CASE); - BusJacksonMessageConverter converter = new BusJacksonMessageConverter(mapper); + BusJacksonMessageConverter converter = new BusJacksonMessageConverter(mapper.build()); converter.afterPropertiesSet(); Object event = converter.fromMessage( MessageBuilder.withPayload("{\"type\":\"TestRemoteApplicationEvent\", \"origin_service\":\"myorigin\"}") From 55f6581850d787fd760e5688b0dfa966ca9a4c03 Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Thu, 18 Sep 2025 11:39:13 -0400 Subject: [PATCH 3/3] Fix EnvironmentPostProcessor --- .../springframework/cloud/bus/BusEnvironmentPostProcessor.java | 2 +- spring-cloud-bus/src/main/resources/META-INF/spring.factories | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/BusEnvironmentPostProcessor.java b/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/BusEnvironmentPostProcessor.java index 40aaf807..ef49d8ea 100644 --- a/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/BusEnvironmentPostProcessor.java +++ b/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/BusEnvironmentPostProcessor.java @@ -19,8 +19,8 @@ import java.util.HashMap; import java.util.Map; +import org.springframework.boot.EnvironmentPostProcessor; import org.springframework.boot.SpringApplication; -import org.springframework.boot.env.EnvironmentPostProcessor; import org.springframework.cloud.commons.util.IdUtils; import org.springframework.cloud.function.context.FunctionProperties; import org.springframework.core.env.ConfigurableEnvironment; diff --git a/spring-cloud-bus/src/main/resources/META-INF/spring.factories b/spring-cloud-bus/src/main/resources/META-INF/spring.factories index 665f0a37..8e60239e 100644 --- a/spring-cloud-bus/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-bus/src/main/resources/META-INF/spring.factories @@ -1,3 +1,3 @@ # Environment Post Processor -org.springframework.boot.env.EnvironmentPostProcessor=\ +org.springframework.boot.EnvironmentPostProcessor=\ org.springframework.cloud.bus.BusEnvironmentPostProcessor