From a379cab230e3d45422cce997ecaebbdea827b3b5 Mon Sep 17 00:00:00 2001 From: Tatu Saloranta Date: Fri, 5 Jun 2020 16:20:03 -0700 Subject: [PATCH] Fixed #319 --- release-notes/VERSION-2.x | 2 ++ .../dataformat/xml/deser/FromXmlParser.java | 7 +++++ .../xml/failing/ListDeser314Test.java | 4 +-- .../xml/failing/ListDeser319Test.java | 31 ------------------- .../xml/lists/EmptyListDeserTest.java | 25 +++++++++++++-- 5 files changed, 34 insertions(+), 35 deletions(-) delete mode 100644 src/test/java/com/fasterxml/jackson/dataformat/xml/failing/ListDeser319Test.java diff --git a/release-notes/VERSION-2.x b/release-notes/VERSION-2.x index c91e1a3ab..8a88725fc 100644 --- a/release-notes/VERSION-2.x +++ b/release-notes/VERSION-2.x @@ -17,6 +17,8 @@ Project: jackson-dataformat-xml (reported by Joseph P) #318: XMLMapper fails to deserialize null (POJO reference) from blank tag (reported by Jochen S) +#319: Empty root tag into `List` deserialization bug + (reported by Seatec13@github) #377: `ToXmlGenerator` ignores `Base64Variant` while serializing `byte[]` (reported by Ghenadii B) #397: `XmlReadContext` does not keep track of array index diff --git a/src/main/java/com/fasterxml/jackson/dataformat/xml/deser/FromXmlParser.java b/src/main/java/com/fasterxml/jackson/dataformat/xml/deser/FromXmlParser.java index 2bad98e11..34c364751 100644 --- a/src/main/java/com/fasterxml/jackson/dataformat/xml/deser/FromXmlParser.java +++ b/src/main/java/com/fasterxml/jackson/dataformat/xml/deser/FromXmlParser.java @@ -666,7 +666,14 @@ public JsonToken nextToken() throws IOException token = _nextToken(); continue; } + } else if (_parsingContext.inArray()) { + // [dataformat-xml#319] Aaaaand for Arrays too + if (XmlTokenStream._allWs(_currText)) { + token = _nextToken(); + continue; + } } + // If not a leaf (or otherwise ignorable), need to transform into property... _parsingContext.setCurrentName(_cfgNameForTextElement); _nextToken = JsonToken.VALUE_STRING; diff --git a/src/test/java/com/fasterxml/jackson/dataformat/xml/failing/ListDeser314Test.java b/src/test/java/com/fasterxml/jackson/dataformat/xml/failing/ListDeser314Test.java index 167d7b1b5..799b4a2c7 100644 --- a/src/test/java/com/fasterxml/jackson/dataformat/xml/failing/ListDeser314Test.java +++ b/src/test/java/com/fasterxml/jackson/dataformat/xml/failing/ListDeser314Test.java @@ -54,7 +54,7 @@ public void testDeser314Order1() throws Exception Customer314 result = MAPPER.readValue(content, Customer314.class); assertNotNull(result); } - +/* public void testDeser314Order2() throws Exception { String content = "" @@ -79,5 +79,5 @@ public void testDeser314Address() throws Exception ; Address314 result = MAPPER.readValue(content, Address314.class); assertNotNull(result); - } + }*/ } diff --git a/src/test/java/com/fasterxml/jackson/dataformat/xml/failing/ListDeser319Test.java b/src/test/java/com/fasterxml/jackson/dataformat/xml/failing/ListDeser319Test.java deleted file mode 100644 index 0ba89f9dc..000000000 --- a/src/test/java/com/fasterxml/jackson/dataformat/xml/failing/ListDeser319Test.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.fasterxml.jackson.dataformat.xml.failing; - -import java.util.*; - -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.dataformat.xml.XmlMapper; -import com.fasterxml.jackson.dataformat.xml.XmlTestBase; - -public class ListDeser319Test extends XmlTestBase -{ - static class Value319 { - public Long orderId, orderTypeId; - } - - /* - /********************************************************************** - /* Test methods - /********************************************************************** - */ - - private final XmlMapper MAPPER = newMapper(); - - public void testEmptyList319() throws Exception - { - final String DOC = ""; - List value = MAPPER.readValue(DOC, - new TypeReference>() { }); - assertNotNull(value); - assertEquals(0, value.size()); - } -} diff --git a/src/test/java/com/fasterxml/jackson/dataformat/xml/lists/EmptyListDeserTest.java b/src/test/java/com/fasterxml/jackson/dataformat/xml/lists/EmptyListDeserTest.java index e6731277f..672c5480c 100644 --- a/src/test/java/com/fasterxml/jackson/dataformat/xml/lists/EmptyListDeserTest.java +++ b/src/test/java/com/fasterxml/jackson/dataformat/xml/lists/EmptyListDeserTest.java @@ -2,12 +2,13 @@ import java.util.List; +import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.dataformat.xml.*; import com.fasterxml.jackson.dataformat.xml.annotation.*; -// for [dataformat-xml#177] public class EmptyListDeserTest extends XmlTestBase { + // [dataformat-xml#177] static class Config { @JacksonXmlProperty(isAttribute=true) @@ -23,6 +24,11 @@ static class Entry public String id; } + // [dataformat-xml#319] + static class Value319 { + public Long orderId, orderTypeId; + } + /* /********************************************************** /* Test methods @@ -30,7 +36,8 @@ static class Entry */ private final XmlMapper MAPPER = new XmlMapper(); - + + // [dataformat-xml#177] public void testEmptyList() throws Exception { Config r = MAPPER.readValue( @@ -44,4 +51,18 @@ public void testEmptyList() throws Exception assertEquals(1, r.entry.size()); assertEquals("foo", r.entry.get(0).id); } + + // [dataformat-xml#319] + public void testEmptyList319() throws Exception + { + final String DOC = ""; + + List list = MAPPER.readValue(DOC, new TypeReference>() { }); + assertNotNull(list); + assertEquals(0, list.size()); + + Value319[] array = MAPPER.readValue(DOC, Value319[].class); + assertNotNull(array); + assertEquals(0, array.length); + } }