diff --git a/release-notes/VERSION-2.x b/release-notes/VERSION-2.x index c9097a2c05..f81bbf1878 100644 --- a/release-notes/VERSION-2.x +++ b/release-notes/VERSION-2.x @@ -9,6 +9,7 @@ Project: jackson-databind #4508: Deserialized JsonAnySetter field in Kotlin data class is null (reported by @MaximValeev) (fix by Joo-Hyuk K) +#4718: Should not fail on trying to serialize `java.time.DateTimeException` 2.18.0 (26-Sep-2024) diff --git a/src/main/java/com/fasterxml/jackson/databind/util/BeanUtil.java b/src/main/java/com/fasterxml/jackson/databind/util/BeanUtil.java index bb355cc670..0132c293b3 100644 --- a/src/main/java/com/fasterxml/jackson/databind/util/BeanUtil.java +++ b/src/main/java/com/fasterxml/jackson/databind/util/BeanUtil.java @@ -304,6 +304,10 @@ public static String checkUnsupportedType(JavaType type) { if (className.indexOf('.', 10) >= 0) { return null; } + // [databind#4718]: Also don't worry about Exception type(s) + if (type.isTypeOrSubTypeOf(Throwable.class)) { + return null; + } typeName = "Java 8 date/time"; moduleName = "com.fasterxml.jackson.datatype:jackson-datatype-jsr310"; } else if (isJodaTimeClass(className)) { diff --git a/src/test/java/com/fasterxml/jackson/databind/interop/DateJava8FallbacksTest.java b/src/test/java/com/fasterxml/jackson/databind/interop/DateJava8FallbacksTest.java index 615b762f45..3aa2a5d261 100644 --- a/src/test/java/com/fasterxml/jackson/databind/interop/DateJava8FallbacksTest.java +++ b/src/test/java/com/fasterxml/jackson/databind/interop/DateJava8FallbacksTest.java @@ -1,5 +1,6 @@ package com.fasterxml.jackson.databind.interop; +import java.time.DateTimeException; import java.time.Instant; import java.time.OffsetDateTime; import java.time.ZoneId; @@ -84,4 +85,19 @@ public void testAllowAsEmbedded() throws Exception } } } + + // [databind#4718]: should not block serialization of `DateTimeException` + @Test + public void testAllowExceptionSer() throws Exception { + String json = MAPPER.writeValueAsString(new DateTimeException("Test!")); + assertTrue(MAPPER.readTree(json).isObject()); + } + + // [databind#4718]: should not block deserialization of `DateTimeException` + @Test + public void testAllowExceptionDeser() throws Exception { + DateTimeException exc = MAPPER.readValue("{\"message\":\"test!\"}", + DateTimeException.class); + assertNotNull(exc); + } }