diff --git a/src/main/java/com/fasterxml/jackson/dataformat/xml/ser/XmlSerializerProvider.java b/src/main/java/com/fasterxml/jackson/dataformat/xml/ser/XmlSerializerProvider.java index 6ef95c32a..36b766208 100644 --- a/src/main/java/com/fasterxml/jackson/dataformat/xml/ser/XmlSerializerProvider.java +++ b/src/main/java/com/fasterxml/jackson/dataformat/xml/ser/XmlSerializerProvider.java @@ -96,7 +96,7 @@ public void serializeValue(JsonGenerator gen, Object value) throws IOException rootName = _rootNameLookup.findRootName(cls, _config); } _initWithRootName(xgen, rootName); - asArray = TypeUtil.isIndexedType(cls); + asArray = TypeUtil.isIndexedType(_config.constructType(cls)); if (asArray) { _startRootArray(xgen, rootName); } @@ -155,7 +155,7 @@ public void serializeValue(JsonGenerator gen, Object value, JavaType rootType, } _initWithRootName(xgen, rootName); asArray = (rootType == null) - ? TypeUtil.isIndexedType(value.getClass()) + ? TypeUtil.isIndexedType(_config.constructType(value.getClass())) : TypeUtil.isIndexedType(rootType); if (asArray) { _startRootArray(xgen, rootName); @@ -204,7 +204,7 @@ public void serializePolymorphic(JsonGenerator gen, Object value, JavaType rootT } _initWithRootName(xgen, rootName); asArray = (rootType == null) - ? TypeUtil.isIndexedType(value.getClass()) + ? TypeUtil.isIndexedType(_config.constructType(value.getClass())) : TypeUtil.isIndexedType(rootType); if (asArray) { _startRootArray(xgen, rootName); diff --git a/src/main/java/com/fasterxml/jackson/dataformat/xml/util/TypeUtil.java b/src/main/java/com/fasterxml/jackson/dataformat/xml/util/TypeUtil.java index 8ad7e51b0..9328a35a2 100644 --- a/src/main/java/com/fasterxml/jackson/dataformat/xml/util/TypeUtil.java +++ b/src/main/java/com/fasterxml/jackson/dataformat/xml/util/TypeUtil.java @@ -15,7 +15,7 @@ public class TypeUtil public static boolean isIndexedType(JavaType type) { Class cls = type.getRawClass(); - if (type.isContainerType() || canHandleLikeAnIterable(cls)) { + if (type.isContainerType() || type.isIterationType()) { // One special case; byte[] will be serialized as base64-encoded String, not real array, so: // (actually, ditto for char[]; thought to be a String) if (cls == byte[].class || cls == char[].class) { @@ -30,20 +30,4 @@ public static boolean isIndexedType(JavaType type) } return false; } - - public static boolean isIndexedType(Class cls) - { - return (cls.isArray() && cls != byte[].class && cls != char[].class) - || Collection.class.isAssignableFrom(cls) || canHandleLikeAnIterable(cls); - } - - /** - * See related disccussions - * for detailed history. - * - * @since 2.16 - */ - private static boolean canHandleLikeAnIterable(Class cls) { - return Iterator.class.isAssignableFrom(cls) || Stream.class.isAssignableFrom(cls); - } }