Skip to content

Commit e30c0c1

Browse files
author
Xakep_SDK
committed
Make java.sql module optional (static)
Some java environments already don't have java.sql classes Make DateDeserializers weakly depend on java.sql classes Serialization is already weak, as pe [databind#1073]
1 parent 4b8f38f commit e30c0c1

File tree

2 files changed

+24
-24
lines changed

2 files changed

+24
-24
lines changed

src/main/java/com/fasterxml/jackson/databind/deser/std/DateDeserializers.java

+23-23
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import java.io.IOException;
44
import java.lang.reflect.Constructor;
5-
import java.sql.Timestamp;
65
import java.text.*;
76
import java.util.*;
87

@@ -25,46 +24,47 @@
2524
@SuppressWarnings("serial")
2625
public class DateDeserializers
2726
{
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>();
2931
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");
4038
}
4139

4240
public static JsonDeserializer<?> find(Class<?> rawType, String clsName)
4341
{
44-
if (_classNames.contains(clsName)) {
42+
if (_utilClasses.contains(clsName)) {
4543
// Start with the most common type
46-
if (rawType == Calendar.class) {
44+
if (rawType == java.util.Calendar.class) {
4745
return new CalendarDeserializer();
4846
}
4947
if (rawType == java.util.Date.class) {
5048
return DateDeserializer.instance;
5149
}
50+
if (rawType == java.util.GregorianCalendar.class) {
51+
return new CalendarDeserializer(GregorianCalendar.class);
52+
}
53+
}
54+
if (_sqlClasses.contains(clsName)) {
5255
if (rawType == java.sql.Date.class) {
5356
return new SqlDateDeserializer();
5457
}
55-
if (rawType == Timestamp.class) {
58+
if (rawType == java.sql.Timestamp.class) {
5659
return new TimestampDeserializer();
5760
}
58-
if (rawType == GregorianCalendar.class) {
59-
return new CalendarDeserializer(GregorianCalendar.class);
60-
}
6161
}
6262
return null;
6363
}
6464

6565
// @since 2.11
6666
public static boolean hasDeserializerFor(Class<?> rawType) {
67-
return _classNames.contains(rawType.getName());
67+
return _utilClasses.contains(rawType.getName()) || _sqlClasses.contains(rawType.getName());
6868
}
6969

7070
/*
@@ -354,9 +354,9 @@ public java.sql.Date deserialize(JsonParser p, DeserializationContext ctxt) thro
354354
* {@link DeserializationContext#parseDate} that this basic
355355
* deserializer calls.
356356
*/
357-
public static class TimestampDeserializer extends DateBasedDeserializer<Timestamp>
357+
public static class TimestampDeserializer extends DateBasedDeserializer<java.sql.Timestamp>
358358
{
359-
public TimestampDeserializer() { super(Timestamp.class); }
359+
public TimestampDeserializer() { super(java.sql.Timestamp.class); }
360360
public TimestampDeserializer(TimestampDeserializer src, DateFormat df, String formatString) {
361361
super(src, df, formatString);
362362
}
@@ -368,14 +368,14 @@ protected TimestampDeserializer withDateFormat(DateFormat df, String formatStrin
368368

369369
@Override // since 2.12
370370
public Object getEmptyValue(DeserializationContext ctxt) {
371-
return new Timestamp(0L);
371+
return new java.sql.Timestamp(0L);
372372
}
373373

374374
@Override
375375
public java.sql.Timestamp deserialize(JsonParser p, DeserializationContext ctxt) throws IOException
376376
{
377377
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());
379379
}
380380
}
381381
}

src/moditect/module-info.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
requires transitive com.fasterxml.jackson.core;
77
// these types were suggested as transitive, but aren't actually
88
// exposed externally (only within internal APIs)
9-
requires java.sql;
9+
requires static java.sql;
1010
requires static java.xml;
1111

1212
exports com.fasterxml.jackson.databind;

0 commit comments

Comments
 (0)