diff --git a/src/main/java/com/fasterxml/jackson/databind/deser/std/DateDeserializers.java b/src/main/java/com/fasterxml/jackson/databind/deser/std/DateDeserializers.java index 9af1525b07..db04b22bcb 100644 --- a/src/main/java/com/fasterxml/jackson/databind/deser/std/DateDeserializers.java +++ b/src/main/java/com/fasterxml/jackson/databind/deser/std/DateDeserializers.java @@ -2,7 +2,6 @@ import java.io.IOException; import java.lang.reflect.Constructor; -import java.sql.Timestamp; import java.text.*; import java.util.*; @@ -25,46 +24,47 @@ @SuppressWarnings("serial") public class DateDeserializers { - private final static HashSet _classNames = new HashSet(); + private final static HashSet _utilClasses = new HashSet(); + + // classes from java.sql module, this module may not be present at runtime + private final static HashSet _sqlClasses = new HashSet(); static { - Class[] numberTypes = new Class[] { - Calendar.class, - GregorianCalendar.class, - java.sql.Date.class, - java.util.Date.class, - Timestamp.class, - }; - for (Class cls : numberTypes) { - _classNames.add(cls.getName()); - } + _utilClasses.add("java.util.Calendar"); + _utilClasses.add("java.util.GregorianCalendar"); + _utilClasses.add("java.util.Date"); + + _sqlClasses.add("java.sql.Date"); + _sqlClasses.add("java.sql.Timestamp"); } public static JsonDeserializer find(Class rawType, String clsName) { - if (_classNames.contains(clsName)) { + if (_utilClasses.contains(clsName)) { // Start with the most common type - if (rawType == Calendar.class) { + if (rawType == java.util.Calendar.class) { return new CalendarDeserializer(); } if (rawType == java.util.Date.class) { return DateDeserializer.instance; } + if (rawType == java.util.GregorianCalendar.class) { + return new CalendarDeserializer(GregorianCalendar.class); + } + } + if (_sqlClasses.contains(clsName)) { if (rawType == java.sql.Date.class) { return new SqlDateDeserializer(); } - if (rawType == Timestamp.class) { + if (rawType == java.sql.Timestamp.class) { return new TimestampDeserializer(); } - if (rawType == GregorianCalendar.class) { - return new CalendarDeserializer(GregorianCalendar.class); - } } return null; } // @since 2.11 public static boolean hasDeserializerFor(Class rawType) { - return _classNames.contains(rawType.getName()); + return _utilClasses.contains(rawType.getName()) || _sqlClasses.contains(rawType.getName()); } /* @@ -354,9 +354,9 @@ public java.sql.Date deserialize(JsonParser p, DeserializationContext ctxt) thro * {@link DeserializationContext#parseDate} that this basic * deserializer calls. */ - public static class TimestampDeserializer extends DateBasedDeserializer + public static class TimestampDeserializer extends DateBasedDeserializer { - public TimestampDeserializer() { super(Timestamp.class); } + public TimestampDeserializer() { super(java.sql.Timestamp.class); } public TimestampDeserializer(TimestampDeserializer src, DateFormat df, String formatString) { super(src, df, formatString); } @@ -368,14 +368,14 @@ protected TimestampDeserializer withDateFormat(DateFormat df, String formatStrin @Override // since 2.12 public Object getEmptyValue(DeserializationContext ctxt) { - return new Timestamp(0L); + return new java.sql.Timestamp(0L); } @Override public java.sql.Timestamp deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { Date d = _parseDate(p, ctxt); - return (d == null) ? null : new Timestamp(d.getTime()); + return (d == null) ? null : new java.sql.Timestamp(d.getTime()); } } } diff --git a/src/main/java/com/fasterxml/jackson/databind/ext/Java7Handlers.java b/src/main/java/com/fasterxml/jackson/databind/ext/Java7Handlers.java index 9391118a0a..580e665a4e 100644 --- a/src/main/java/com/fasterxml/jackson/databind/ext/Java7Handlers.java +++ b/src/main/java/com/fasterxml/jackson/databind/ext/Java7Handlers.java @@ -25,8 +25,9 @@ public abstract class Java7Handlers } catch (Throwable t) { // 09-Sep-2019, tatu: Could choose not to log this, but since this is less likely // to miss (than annotations), do it - java.util.logging.Logger.getLogger(Java7Handlers.class.getName()) - .warning("Unable to load JDK7 types (java.nio.file.Path): no Java7 type support added"); + // 02-Nov-2020, Xakep_SDK: Remove java.logging module dependency +// java.util.logging.Logger.getLogger(Java7Handlers.class.getName()) +// .warning("Unable to load JDK7 types (java.nio.file.Path): no Java7 type support added"); } IMPL = impl; } diff --git a/src/main/java/com/fasterxml/jackson/databind/ext/OptionalHandlerFactory.java b/src/main/java/com/fasterxml/jackson/databind/ext/OptionalHandlerFactory.java index 849dabccaa..3d536d592d 100644 --- a/src/main/java/com/fasterxml/jackson/databind/ext/OptionalHandlerFactory.java +++ b/src/main/java/com/fasterxml/jackson/databind/ext/OptionalHandlerFactory.java @@ -1,8 +1,5 @@ package com.fasterxml.jackson.databind.ext; -import java.util.logging.Logger; -import java.util.logging.Level; - import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.databind.deser.Deserializers; import com.fasterxml.jackson.databind.ser.Serializers; @@ -43,6 +40,8 @@ public class OptionalHandlerFactory implements java.io.Serializable // // Since 2.7, we will assume DOM classes are always found, both due to JDK 1.6 minimum // // and because Android (and presumably GAE) have these classes + // // 02-Nov-2020, Xakep_SDK: java.xml module classes may be missing + // // in actual runtime, if module java.xml is not present private final static Class CLASS_DOM_NODE; private final static Class CLASS_DOM_DOCUMENT; @@ -53,8 +52,9 @@ public class OptionalHandlerFactory implements java.io.Serializable doc = org.w3c.dom.Document.class; } catch (Throwable e) { // not optimal but will do - Logger.getLogger(OptionalHandlerFactory.class.getName()) - .log(Level.INFO, "Could not load DOM `Node` and/or `Document` classes: no DOM support"); + // 02-Nov-2020, Xakep_SDK: Remove java.logging module dependency +// Logger.getLogger(OptionalHandlerFactory.class.getName()) +// .log(Level.INFO, "Could not load DOM `Node` and/or `Document` classes: no DOM support"); } CLASS_DOM_NODE = node; CLASS_DOM_DOCUMENT = doc; diff --git a/src/moditect/module-info.java b/src/moditect/module-info.java index 1909d17870..9cdded2725 100644 --- a/src/moditect/module-info.java +++ b/src/moditect/module-info.java @@ -1,14 +1,17 @@ // Generated 08-Mar-2019 using Moditect maven plugin module com.fasterxml.jackson.databind { - requires java.desktop; - requires java.logging; + // required for + // java.beans.ConstructorProperties + // java.beans.Transient + // support + requires static java.desktop; requires transitive com.fasterxml.jackson.annotation; requires transitive com.fasterxml.jackson.core; // these types were suggested as transitive, but aren't actually // exposed externally (only within internal APIs) - requires java.sql; - requires java.xml; + requires static java.sql; + requires static java.xml; exports com.fasterxml.jackson.databind; exports com.fasterxml.jackson.databind.annotation;