Вы должны быть осторожны с пространствами имен XML.
В XML пространство имен, данное в элементе XML (как в <result>
), наследует его дочерние элементы (<documents>
, <document>
и <field>
).
В Java это не так.Поэтому вам нужно явно указать пространство имен в аннотациях @XmlElement
и @XmlElementWrapper
дочерних свойств.
Следующие классы Java работают нормально при демаршаллинге вашего примера XML.В частности, коллекции Result.documents
и Document.fields
не входят в число null
.
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "result", namespace = "http://www.example.com/search/result/1.0")
public class Result {
@XmlAttribute
private int hits;
@XmlAttribute
private int tookInMillis;
@XmlAttribute
private int totalHits;
@XmlElementWrapper(name = "documents", namespace = "http://www.example.com/search/result/1.0")
@XmlElement(name = "document", namespace = "http://www.example.com/search/result/1.0")
private List<Document> documents;
// ... public getters and setters (omitted for brevity)
}
@XmlAccessorType(XmlAccessType.FIELD)
public class Document {
@XmlAttribute
private int id;
@XmlAttribute
private String company;
@XmlAttribute
private String type;
@XmlAttribute
private Date generationDate;
@XmlElement(name = "field", namespace = "http://www.example.com/search/result/1.0")
private List<Field> fields;
// ... public getters and setters (omitted for brevity)
}