Я использую Джексона для десериализации 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 есть два разных типа массивов, которые я не контролирую.
Как я могу заставить это правильно десериализоваться?