2
2
3
3
import java .io .IOException ;
4
4
import java .lang .reflect .Constructor ;
5
- import java .sql .Timestamp ;
6
5
import java .text .*;
7
6
import java .util .*;
8
7
25
24
@ SuppressWarnings ("serial" )
26
25
public class DateDeserializers
27
26
{
28
- private final static HashSet <String > _classNames = new HashSet <String >();
27
+ private final static HashSet <String > _utilClasses = new HashSet <String >();
28
+
29
+ // classes from java.sql module, this module may not be present at runtime
30
+ private final static HashSet <String > _sqlClasses = new HashSet <String >();
29
31
static {
30
- Class <?>[] numberTypes = new Class <?>[] {
31
- Calendar .class ,
32
- GregorianCalendar .class ,
33
- java .sql .Date .class ,
34
- java .util .Date .class ,
35
- Timestamp .class ,
36
- };
37
- for (Class <?> cls : numberTypes ) {
38
- _classNames .add (cls .getName ());
39
- }
32
+ _utilClasses .add ("java.util.Calendar" );
33
+ _utilClasses .add ("java.util.GregorianCalendar" );
34
+ _utilClasses .add ("java.util.Date" );
35
+
36
+ _sqlClasses .add ("java.sql.Date" );
37
+ _sqlClasses .add ("java.sql.Timestamp" );
40
38
}
41
39
42
40
public static JsonDeserializer <?> find (Class <?> rawType , String clsName )
43
41
{
44
- if (_classNames .contains (clsName )) {
42
+ if (_utilClasses .contains (clsName )) {
45
43
// Start with the most common type
46
- if (rawType == Calendar .class ) {
44
+ if (rawType == java . util . Calendar .class ) {
47
45
return new CalendarDeserializer ();
48
46
}
49
47
if (rawType == java .util .Date .class ) {
50
48
return DateDeserializer .instance ;
51
49
}
50
+ if (rawType == java .util .GregorianCalendar .class ) {
51
+ return new CalendarDeserializer (GregorianCalendar .class );
52
+ }
53
+ }
54
+ if (_sqlClasses .contains (clsName )) {
52
55
if (rawType == java .sql .Date .class ) {
53
56
return new SqlDateDeserializer ();
54
57
}
55
- if (rawType == Timestamp .class ) {
58
+ if (rawType == java . sql . Timestamp .class ) {
56
59
return new TimestampDeserializer ();
57
60
}
58
- if (rawType == GregorianCalendar .class ) {
59
- return new CalendarDeserializer (GregorianCalendar .class );
60
- }
61
61
}
62
62
return null ;
63
63
}
64
64
65
65
// @since 2.11
66
66
public static boolean hasDeserializerFor (Class <?> rawType ) {
67
- return _classNames .contains (rawType .getName ());
67
+ return _utilClasses . contains ( rawType . getName ()) || _sqlClasses .contains (rawType .getName ());
68
68
}
69
69
70
70
/*
@@ -354,9 +354,9 @@ public java.sql.Date deserialize(JsonParser p, DeserializationContext ctxt) thro
354
354
* {@link DeserializationContext#parseDate} that this basic
355
355
* deserializer calls.
356
356
*/
357
- public static class TimestampDeserializer extends DateBasedDeserializer <Timestamp >
357
+ public static class TimestampDeserializer extends DateBasedDeserializer <java . sql . Timestamp >
358
358
{
359
- public TimestampDeserializer () { super (Timestamp .class ); }
359
+ public TimestampDeserializer () { super (java . sql . Timestamp .class ); }
360
360
public TimestampDeserializer (TimestampDeserializer src , DateFormat df , String formatString ) {
361
361
super (src , df , formatString );
362
362
}
@@ -368,14 +368,14 @@ protected TimestampDeserializer withDateFormat(DateFormat df, String formatStrin
368
368
369
369
@ Override // since 2.12
370
370
public Object getEmptyValue (DeserializationContext ctxt ) {
371
- return new Timestamp (0L );
371
+ return new java . sql . Timestamp (0L );
372
372
}
373
373
374
374
@ Override
375
375
public java .sql .Timestamp deserialize (JsonParser p , DeserializationContext ctxt ) throws IOException
376
376
{
377
377
Date d = _parseDate (p , ctxt );
378
- return (d == null ) ? null : new Timestamp (d .getTime ());
378
+ return (d == null ) ? null : new java . sql . Timestamp (d .getTime ());
379
379
}
380
380
}
381
381
}
0 commit comments