Skip to content

Commit 6470e1f

Browse files
committed
Fix #296: add null checks for type serialization for 7 types
1 parent 3434dfc commit 6470e1f

File tree

5 files changed

+44
-7
lines changed

5 files changed

+44
-7
lines changed

datetime/src/main/java/com/fasterxml/jackson/datatype/jsr310/ser/MonthDaySerializer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,8 @@ public void serializeWithType(MonthDay value, JsonGenerator g,
8181
WritableTypeId typeIdDef = typeSer.writeTypePrefix(g,
8282
typeSer.typeId(value, serializationShape(provider)));
8383
// need to write out to avoid double-writing array markers
84-
if (typeIdDef.valueShape == JsonToken.START_ARRAY) {
84+
if ((typeIdDef != null)
85+
&& typeIdDef.valueShape == JsonToken.START_ARRAY) {
8586
_serializeAsArrayContents(value, g, provider);
8687
} else {
8788
g.writeString((_formatter == null) ? value.toString() : value.format(_formatter));

datetime/src/main/java/com/fasterxml/jackson/datatype/jsr310/ser/OffsetTimeSerializer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,8 @@ public void serializeWithType(OffsetTime value, JsonGenerator g, SerializerProvi
7979
WritableTypeId typeIdDef = typeSer.writeTypePrefix(g,
8080
typeSer.typeId(value, serializationShape(provider)));
8181
// need to write out to avoid double-writing array markers
82-
if (typeIdDef.valueShape == JsonToken.START_ARRAY) {
82+
if ((typeIdDef != null)
83+
&& typeIdDef.valueShape == JsonToken.START_ARRAY) {
8384
_serializeAsArrayContents(value, g, provider);
8485
} else {
8586
String str = (_formatter == null) ? value.toString() : value.format(_formatter);

datetime/src/main/java/com/fasterxml/jackson/datatype/jsr310/ser/YearMonthSerializer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,8 @@ public void serializeWithType(YearMonth value, JsonGenerator g,
8282
WritableTypeId typeIdDef = typeSer.writeTypePrefix(g,
8383
typeSer.typeId(value, serializationShape(provider)));
8484
// need to write out to avoid double-writing array markers
85-
if (typeIdDef.valueShape == JsonToken.START_ARRAY) {
85+
if ((typeIdDef != null)
86+
&& typeIdDef.valueShape == JsonToken.START_ARRAY) {
8687
_serializeAsArrayContents(value, g, provider);
8788
} else {
8889
g.writeString((_formatter == null) ? value.toString() : value.format(_formatter));

datetime/src/test/java/com/fasterxml/jackson/datatype/jsr310/misc/DeductionTypeSerialization296Test.java

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package com.fasterxml.jackson.datatype.jsr310.misc;
22

3-
import java.time.LocalDate;
4-
import java.time.LocalDateTime;
5-
import java.time.LocalTime;
6-
import java.time.Month;
3+
import java.time.*;
74

85
import org.junit.Assert;
96
import org.junit.Test;
@@ -52,4 +49,36 @@ public void testLocalTime() throws Exception
5249
Assert.assertEquals(a2q("{'value':'09:22:57'}"),
5350
MAPPER.writeValueAsString(new Wrapper(time)));
5451
}
52+
53+
@Test
54+
public void testMonthDate() throws Exception
55+
{
56+
MonthDay date = MonthDay.of(Month.JANUARY, 17);
57+
Assert.assertEquals(a2q("{'value':'--01-17'}"),
58+
MAPPER.writeValueAsString(new Wrapper(date)));
59+
}
60+
61+
@Test
62+
public void testOffsetTime() throws Exception
63+
{
64+
OffsetTime time = OffsetTime.of(15, 43, 0, 0, ZoneOffset.of("+0300"));
65+
Assert.assertEquals(a2q("{'value':'15:43+03:00'}"),
66+
MAPPER.writeValueAsString(new Wrapper(time)));
67+
}
68+
69+
@Test
70+
public void testYearMonth() throws Exception
71+
{
72+
YearMonth date = YearMonth.of(1986, Month.JANUARY);
73+
Assert.assertEquals(a2q("{'value':'1986-01'}"),
74+
MAPPER.writeValueAsString(new Wrapper(date)));
75+
}
76+
77+
@Test
78+
public void testZoneId() throws Exception
79+
{
80+
ZoneId zone = ZoneId.of("America/Denver");
81+
Assert.assertEquals(a2q("{'value':'America/Denver'}"),
82+
MAPPER.writeValueAsString(new Wrapper(zone)));
83+
}
5584
}

release-notes/VERSION-2.x

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@ Modules:
88
=== Releases ===
99
------------------------------------------------------------------------
1010

11+
2.16.2 (not yet released)
12+
13+
#296: NPE when serializing a `LocalDate` or `LocalDateTime` using `AsDeductionTypeSerializer`
14+
(reported by @mike-reynolds-savient)
15+
1116
2.16.1 (24-Dec-2023)
1217

1318
#286: Breaking change in `InstantDeserializer API between 2.15 and 2.16

0 commit comments

Comments
 (0)