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);
+ }
}