Skip to content

Commit 052be02

Browse files
committed
Fix #2446
1 parent 9ce3d1c commit 052be02

File tree

7 files changed

+95
-42
lines changed

7 files changed

+95
-42
lines changed

release-notes/CREDITS-2.x

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -930,3 +930,8 @@ Hesham Massoud (heshamMassoud@github)
930930
* Reported, contributed fix for #2442: `ArrayNode.addAll()` adds raw `null` values
931931
which cause NPE on `deepCopy()`
932932
(2.10.0)
933+
934+
David Connelly (dconnelly@github)
935+
* Reported#2446: Java 11: Unable to load JDK7 types (annotations, java.nio.file.Path):
936+
no Java7 support added
937+
(2.10.0)

release-notes/VERSION-2.x

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ Project: jackson-databind
3737
#2442: `ArrayNode.addAll()` adds raw `null` values which cause NPE on `deepCopy()`
3838
and `toString()`
3939
(reported, fix contributed by Hesham M)
40+
#2446: Java 11: Unable to load JDK7 types (annotations, java.nio.file.Path): no Java7 support added
41+
(reported by David C)
4042
4143
2.10.0.pr1 (19-Jul-2019)
4244
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package com.fasterxml.jackson.databind.ext;
2+
3+
import com.fasterxml.jackson.databind.JsonDeserializer;
4+
import com.fasterxml.jackson.databind.JsonSerializer;
5+
import com.fasterxml.jackson.databind.util.ClassUtil;
6+
7+
/**
8+
* To support Java7-incomplete platforms, we will offer support for JDK 7
9+
* datatype(s) (that is, {@link java.nio.file.Path} through this class, loaded
10+
* dynamically; if loading fails, support will be missing.
11+
* This class is the non-JDK-7-dependent API, and {@link Java7HandlersImpl} is
12+
* JDK7-dependent implementation of functionality.
13+
*
14+
* @since 2.10 (cleaved off of {@link Java7Support})
15+
*/
16+
public abstract class Java7Handlers
17+
{
18+
private final static Java7Handlers IMPL;
19+
20+
static {
21+
Java7Handlers impl = null;
22+
try {
23+
Class<?> cls = Class.forName("com.fasterxml.jackson.databind.ext.Java7HandlersImpl");
24+
impl = (Java7Handlers) ClassUtil.createInstance(cls, false);
25+
} catch (Throwable t) {
26+
// 09-Sep-2019, tatu: Could choose not to log this, but since this is less likely
27+
// to miss (than annotations), do it
28+
java.util.logging.Logger.getLogger(Java7Handlers.class.getName())
29+
.warning("Unable to load JDK7 types (java.nio.file.Path): no Java7 type support added");
30+
}
31+
IMPL = impl;
32+
}
33+
34+
public static Java7Handlers instance() {
35+
return IMPL;
36+
}
37+
38+
public abstract Class<?> getClassJavaNioFilePath();
39+
40+
public abstract JsonDeserializer<?> getDeserializerForJavaNioFilePath(Class<?> rawType);
41+
42+
public abstract JsonSerializer<?> getSerializerForJavaNioFilePath(Class<?> rawType);
43+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.fasterxml.jackson.databind.ext;
2+
3+
import java.nio.file.Path;
4+
5+
import com.fasterxml.jackson.databind.JsonDeserializer;
6+
import com.fasterxml.jackson.databind.JsonSerializer;
7+
8+
/**
9+
* @since 2.10
10+
*/
11+
public class Java7HandlersImpl extends Java7Handlers
12+
{
13+
@Override
14+
public Class<?> getClassJavaNioFilePath() {
15+
return Path.class;
16+
}
17+
18+
@Override
19+
public JsonDeserializer<?> getDeserializerForJavaNioFilePath(Class<?> rawType) {
20+
if (rawType == Path.class) {
21+
return new NioPathDeserializer();
22+
}
23+
return null;
24+
}
25+
26+
@Override
27+
public JsonSerializer<?> getSerializerForJavaNioFilePath(Class<?> rawType) {
28+
if (Path.class.isAssignableFrom(rawType)) {
29+
return new NioPathSerializer();
30+
}
31+
return null;
32+
}
33+
}

src/main/java/com/fasterxml/jackson/databind/ext/Java7Support.java

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package com.fasterxml.jackson.databind.ext;
22

3-
import com.fasterxml.jackson.databind.JsonDeserializer;
4-
import com.fasterxml.jackson.databind.JsonSerializer;
53
import com.fasterxml.jackson.databind.PropertyName;
64
import com.fasterxml.jackson.databind.introspect.Annotated;
75
import com.fasterxml.jackson.databind.introspect.AnnotatedParameter;
@@ -17,16 +15,16 @@
1715
public abstract class Java7Support
1816
{
1917
private final static Java7Support IMPL;
20-
18+
2119
static {
2220
Java7Support impl = null;
2321
try {
2422
Class<?> cls = Class.forName("com.fasterxml.jackson.databind.ext.Java7SupportImpl");
2523
impl = (Java7Support) ClassUtil.createInstance(cls, false);
2624
} catch (Throwable t) {
27-
// 24-Nov-2015, tatu: Should we log or not?
28-
java.util.logging.Logger.getLogger(Java7Support.class.getName())
29-
.warning("Unable to load JDK7 types (annotations, java.nio.file.Path): no Java7 support added");
25+
// 09-Sep-2019, tatu: Used to log earlier, but with 2.10.0 let's not log
26+
// java.util.logging.Logger.getLogger(Java7Support.class.getName())
27+
// .warning("Unable to load JDK7 annotations (@ConstructorProperties, @Transient): no Java7 annotation support added");
3028
}
3129
IMPL = impl;
3230
}
@@ -40,10 +38,4 @@ public static Java7Support instance() {
4038
public abstract Boolean hasCreatorAnnotation(Annotated a);
4139

4240
public abstract PropertyName findConstructorName(AnnotatedParameter p);
43-
44-
public abstract Class<?> getClassJavaNioFilePath();
45-
46-
public abstract JsonDeserializer<?> getDeserializerForJavaNioFilePath(Class<?> rawType);
47-
48-
public abstract JsonSerializer<?> getSerializerForJavaNioFilePath(Class<?> rawType);
4941
}

src/main/java/com/fasterxml/jackson/databind/ext/Java7SupportImpl.java

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@
22

33
import java.beans.ConstructorProperties;
44
import java.beans.Transient;
5-
import java.nio.file.Path;
65

7-
import com.fasterxml.jackson.databind.JsonDeserializer;
8-
import com.fasterxml.jackson.databind.JsonSerializer;
96
import com.fasterxml.jackson.databind.PropertyName;
107
import com.fasterxml.jackson.databind.introspect.Annotated;
118
import com.fasterxml.jackson.databind.introspect.AnnotatedParameter;
@@ -26,27 +23,6 @@ public Java7SupportImpl() {
2623
_bogus = cls;
2724
}
2825

29-
@Override
30-
public Class<?> getClassJavaNioFilePath() {
31-
return Path.class;
32-
}
33-
34-
@Override
35-
public JsonDeserializer<?> getDeserializerForJavaNioFilePath(Class<?> rawType) {
36-
if (rawType == Path.class) {
37-
return new NioPathDeserializer();
38-
}
39-
return null;
40-
}
41-
42-
@Override
43-
public JsonSerializer<?> getSerializerForJavaNioFilePath(Class<?> rawType) {
44-
if (Path.class.isAssignableFrom(rawType)) {
45-
return new NioPathSerializer();
46-
}
47-
return null;
48-
}
49-
5026
@Override
5127
public Boolean findTransient(Annotated a) {
5228
Transient t = a.getAnnotation(Transient.class);

src/main/java/com/fasterxml/jackson/databind/ext/OptionalHandlerFactory.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,11 @@ public class OptionalHandlerFactory implements java.io.Serializable
6464
// // (note: also assume it comes from JDK so that ClassLoader issues with OSGi
6565
// // can, I hope, be avoided?)
6666

67-
private static final Java7Support _jdk7Helper;
67+
private static final Java7Handlers _jdk7Helper;
6868
static {
69-
Java7Support x = null;
69+
Java7Handlers x = null;
7070
try {
71-
x = Java7Support.instance();
71+
x = Java7Handlers.instance();
7272
} catch (Throwable t) { }
7373
_jdk7Helper = x;
7474
}
@@ -88,15 +88,17 @@ public JsonSerializer<?> findSerializer(SerializationConfig config, JavaType typ
8888
{
8989
final Class<?> rawType = type.getRawClass();
9090

91+
if ((CLASS_DOM_NODE != null) && CLASS_DOM_NODE.isAssignableFrom(rawType)) {
92+
return (JsonSerializer<?>) instantiate(SERIALIZER_FOR_DOM_NODE);
93+
}
94+
9195
if (_jdk7Helper != null) {
9296
JsonSerializer<?> ser = _jdk7Helper.getSerializerForJavaNioFilePath(rawType);
9397
if (ser != null) {
9498
return ser;
9599
}
96100
}
97-
if ((CLASS_DOM_NODE != null) && CLASS_DOM_NODE.isAssignableFrom(rawType)) {
98-
return (JsonSerializer<?>) instantiate(SERIALIZER_FOR_DOM_NODE);
99-
}
101+
100102
String className = rawType.getName();
101103
String factoryName;
102104
if (className.startsWith(PACKAGE_PREFIX_JAVAX_XML) || hasSuperClassStartingWith(rawType, PACKAGE_PREFIX_JAVAX_XML)) {

0 commit comments

Comments
 (0)