Десериализация списка XML с использованием Jackson - PullRequest
0 голосов
/ 02 апреля 2020

Я хожу по кругу здесь и ищу некоторую помощь в получении этого для создания списка.

Это мой xml

<rs:data>
     <z:row iWebDiskID='2224' vchDiskID='NSS001' iQuizID='53647'/>
     <z:row iWebDiskID='2224' vchDiskID='NSS001' iQuizID='86097'/>
     <z:row iWebDiskID='2224' vchDiskID='NSS001' iQuizID='86100'/>
     ....
</rs:data>

Это мой класс строки

@JacksonXmlRootElement(namespace = "z", localName = "row")
public class RPDiskItem{
    @JacksonXmlText
    public Integer iWebDiskID;

    @JacksonXmlText
    public String vchDiskID;

    @JacksonXmlText
    public Integer iQuizID;
}

Это мой класс данных

@JacksonXmlRootElement(namespace = "rs", localName = "data")
public class Data
{
    @JacksonXmlElementWrapper(namespace = "rs", localName = "data")
    @JacksonXmlProperty(namespace = "z", localName = "row")
    @JsonProperty("z:row")
    public List<RPDiskItem> data;

    public List<RPDiskItem> getData() {
        return data;
    }

    public void setData(List<RPDiskItem> data) {
        this.data = data;
    }
}

И я передаю его так:

public class XmlParser{
    public static void main(String[] args) throws Exception{
        XMLInputFactory f = new WstxInputFactory();
        f.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, Boolean.FALSE);

        ObjectMapper mapper =  new ObjectMapper(new XmlFactory(f, new WstxOutputFactory()));

        RPDiskItem di = mapper.readValue(Strings.simple, RPDiskItem.class);

        Data d = mapper.readValue(Strings.listItems, Data.class);
    }
}

Где Strings.simple это просто первая строка в xml и Strings.listItems - это полные xml, как указано выше.

Анализ одного RPDiskItem работает без проблем, но попытка получить список из них, похоже, не работает. Я либо получаю это исключение ниже, либо в виде пустого списка.

 Exception in thread "main" com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:           Unrecognized field "z:row" (class pojo.Data), not marked as ignorable (one known property: "data"])
     at [Source: (StringReader); line: 2, column: 70] (through reference chain: pojo.Data["z:row"])
     at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:61)
     at com.fasterxml.jackson.databind.DeserializationContext.handleUnknownProperty(DeserializationContext.java:843)
     at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:1206)
     at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1592)
     at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1570)
     at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:294)
     at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:151)
     at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4218)
     at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3214)
     at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3182)
     at XmlParser.main(XmlParser.java:26)

Я уверен, что просто упускаю что-то простое, но я не могу найти какие-либо примеры подобной ситуации

...