Skip to content

Commit bc26348

Browse files
authored
GH-10235: Remove Joda Time support from Jackson 3
Fixes: #10235 Signed-off-by: Jooyoung Pyoung <[email protected]> The framework does nothing with Joda, so it is up to end-users in their project to add respective Jackson module.
1 parent ce78fab commit bc26348

File tree

3 files changed

+10
-72
lines changed

3 files changed

+10
-72
lines changed

build.gradle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -495,7 +495,6 @@ project('spring-integration-core') {
495495
api 'io.micrometer:micrometer-observation'
496496

497497
optionalApi 'tools.jackson.core:jackson-databind'
498-
optionalApi 'tools.jackson.datatype:jackson-datatype-joda'
499498
optionalApi('tools.jackson.module:jackson-module-kotlin') {
500499
exclude group: 'org.jetbrains.kotlin'
501500
}

spring-integration-core/src/test/java/org/springframework/integration/support/json/JacksonJsonObjectMapperTests.java

Lines changed: 7 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,6 @@
3939
import java.util.Set;
4040
import java.util.stream.Collectors;
4141

42-
import org.joda.time.DateTime;
43-
import org.joda.time.DateTimeZone;
4442
import org.junit.jupiter.api.BeforeEach;
4543
import org.junit.jupiter.api.Test;
4644
import org.junit.jupiter.params.ParameterizedTest;
@@ -49,7 +47,6 @@
4947
import tools.jackson.databind.JsonNode;
5048
import tools.jackson.databind.ObjectMapper;
5149
import tools.jackson.databind.json.JsonMapper;
52-
import tools.jackson.datatype.joda.JodaModule;
5350
import tools.jackson.module.kotlin.KotlinModule;
5451

5552
import static org.assertj.core.api.Assertions.assertThat;
@@ -62,10 +59,6 @@
6259
*/
6360
class JacksonJsonObjectMapperTests {
6461

65-
private static final JacksonModule JODA_MODULE = new JodaModule();
66-
67-
private static final JacksonModule KOTLIN_MODULE = new KotlinModule.Builder().build();
68-
6962
private JacksonJsonObjectMapper mapper;
7063

7164
@BeforeEach
@@ -75,17 +68,15 @@ void setUp() {
7568

7669
@Test
7770
void compareAutoDiscoveryVsManualModules() {
71+
KotlinModule kotlinModule = new KotlinModule.Builder().build();
7872
ObjectMapper manualMapper = JsonMapper.builder()
79-
.addModules(collectWellKnownModulesIfAvailable())
73+
.addModules(kotlinModule)
8074
.build();
8175

82-
Set<String> collectedModuleNames = getModuleNames(collectWellKnownModulesIfAvailable());
83-
8476
Set<String> autoModuleNames = getModuleNames(mapper.getObjectMapper().getRegisteredModules());
85-
assertThat(autoModuleNames).isEqualTo(collectedModuleNames);
86-
8777
Set<String> manualModuleNames = getModuleNames(manualMapper.getRegisteredModules());
88-
assertThat(manualModuleNames).isEqualTo(collectedModuleNames);
78+
79+
assertThat(autoModuleNames).isEqualTo(manualModuleNames);
8980
}
9081

9182
@Test
@@ -196,7 +187,7 @@ void testMapTypes() throws IOException {
196187
}
197188

198189
@Test
199-
public void testOptional() throws IOException {
190+
void testOptional() throws IOException {
200191
TestData data = new TestData("John", Optional.of("[email protected]"), Optional.empty());
201192

202193
String json = mapper.toJson(data);
@@ -207,72 +198,29 @@ public void testOptional() throws IOException {
207198
}
208199

209200
@Test
210-
public void testJavaTime() throws Exception {
201+
void testJavaTime() throws IOException {
211202
LocalDateTime localDateTime = LocalDateTime.of(2000, 1, 1, 0, 0);
212203
ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, ZoneId.of("UTC"));
213204
TimeData data = new TimeData(localDateTime, zonedDateTime);
214205

215206
String json = mapper.toJson(data);
216-
assertThat("{\"localDate\":\"2000-01-01T00:00:00\",\"zoneDate\":\"2000-01-01T00:00:00Z\"}").isEqualTo(json);
207+
assertThat(json).isEqualTo("{\"localDate\":\"2000-01-01T00:00:00\",\"zoneDate\":\"2000-01-01T00:00:00Z\"}");
217208

218209
TimeData deserialized = mapper.fromJson(json, TimeData.class);
219210
assertThat(deserialized.localDate()).isEqualTo(data.localDate());
220211
assertThat(deserialized.zoneDate().toInstant()).isEqualTo(data.zoneDate().toInstant());
221212
}
222213

223-
@Test
224-
public void testJodaWithJodaModule() throws Exception {
225-
ObjectMapper objectMapper = mapper.getObjectMapper();
226-
Set<String> registeredModules = getModuleNames(objectMapper.getRegisteredModules());
227-
assertThat(registeredModules.contains(JODA_MODULE.getModuleName())).isTrue();
228-
229-
org.joda.time.DateTime jodaDateTime = new DateTime(2000, 1, 1, 0, 0, DateTimeZone.UTC);
230-
JodaData data = new JodaData("John", jodaDateTime);
231-
232-
String json = mapper.toJson(data);
233-
assertThat("{\"name\":\"John\",\"jodaDate\":\"2000-01-01T00:00:00.000Z\"}").isEqualTo(json);
234-
235-
JodaData deserialized = mapper.fromJson(json, JodaData.class);
236-
assertThat(deserialized.name()).isEqualTo(data.name());
237-
assertThat(deserialized.jodaDate()).isEqualTo(data.jodaDate());
238-
}
239-
240-
@Test
241-
public void testJodaWithoutJodaModule() {
242-
ObjectMapper customMapper = JsonMapper.builder().build();
243-
JacksonJsonObjectMapper mapper = new JacksonJsonObjectMapper(customMapper);
244-
245-
Set<String> registeredModules = getModuleNames(mapper.getObjectMapper().getRegisteredModules());
246-
assertThat(registeredModules.contains(JODA_MODULE.getModuleName())).isFalse();
247-
248-
org.joda.time.DateTime jodaDateTime = new DateTime(2000, 1, 1, 0, 0, DateTimeZone.UTC);
249-
JodaData data = new JodaData("John", jodaDateTime);
250-
251-
assertThatThrownBy(() -> mapper.toJson(data))
252-
.isInstanceOf(IOException.class);
253-
254-
String json = "{\"name\":\"John\",\"jodaDate\":\"2000-01-01T00:00:00.000Z\"}";
255-
assertThatThrownBy(() -> mapper.fromJson(json, JodaData.class))
256-
.isInstanceOf(IOException.class);
257-
}
258-
259214
private Set<String> getModuleNames(Collection<JacksonModule> modules) {
260215
return modules.stream()
261216
.map(JacksonModule::getModuleName)
262217
.collect(Collectors.toUnmodifiableSet());
263218
}
264219

265-
private List<JacksonModule> collectWellKnownModulesIfAvailable() {
266-
return List.of(JODA_MODULE, KOTLIN_MODULE);
267-
}
268-
269220
private record TestData(String name, Optional<String> email, Optional<Integer> age) {
270221
}
271222

272223
private record TimeData(LocalDateTime localDate, ZonedDateTime zoneDate) {
273224
}
274225

275-
private record JodaData(String name, org.joda.time.DateTime jodaDate) {
276-
}
277-
278226
}

spring-integration-core/src/test/java/org/springframework/integration/support/json/JacksonMessagingUtilsTests.java

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,14 @@
1616

1717
package org.springframework.integration.support.json;
1818

19-
import java.util.Arrays;
2019
import java.util.Collection;
21-
import java.util.List;
2220
import java.util.Set;
2321
import java.util.stream.Collectors;
2422

2523
import org.junit.jupiter.api.BeforeEach;
2624
import org.junit.jupiter.api.Test;
2725
import tools.jackson.databind.JacksonModule;
2826
import tools.jackson.databind.ObjectMapper;
29-
import tools.jackson.datatype.joda.JodaModule;
3027
import tools.jackson.module.kotlin.KotlinModule;
3128

3229
import org.springframework.integration.message.AdviceMessage;
@@ -53,16 +50,10 @@ void setUp() {
5350
}
5451

5552
@Test
56-
void shouldIncludeWellKnownModules() {
57-
List<JacksonModule> wellKnownModules = Arrays.asList(
58-
new JodaModule(),
59-
new KotlinModule.Builder().build()
60-
);
61-
62-
Set<String> wellKnownModuleNames = getModuleNames(wellKnownModules);
53+
void shouldIncludeKotlinModule() {
54+
KotlinModule kotlinModule = new KotlinModule.Builder().build();
6355
Set<String> registeredModuleNames = getModuleNames(mapper.getRegisteredModules());
64-
65-
assertThat(registeredModuleNames).containsAll(wellKnownModuleNames);
56+
assertThat(registeredModuleNames).contains(kotlinModule.getModuleName());
6657
}
6758

6859
@Test

0 commit comments

Comments
 (0)