From 5fd7cc41e0e6b118b25999c1655bfa6abf0bf414 Mon Sep 17 00:00:00 2001 From: Xakep_SDK Date: Mon, 2 Nov 2020 15:52:26 +0600 Subject: [PATCH 1/4] Remove java.logging module dependency --- .../com/fasterxml/jackson/databind/ext/Java7Handlers.java | 5 +++-- .../jackson/databind/ext/OptionalHandlerFactory.java | 8 +++----- src/moditect/module-info.java | 1 - 3 files changed, 6 insertions(+), 8 deletions(-) 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..99f78ef0bb 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; @@ -53,8 +50,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..a4d1283a63 100644 --- a/src/moditect/module-info.java +++ b/src/moditect/module-info.java @@ -1,7 +1,6 @@ // Generated 08-Mar-2019 using Moditect maven plugin module com.fasterxml.jackson.databind { requires java.desktop; - requires java.logging; requires transitive com.fasterxml.jackson.annotation; requires transitive com.fasterxml.jackson.core; From 44195a892317bd662b195094a951825b17f1e4b0 Mon Sep 17 00:00:00 2001 From: Xakep_SDK Date: Mon, 2 Nov 2020 16:26:09 +0600 Subject: [PATCH 2/4] Make java.xml module optional (static) Serialization and deserialization of javax.xml classes (module java.xml) is handled by com.fasterxml.jackson.databind.ext.OptionalHandlerFactory, it already handles classes from java.xml module as optional. --- .../fasterxml/jackson/databind/ext/OptionalHandlerFactory.java | 2 ++ src/moditect/module-info.java | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) 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 99f78ef0bb..3d536d592d 100644 --- a/src/main/java/com/fasterxml/jackson/databind/ext/OptionalHandlerFactory.java +++ b/src/main/java/com/fasterxml/jackson/databind/ext/OptionalHandlerFactory.java @@ -40,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; diff --git a/src/moditect/module-info.java b/src/moditect/module-info.java index a4d1283a63..40c7515def 100644 --- a/src/moditect/module-info.java +++ b/src/moditect/module-info.java @@ -7,7 +7,7 @@ // 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.xml; exports com.fasterxml.jackson.databind; exports com.fasterxml.jackson.databind.annotation; From b8148ba3958f96e2103283a95f1b69e04c84ae65 Mon Sep 17 00:00:00 2001 From: Xakep_SDK Date: Mon, 2 Nov 2020 16:11:37 +0600 Subject: [PATCH 3/4] 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] --- .../databind/deser/std/DateDeserializers.java | 46 +++++++++---------- src/moditect/module-info.java | 2 +- 2 files changed, 24 insertions(+), 24 deletions(-) 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/moditect/module-info.java b/src/moditect/module-info.java index 40c7515def..74406b2434 100644 --- a/src/moditect/module-info.java +++ b/src/moditect/module-info.java @@ -6,7 +6,7 @@ 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 static java.sql; requires static java.xml; exports com.fasterxml.jackson.databind; From dce71c020fb49b3f0d707a0c2654b8fcf8a21768 Mon Sep 17 00:00:00 2001 From: Xakep_SDK Date: Mon, 2 Nov 2020 15:56:57 +0600 Subject: [PATCH 4/4] Make java.desktop module optional (static) java.desktop classes (java.beans.ConstructorProperties and java.beans.Transient) are used in com.fasterxml.jackson.databind.ext.Java7SupportImpl, if java.beans classes are not present, then jackson will not load Java7SupportImpl --- src/moditect/module-info.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/moditect/module-info.java b/src/moditect/module-info.java index 74406b2434..9cdded2725 100644 --- a/src/moditect/module-info.java +++ b/src/moditect/module-info.java @@ -1,6 +1,10 @@ // Generated 08-Mar-2019 using Moditect maven plugin module com.fasterxml.jackson.databind { - requires java.desktop; + // 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;