Có vẻ như có thể đối chiếu hai số khác nhaujaxb
các đối tượng có cùng tên tên.Đối tượng Jaxb có cùng tên
Có một Bar
lớp ...
public abstract Bar {
private @XmlElement String val;
}
.. với hai triển khai (nhà xây dựng, vv rời ra):
@XmlRootElement(name="bar")
public class BarA extends Bar { }
@XmlRootElement(name="bar")
public class BarB extends Bar {
private @XmlElement(required=true) String type;
}
Cuối cùng tôi muốn unmarshall một danh sách các tài liệu từ Bar
XML tương tự như sau
<bars>
<bar>
<val>1</val>
</bar>
<bar>
<val>1</val>
<type>2</type>
</bar>
</bars>
Danh sách được bao bọc pped trong một lớp học sử dụng các @XmlAnyElement
@XmlRootElement
public class Bars {
@XmlMixed
@XmlAnyElement(lax = true)
@XmlElementRefs({@XmlElementRef(BarA.class), @XmlElementRef(BarB.class)})
private List<Bar> bars;
}
Tuy nhiên tôi dường như chỉ lấy trường hợp của hoặcBarA
hoặc BarB
, lấy giá trị yếu tố cuối cùng trong chuỗi @XmlElementRefs
.
kiểm tra mã:
String xml = ...
JAXBContext jc = JAXBContext.newInstance(Bars.class);
ByteArrayInputStream in = new ByteArrayInputStream(xml.getBytes());
Bars bars = (Bars) jc.createUnmarshaller().unmarshal(in);
for (Bar bar : bars.getBars()) {
System.out.println(bar.getClass());
}
Tôi không nghĩ rằng XmlAdapter
đề xuất trong JAXB @XmlElements, different types but same name? neccesarily sẽ là phương pháp duy nhất một trong hai.