aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTatu Saloranta <tatu.saloranta@iki.fi>2017-06-28 16:31:24 -0700
committerTatu Saloranta <tatu.saloranta@iki.fi>2017-06-28 16:31:24 -0700
commit3e9594b772851cde26515a07178d19a5ee47281f (patch)
tree6cc568ffbc6d859990a63c18d7e9723c6a9f3c40
parent727d4f7a5278f69204d3e0810a5fad6652c7e2e7 (diff)
downloadjackson-databind-3e9594b772851cde26515a07178d19a5ee47281f.tar.gz
more work, convert as-array type id cases
-rw-r--r--src/main/java/com/fasterxml/jackson/databind/node/ArrayNode.java6
-rw-r--r--src/main/java/com/fasterxml/jackson/databind/node/ObjectNode.java7
-rw-r--r--src/main/java/com/fasterxml/jackson/databind/ser/impl/IndexedStringListSerializer.java6
-rw-r--r--src/main/java/com/fasterxml/jackson/databind/ser/impl/MapEntrySerializer.java8
-rw-r--r--src/main/java/com/fasterxml/jackson/databind/ser/impl/StringCollectionSerializer.java6
-rw-r--r--src/main/java/com/fasterxml/jackson/databind/ser/impl/UnknownSerializer.java6
-rw-r--r--src/main/java/com/fasterxml/jackson/databind/ser/std/ArraySerializerBase.java15
-rw-r--r--src/main/java/com/fasterxml/jackson/databind/ser/std/AsArraySerializerBase.java14
-rw-r--r--src/main/java/com/fasterxml/jackson/databind/ser/std/BeanSerializerBase.java58
-rw-r--r--src/main/java/com/fasterxml/jackson/databind/ser/std/MapSerializer.java6
-rw-r--r--src/test/java/com/fasterxml/jackson/databind/node/TestConversions.java13
11 files changed, 76 insertions, 69 deletions
diff --git a/src/main/java/com/fasterxml/jackson/databind/node/ArrayNode.java b/src/main/java/com/fasterxml/jackson/databind/node/ArrayNode.java
index 3ff154c0d..49584c647 100644
--- a/src/main/java/com/fasterxml/jackson/databind/node/ArrayNode.java
+++ b/src/main/java/com/fasterxml/jackson/databind/node/ArrayNode.java
@@ -1,6 +1,7 @@
package com.fasterxml.jackson.databind.node;
import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.core.type.WritableTypeId;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
@@ -165,11 +166,12 @@ public class ArrayNode
public void serializeWithType(JsonGenerator g, SerializerProvider provider, TypeSerializer typeSer)
throws IOException
{
- typeSer.writeTypePrefixForArray(this, g);
+ WritableTypeId typeIdDef = new WritableTypeId(this, JsonToken.START_ARRAY);
+ typeSer.writeTypePrefix(g, typeIdDef);
for (JsonNode n : _children) {
((BaseJsonNode)n).serialize(g, provider);
}
- typeSer.writeTypeSuffixForArray(this, g);
+ typeSer.writeTypeSuffix(g, typeIdDef);
}
/*
diff --git a/src/main/java/com/fasterxml/jackson/databind/node/ObjectNode.java b/src/main/java/com/fasterxml/jackson/databind/node/ObjectNode.java
index 673c3321b..14b9ca054 100644
--- a/src/main/java/com/fasterxml/jackson/databind/node/ObjectNode.java
+++ b/src/main/java/com/fasterxml/jackson/databind/node/ObjectNode.java
@@ -1,6 +1,7 @@
package com.fasterxml.jackson.databind.node;
import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.core.type.WritableTypeId;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import com.fasterxml.jackson.databind.util.RawValue;
@@ -315,7 +316,9 @@ public class ObjectNode
@SuppressWarnings("deprecation")
boolean trimEmptyArray = (provider != null) &&
!provider.isEnabled(SerializationFeature.WRITE_EMPTY_JSON_ARRAYS);
- typeSer.writeTypePrefixForObject(this, g);
+
+ WritableTypeId typeIdDef = new WritableTypeId(this, JsonToken.START_OBJECT);
+ typeSer.writeTypePrefix(g, typeIdDef);
for (Map.Entry<String, JsonNode> en : _children.entrySet()) {
BaseJsonNode value = (BaseJsonNode) en.getValue();
@@ -329,7 +332,7 @@ public class ObjectNode
g.writeFieldName(en.getKey());
value.serialize(g, provider);
}
- typeSer.writeTypeSuffixForObject(this, g);
+ typeSer.writeTypeSuffix(g, typeIdDef);
}
/*
diff --git a/src/main/java/com/fasterxml/jackson/databind/ser/impl/IndexedStringListSerializer.java b/src/main/java/com/fasterxml/jackson/databind/ser/impl/IndexedStringListSerializer.java
index a247e4b73..6010e6bea 100644
--- a/src/main/java/com/fasterxml/jackson/databind/ser/impl/IndexedStringListSerializer.java
+++ b/src/main/java/com/fasterxml/jackson/databind/ser/impl/IndexedStringListSerializer.java
@@ -4,6 +4,7 @@ import java.io.IOException;
import java.util.*;
import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.core.type.WritableTypeId;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.annotation.JacksonStdImpl;
import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonArrayFormatVisitor;
@@ -82,9 +83,10 @@ public final class IndexedStringListSerializer
TypeSerializer typeSer)
throws IOException
{
- typeSer.writeTypePrefixForArray(value, g);
+ WritableTypeId typeIdDef = new WritableTypeId(value, JsonToken.START_ARRAY);
+ typeSer.writeTypePrefix(g, typeIdDef);
serializeContents(value, g, provider, value.size());
- typeSer.writeTypeSuffixForArray(value, g);
+ typeSer.writeTypeSuffix(g, typeIdDef);
}
private final void serializeContents(List<String> value, JsonGenerator g,
diff --git a/src/main/java/com/fasterxml/jackson/databind/ser/impl/MapEntrySerializer.java b/src/main/java/com/fasterxml/jackson/databind/ser/impl/MapEntrySerializer.java
index 55a6af78a..0386d7aa1 100644
--- a/src/main/java/com/fasterxml/jackson/databind/ser/impl/MapEntrySerializer.java
+++ b/src/main/java/com/fasterxml/jackson/databind/ser/impl/MapEntrySerializer.java
@@ -7,7 +7,8 @@ import java.util.Map.Entry;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonGenerator;
-
+import com.fasterxml.jackson.core.JsonToken;
+import com.fasterxml.jackson.core.type.WritableTypeId;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.annotation.JacksonStdImpl;
import com.fasterxml.jackson.databind.introspect.AnnotatedMember;
@@ -344,11 +345,12 @@ public class MapEntrySerializer
public void serializeWithType(Map.Entry<?, ?> value, JsonGenerator gen, SerializerProvider provider,
TypeSerializer typeSer) throws IOException
{
- typeSer.writeTypePrefixForObject(value, gen);
+ WritableTypeId typeIdDef = new WritableTypeId(value, JsonToken.START_OBJECT);
// [databind#631]: Assign current value, to be accessible by custom serializers
gen.setCurrentValue(value);
+ typeSer.writeTypePrefix(gen, typeIdDef);
serializeDynamic(value, gen, provider);
- typeSer.writeTypeSuffixForObject(value, gen);
+ typeSer.writeTypeSuffix(gen, typeIdDef);
}
protected void serializeDynamic(Map.Entry<?, ?> value, JsonGenerator gen,
diff --git a/src/main/java/com/fasterxml/jackson/databind/ser/impl/StringCollectionSerializer.java b/src/main/java/com/fasterxml/jackson/databind/ser/impl/StringCollectionSerializer.java
index bd6f53f94..49409606f 100644
--- a/src/main/java/com/fasterxml/jackson/databind/ser/impl/StringCollectionSerializer.java
+++ b/src/main/java/com/fasterxml/jackson/databind/ser/impl/StringCollectionSerializer.java
@@ -4,6 +4,7 @@ import java.io.IOException;
import java.util.*;
import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.core.type.WritableTypeId;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.annotation.JacksonStdImpl;
import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonArrayFormatVisitor;
@@ -85,9 +86,10 @@ public class StringCollectionSerializer
TypeSerializer typeSer)
throws IOException
{
- typeSer.writeTypePrefixForArray(value, g);
+ WritableTypeId typeIdDef = new WritableTypeId(value, JsonToken.START_ARRAY);
+ typeSer.writeTypePrefix(g, typeIdDef);
serializeContents(value, g, provider);
- typeSer.writeTypeSuffixForArray(value, g);
+ typeSer.writeTypeSuffix(g, typeIdDef);
}
private final void serializeContents(Collection<String> value, JsonGenerator g, SerializerProvider provider)
diff --git a/src/main/java/com/fasterxml/jackson/databind/ser/impl/UnknownSerializer.java b/src/main/java/com/fasterxml/jackson/databind/ser/impl/UnknownSerializer.java
index 841d4bc1f..01d463126 100644
--- a/src/main/java/com/fasterxml/jackson/databind/ser/impl/UnknownSerializer.java
+++ b/src/main/java/com/fasterxml/jackson/databind/ser/impl/UnknownSerializer.java
@@ -4,6 +4,7 @@ import java.io.IOException;
import java.lang.reflect.Type;
import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.core.type.WritableTypeId;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatVisitorWrapper;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
@@ -43,8 +44,9 @@ public class UnknownSerializer
if (provider.isEnabled(SerializationFeature.FAIL_ON_EMPTY_BEANS)) {
failForEmpty(provider, value);
}
- typeSer.writeTypePrefixForObject(value, gen);
- typeSer.writeTypeSuffixForObject(value, gen);
+ WritableTypeId typeIdDef = new WritableTypeId(value, JsonToken.START_OBJECT);
+ typeSer.writeTypePrefix(gen, typeIdDef);
+ typeSer.writeTypeSuffix(gen, typeIdDef);
}
@Override
diff --git a/src/main/java/com/fasterxml/jackson/databind/ser/std/ArraySerializerBase.java b/src/main/java/com/fasterxml/jackson/databind/ser/std/ArraySerializerBase.java
index 349df4544..42630cd86 100644
--- a/src/main/java/com/fasterxml/jackson/databind/ser/std/ArraySerializerBase.java
+++ b/src/main/java/com/fasterxml/jackson/databind/ser/std/ArraySerializerBase.java
@@ -4,6 +4,7 @@ import java.io.IOException;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.core.type.WritableTypeId;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import com.fasterxml.jackson.databind.ser.*;
@@ -125,17 +126,19 @@ public abstract class ArraySerializerBase<T>
}
@Override
- public final void serializeWithType(T value, JsonGenerator gen, SerializerProvider provider,
+ public final void serializeWithType(T value, JsonGenerator g, SerializerProvider provider,
TypeSerializer typeSer)
throws IOException
{
- typeSer.writeTypePrefixForArray(value, gen);
+ WritableTypeId typeIdDef = new WritableTypeId(value, JsonToken.START_ARRAY);
+
// [databind#631]: Assign current value, to be accessible by custom serializers
- gen.setCurrentValue(value);
- serializeContents(value, gen, provider);
- typeSer.writeTypeSuffixForArray(value, gen);
+ g.setCurrentValue(value);
+ typeSer.writeTypePrefix(g, typeIdDef);
+ serializeContents(value, g, provider);
+ typeSer.writeTypeSuffix(g, typeIdDef);
}
-
+
protected abstract void serializeContents(T value, JsonGenerator jgen, SerializerProvider provider)
throws IOException;
diff --git a/src/main/java/com/fasterxml/jackson/databind/ser/std/AsArraySerializerBase.java b/src/main/java/com/fasterxml/jackson/databind/ser/std/AsArraySerializerBase.java
index b6c41ee31..d34f3184f 100644
--- a/src/main/java/com/fasterxml/jackson/databind/ser/std/AsArraySerializerBase.java
+++ b/src/main/java/com/fasterxml/jackson/databind/ser/std/AsArraySerializerBase.java
@@ -6,7 +6,7 @@ import java.lang.reflect.Type;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.core.*;
-
+import com.fasterxml.jackson.core.type.WritableTypeId;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.introspect.AnnotatedMember;
import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatVisitorWrapper;
@@ -251,15 +251,15 @@ public abstract class AsArraySerializerBase<T>
}
@Override
- public void serializeWithType(T value, JsonGenerator gen, SerializerProvider provider,
+ public void serializeWithType(T value, JsonGenerator g, SerializerProvider provider,
TypeSerializer typeSer) throws IOException
{
- // note: let's NOT consider [JACKSON-805] here; gets too complicated, and probably just won't work
- typeSer.writeTypePrefixForArray(value, gen);
+ WritableTypeId typeIdDef = new WritableTypeId(value, JsonToken.START_ARRAY);
+ typeSer.writeTypePrefix(g, typeIdDef);
// [databind#631]: Assign current value, to be accessible by custom serializers
- gen.setCurrentValue(value);
- serializeContents(value, gen, provider);
- typeSer.writeTypeSuffixForArray(value, gen);
+ g.setCurrentValue(value);
+ serializeContents(value, g, provider);
+ typeSer.writeTypeSuffix(g, typeIdDef);
}
protected abstract void serializeContents(T value, JsonGenerator gen, SerializerProvider provider)
diff --git a/src/main/java/com/fasterxml/jackson/databind/ser/std/BeanSerializerBase.java b/src/main/java/com/fasterxml/jackson/databind/ser/std/BeanSerializerBase.java
index 7bfe4b21c..e7ba76a02 100644
--- a/src/main/java/com/fasterxml/jackson/databind/ser/std/BeanSerializerBase.java
+++ b/src/main/java/com/fasterxml/jackson/databind/ser/std/BeanSerializerBase.java
@@ -595,21 +595,7 @@ public abstract class BeanSerializerBase
return;
}
- WritableTypeId typeIdDef;
- if (_typeId == null) {
- typeIdDef = new WritableTypeId(bean, JsonToken.START_OBJECT);
- } else {
- typeIdDef = new WritableTypeId(bean, JsonToken.START_OBJECT,
- _customTypeId(bean));
- }
- /*
- String typeStr = (_typeId == null) ? null : _customTypeId(bean);
- if (typeStr == null) {
- typeSer.writeTypePrefixForObject(bean, gen);
- } else {
- typeSer.writeCustomTypePrefixForObject(bean, gen, typeStr);
- }
- */
+ WritableTypeId typeIdDef = _typeIdDef(bean);
gen.setCurrentValue(bean); // [databind#631]
typeSer.writeTypePrefix(gen, typeIdDef);
@@ -618,15 +604,7 @@ public abstract class BeanSerializerBase
} else {
serializeFields(bean, gen, provider);
}
-
typeSer.writeTypeSuffix(gen, typeIdDef);
- /*
- if (typeStr == null) {
- typeSer.writeTypeSuffixForObject(bean, gen);
- } else {
- typeSer.writeCustomTypeSuffixForObject(bean, gen, typeStr);
- }
- */
}
protected final void _serializeWithObjectId(Object bean, JsonGenerator gen, SerializerProvider provider,
@@ -673,7 +651,6 @@ public abstract class BeanSerializerBase
w.serializer.serialize(id, gen, provider);
return;
}
-
_serializeObjectId(bean, gen, provider, typeSer, objectId);
}
@@ -681,25 +658,34 @@ public abstract class BeanSerializerBase
TypeSerializer typeSer, WritableObjectId objectId) throws IOException
{
final ObjectIdWriter w = _objectIdWriter;
- String typeStr = (_typeId == null) ? null :_customTypeId(bean);
- if (typeStr == null) {
- typeSer.writeTypePrefixForObject(bean, gen);
- } else {
- typeSer.writeCustomTypePrefixForObject(bean, gen, typeStr);
- }
+ WritableTypeId typeIdDef = _typeIdDef(bean);
+
+ typeSer.writeTypePrefix(gen, typeIdDef);
objectId.writeAsField(gen, provider, w);
if (_propertyFilterId != null) {
serializeFieldsFiltered(bean, gen, provider);
} else {
serializeFields(bean, gen, provider);
}
- if (typeStr == null) {
- typeSer.writeTypeSuffixForObject(bean, gen);
- } else {
- typeSer.writeCustomTypeSuffixForObject(bean, gen, typeStr);
+ typeSer.writeTypeSuffix(gen, typeIdDef);
+ }
+
+ /**
+ * @since 2.9
+ */
+ protected final WritableTypeId _typeIdDef(Object bean) {
+ if (_typeId == null) {
+ return new WritableTypeId(bean, JsonToken.START_OBJECT);
}
+ Object typeId = _typeId.getValue(bean);
+ if (typeId == null) {
+ // 28-Jun-2017, tatu: Is this really needed? Unchanged from 2.8 but...
+ typeId = "";
+ }
+ return new WritableTypeId(bean, JsonToken.START_OBJECT, typeId);
}
-
+
+ @Deprecated // since 2.9
protected final String _customTypeId(Object bean)
{
final Object typeId = _typeId.getValue(bean);
@@ -708,7 +694,7 @@ public abstract class BeanSerializerBase
}
return (typeId instanceof String) ? (String) typeId : typeId.toString();
}
-
+
/*
/**********************************************************
/* Field serialization methods
diff --git a/src/main/java/com/fasterxml/jackson/databind/ser/std/MapSerializer.java b/src/main/java/com/fasterxml/jackson/databind/ser/std/MapSerializer.java
index e30987cbb..e668da573 100644
--- a/src/main/java/com/fasterxml/jackson/databind/ser/std/MapSerializer.java
+++ b/src/main/java/com/fasterxml/jackson/databind/ser/std/MapSerializer.java
@@ -8,6 +8,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.core.type.WritableTypeId;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.annotation.JacksonStdImpl;
import com.fasterxml.jackson.databind.introspect.AnnotatedMember;
@@ -646,9 +647,10 @@ public class MapSerializer
TypeSerializer typeSer)
throws IOException
{
- typeSer.writeTypePrefixForObject(value, gen);
+ WritableTypeId typeIdDef = new WritableTypeId(value, JsonToken.START_OBJECT);
// [databind#631]: Assign current value, to be accessible by custom serializers
gen.setCurrentValue(value);
+ typeSer.writeTypePrefix(gen, typeIdDef);
if (!value.isEmpty()) {
if (_sortKeys || provider.isEnabled(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS)) {
value = _orderEntries(value, gen, provider);
@@ -664,7 +666,7 @@ public class MapSerializer
serializeFields(value, gen, provider);
}
}
- typeSer.writeTypeSuffixForObject(value, gen);
+ typeSer.writeTypeSuffix(gen, typeIdDef);
}
/*
diff --git a/src/test/java/com/fasterxml/jackson/databind/node/TestConversions.java b/src/test/java/com/fasterxml/jackson/databind/node/TestConversions.java
index b17dda304..d4e3f6626 100644
--- a/src/test/java/com/fasterxml/jackson/databind/node/TestConversions.java
+++ b/src/test/java/com/fasterxml/jackson/databind/node/TestConversions.java
@@ -9,6 +9,7 @@ import static org.junit.Assert.*;
import org.junit.Assert;
import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.core.type.WritableTypeId;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
@@ -237,11 +238,13 @@ public class TestConversions extends BaseMapTest
}
@Override
- public void serializeWithType(JsonGenerator jgen,
- SerializerProvider provider, TypeSerializer typeSer) throws IOException {
- typeSer.writeTypePrefixForObject(this, jgen);
- serialize(jgen, provider);
- typeSer.writeTypeSuffixForObject(this, jgen);
+ public void serializeWithType(JsonGenerator g,
+ SerializerProvider provider, TypeSerializer typeSer) throws IOException
+ {
+ WritableTypeId typeIdDef = new WritableTypeId(this, JsonToken.START_OBJECT);
+ typeSer.writeTypePrefix(g, typeIdDef);
+ serialize(g, provider);
+ typeSer.writeTypePrefix(g, typeIdDef);
}
}