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..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
@@ -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,9 +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",
- webEnvironment = RANDOM_PORT)
+@SpringBootTest(properties = "spring.jackson.datetime.write-dates-as-timestamps=true", webEnvironment = RANDOM_PORT)
@DirtiesContext
public class BusJacksonIntegrationTests {
@@ -68,9 +67,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/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/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 4a847977..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
@@ -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;
@@ -76,8 +79,7 @@ protected static class CborConfiguration {
@Bean
public AbstractMessageConverter busCborConverter() {
- return new BusJacksonMessageConverter(new MimeType("application", "cbor"),
- new ObjectMapper(new CBORFactory()));
+ return new BusJacksonMessageConverter(new MimeType("application", "cbor"), CBORMapper.builder().build());
}
}
@@ -90,7 +92,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;
@@ -110,11 +112,11 @@ private BusJacksonMessageConverter() {
super(mimeType);
if (objectMapper != null) {
- this.mapper = objectMapper;
+ this.mapperBuilder = objectMapper.rebuild();
this.mapperCreated = false;
}
else {
- this.mapper = new ObjectMapper();
+ this.mapperBuilder = JsonMapper.builder();
this.mapperCreated = true;
}
}
@@ -123,8 +125,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 +170,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 +185,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 +206,8 @@ else if (payload instanceof RemoteApplicationEvent) {
}
@Override
- public void afterPropertiesSet() throws Exception {
- this.mapper.registerModule(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 148576d5..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,7 @@
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/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
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 d5c0c0d5..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
@@ -18,8 +18,10 @@
import java.util.Collections;
-import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test;
+import tools.jackson.databind.MapperFeature;
+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 +35,15 @@
*/
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))
+ .configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true)
+ .build();
EnvironmentChangeRemoteApplicationEvent source = new EnvironmentChangeRemoteApplicationEvent(this, "foo", "bar",
Collections.emptyMap());
String value = this.mapper.writeValueAsString(source);
@@ -50,8 +55,10 @@ 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 95dffd29..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
@@ -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.PropertyNamingStrategies;
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,10 +59,10 @@ public void testDeserializeWhenTypeIsKnown() throws Exception {
@Test
public void testDeserializeCustomizedObjectMapper() throws Exception {
- ObjectMapper mapper = new ObjectMapper();
- mapper.setPropertyNamingStrategy(new PropertyNamingStrategies.SnakeCaseStrategy());
+ 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\"}")