Skip to content

Strange behaviour of an empty item (but with whitespace between start/end tags) in List #191

@Hronom

Description

@Hronom

Strange behaviour of empty item in list (v2.7.3)

So I have next xml file TestList.xml:

<TestList>
    <items>
        <item name="Item1"/>
        <item name="Item2">
        </item>
        <item name="Item3"/>
        <item name="Item4"/>
        <item name="Item5"/>
    </items>
</TestList>

But when I deserializing this file, I lost all items after item with name Item2, so items: Item3, Item4, Item5 is lost. If I change this xml file to next format:

<TestList>
    <items>
        <item name="Item1"/>
        <item name="Item2"/>
        <item name="Item3"/>
        <item name="Item4"/>
        <item name="Item5"/>
    </items>
</TestList>

All start working as expected.

In version 2.6.3 all work as expected...

Code listing

pom.xml

        <!-- Jackson -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.7.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.7.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.7.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
            <version>2.7.3</version>
        </dependency>

App.java

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) throws IOException {
        Path testListPath = Paths.get("TestList.xml");
        ObjectMapper mapper = new XmlMapper();
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        TestList testList = mapper.readValue(Files.newInputStream(testListPath), TestList.class);
        System.out.println();
    }
}

TestList.java

import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;

import java.util.ArrayList;

public class TestList {
    @JacksonXmlElementWrapper(useWrapping = true, localName = "items")
    @JacksonXmlProperty(localName = "item")
    public ArrayList<ListItem> items = new ArrayList<>();
}

ListItem.java

import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;

public class ListItem {
    @JacksonXmlProperty(isAttribute = true)
    public String name;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions