Skip to content

Commit 70d961b

Browse files
committed
Fix #1073
1 parent cecd409 commit 70d961b

File tree

5 files changed

+33
-10
lines changed

5 files changed

+33
-10
lines changed

release-notes/VERSION

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ Project: jackson-databind
77
2.5.5-1 (not released)
88

99
#1051: Problem with Object Id and Type Id as Wrapper Object (regression in 2.5.1)
10+
#1073: Add try-catch around `java.sql` type serializers
11+
(suggested by claudemt@github)
1012

1113
2.5.5 (07-Dec-2015)
1214

src/main/java/com/fasterxml/jackson/databind/ser/BasicSerializerFactory.java

+1-8
Original file line numberDiff line numberDiff line change
@@ -82,14 +82,7 @@ public abstract class BasicSerializerFactory
8282
// Other discrete non-container types:
8383
// First, Date/Time zoo:
8484
_concrete.put(Calendar.class.getName(), CalendarSerializer.instance);
85-
DateSerializer dateSer = DateSerializer.instance;
86-
_concrete.put(java.util.Date.class.getName(), dateSer);
87-
// note: timestamps are very similar to java.util.Date, thus serialized as such
88-
_concrete.put(java.sql.Timestamp.class.getName(), dateSer);
89-
90-
// leave some of less commonly used ones as lazy, no point in proactive construction
91-
_concreteLazy.put(java.sql.Date.class.getName(), SqlDateSerializer.class);
92-
_concreteLazy.put(java.sql.Time.class.getName(), SqlTimeSerializer.class);
85+
_concrete.put(java.util.Date.class.getName(), DateSerializer.instance);
9386

9487
// And then other standard non-structured JDK types
9588
for (Map.Entry<Class<?>,Object> en : StdJdkSerializers.all()) {

src/main/java/com/fasterxml/jackson/databind/ser/std/SqlTimeSerializer.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ public class SqlTimeSerializer
2121
public SqlTimeSerializer() { super(java.sql.Time.class); }
2222

2323
@Override
24-
public void serialize(java.sql.Time value, JsonGenerator jgen, SerializerProvider provider) throws IOException
24+
public void serialize(java.sql.Time value, JsonGenerator g, SerializerProvider provider) throws IOException
2525
{
26-
jgen.writeString(value.toString());
26+
g.writeString(value.toString());
2727
}
2828

2929
@Override

src/main/java/com/fasterxml/jackson/databind/ser/std/StdJdkSerializers.java

+13
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,19 @@ public static Collection<Map.Entry<Class<?>, Object>> all()
5555
sers.put(Void.class, NullSerializer.instance);
5656
sers.put(Void.TYPE, NullSerializer.instance);
5757

58+
// 09-Jan-2015, tatu: As per [databind#1073], let's try to guard against possibility
59+
// of some environments missing `java.sql.` types
60+
try {
61+
// note: timestamps are very similar to java.util.Date, thus serialized as such
62+
sers.put(java.sql.Timestamp.class, DateSerializer.instance);
63+
64+
// leave some of less commonly used ones as lazy, no point in proactive construction
65+
sers.put(java.sql.Date.class, SqlDateSerializer.class);
66+
sers.put(java.sql.Time.class, SqlTimeSerializer.class);
67+
} catch (NoClassDefFoundError e) {
68+
// nothing much we can do here; could log, but probably not useful for now.
69+
}
70+
5871
return sers.entrySet();
5972
}
6073

src/test/java/com/fasterxml/jackson/databind/ser/TestDateSerialization.java

+15
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,21 @@ public void testSqlDate() throws IOException
109109
assertEquals(aposToQuotes("{'date':0}"), MAPPER.writeValueAsString(new SqlDateAsNumberBean(0L)));
110110
}
111111

112+
public void testSqlTimestamp() throws IOException
113+
{
114+
java.sql.Timestamp input = new java.sql.Timestamp(0L);
115+
// just should produce same output as standard `java.util.Date`:
116+
Date altTnput = new Date(0L);
117+
assertEquals(MAPPER.writeValueAsString(altTnput),
118+
MAPPER.writeValueAsString(input));
119+
}
120+
121+
public void testSqlTime() throws IOException
122+
{
123+
java.sql.Time input = new java.sql.Time(0L);
124+
assertEquals(quote(input.toString()), MAPPER.writeValueAsString(input));
125+
}
126+
112127
public void testTimeZone() throws IOException
113128
{
114129
TimeZone input = TimeZone.getTimeZone("PST");

0 commit comments

Comments
 (0)