Джексон XML не работает с массивом внутри массива - PullRequest
0 голосов
/ 05 июля 2019

Я использую Джексона для десериализации XML в POJO:

<ezCertApplication>
    <AccountRef>...</AccountRef>
    <AppID>...</AppID>
    ...
    <items>
        <Item>
            <CertificateReference>...</CertificateReference>
            ...
        </Item>
    </items>
</ezCertApplication>
<ezCertApplication>
    <AccountRef>...</AccountRef>
    <AppID>...</AppID>
    ...
    <items>
        <Item>
            <CertificateReference>...</CertificateReference>
            ...
        </Item>
    </items>
</ezCertApplication>

Классы выглядят так:

public class ArrayOfezCertApplication
{
    @JacksonXmlElementWrapper(useWrapping = false)    
    @JacksonXmlProperty(localName="ezCertApplication")
    private List<EzCertApplication> applications;

    public Collection<EzCertApplication> getApplications()
    {
        return applications;
    }    
}


@JsonIgnoreProperties(ignoreUnknown = true)
public class EzCertApplication
{
    @JacksonXmlProperty(localName="AccountRef")
    private String accountRef;

    @JacksonXmlProperty(localName="ApplicationRef")
    private String applicationRef;

    ...

    @JacksonXmlProperty(localName="items")
    private List<Item> items;
}


@JsonIgnoreProperties(ignoreUnknown = true)
public class Item
{
    @JacksonXmlProperty(localName="CertificateReference")
    private String certificateReference;


    public String getCertificateReference()
    {
        return certificateReference;
    }
}

и я десериализую вот так:

new XmlMapper().readValue(src, ArrayOfezCertApplication.class);

Когда я запускаю это, элементы десериализуются, но я получаю только последнее ezCertApplication из массива. Если я изменю на:

@JacksonXmlElementWrapper(useWrapping = false)    
@JacksonXmlProperty(localName="items")
private List<Item> items;

Затем я получаю все ezCertApplications из массива, но массив, если элементы для каждого из них равны нулю.

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

Как я могу заставить это правильно десериализоваться?

...