Skip to content

Commit dcd40a1

Browse files
committed
Fix #1793
1 parent d6f24a1 commit dcd40a1

File tree

5 files changed

+29
-3
lines changed

5 files changed

+29
-3
lines changed

release-notes/CREDITS

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -712,3 +712,8 @@ Luís Cleto (luiscleto@github)
712712
* Suggested 1768: Improve `TypeFactory.constructFromCanonical()` to work with
713713
`java.lang.reflect.Type.getTypeName()` format
714714
(2.9.2)
715+
716+
Vincent Demay (vdemay@github)
717+
* Reported #1793: `java.lang.NullPointerException` in `ObjectArraySerializer.acceptJsonFormatVisitor()`
718+
for array value with `@JsonValue`
719+
(2.9.2)

release-notes/VERSION

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ Project: jackson-databind
1818
#1771: Pass missing argument for string formatting in `ObjectMapper`
1919
(reported by Nils B)
2020
#1788: `StdDateFormat._parseAsISO8601()` does not parse "fractional" timezone correctly
21+
#1793: `java.lang.NullPointerException` in `ObjectArraySerializer.acceptJsonFormatVisitor()`
22+
for array value with `@JsonValue`
23+
(reported by Vincent D)
2124

2225
2.9.1 (07-Sep-2017)
2326

src/main/java/com/fasterxml/jackson/databind/ser/std/JsonValueSerializer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ public void acceptJsonFormatVisitor(JsonFormatVisitorWrapper visitor, JavaType t
262262
return;
263263
}
264264
}
265-
ser.acceptJsonFormatVisitor(visitor, null);
265+
ser.acceptJsonFormatVisitor(visitor, type);
266266
}
267267

268268
/**

src/main/java/com/fasterxml/jackson/databind/ser/std/ObjectArraySerializer.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import com.fasterxml.jackson.databind.ser.ContainerSerializer;
1616
import com.fasterxml.jackson.databind.ser.ContextualSerializer;
1717
import com.fasterxml.jackson.databind.ser.impl.PropertySerializerMap;
18-
import com.fasterxml.jackson.databind.type.TypeFactory;
1918

2019
/**
2120
* Generic serializer for Object arrays (<code>Object[]</code>).
@@ -312,12 +311,17 @@ public void acceptJsonFormatVisitor(JsonFormatVisitorWrapper visitor, JavaType t
312311
{
313312
JsonArrayFormatVisitor arrayVisitor = visitor.expectArrayFormat(typeHint);
314313
if (arrayVisitor != null) {
314+
JavaType contentType = _elementType;
315+
316+
// [databind#1793]: Was getting `null` for `typeHint`. But why would we even use it...
317+
/*
315318
TypeFactory tf = visitor.getProvider().getTypeFactory();
316-
JavaType contentType = tf.moreSpecificType(_elementType, typeHint.getContentType());
319+
contentType = tf.moreSpecificType(_elementType, typeHint.getContentType());
317320
if (contentType == null) {
318321
visitor.getProvider().reportBadDefinition(_elementType,
319322
"Could not resolve type: "+_elementType);
320323
}
324+
*/
321325
JsonSerializer<?> valueSer = _elementSerializer;
322326
if (valueSer == null) {
323327
valueSer = visitor.getProvider().findValueSerializer(contentType, _property);

src/test/java/com/fasterxml/jackson/databind/jsonschema/NewSchemaTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.util.*;
66
import java.util.concurrent.atomic.AtomicReference;
77

8+
import com.fasterxml.jackson.annotation.JsonCreator;
89
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
910
import com.fasterxml.jackson.annotation.JsonValue;
1011
import com.fasterxml.jackson.core.JsonParser.NumberType;
@@ -88,6 +89,17 @@ static class POJOWithRefs {
8889
public AtomicReference<String> maybeString;
8990
}
9091

92+
// [databind#1793]
93+
static class POJOWithJsonValue {
94+
private Point[] value;
95+
96+
@JsonCreator(mode=JsonCreator.Mode.DELEGATING)
97+
public POJOWithJsonValue(Point[] v) { value = v; }
98+
99+
@JsonValue
100+
public Point[] serialization() { return value; }
101+
}
102+
91103
@JsonPropertyOrder({ "dec", "bigInt" })
92104
static class Numbers {
93105
public BigDecimal dec;
@@ -206,6 +218,8 @@ public void testBasicTraversal() throws Exception
206218
MAPPER.acceptJsonFormatVisitor(EnumSet.class, new BogusJsonFormatVisitorWrapper());
207219

208220
MAPPER.acceptJsonFormatVisitor(POJOWithRefs.class, new BogusJsonFormatVisitorWrapper());
221+
222+
MAPPER.acceptJsonFormatVisitor(POJOWithJsonValue.class, new BogusJsonFormatVisitorWrapper());
209223
}
210224

211225
public void testSimpleEnum() throws Exception

0 commit comments

Comments
 (0)