Tôi đang chuyển từ Castor để JAXB2 để thực hiện marshaling/unmarshaling giữa XML và đối tượng Java. Tôi đang gặp sự cố khi cố định cấu hình tập hợp các đối tượng đa hình.Cấu hình bộ sưu tập của các đối tượng đa hình để làm việc trong JAXB2
mẫu XML
<project name="test project">
<orange name="fruit orange" orangeKey="100" />
<apple name="fruit apple" appleKey="200" />
<orange name="fruit orange again" orangeKey="500" />
</project>
lớp Project
Danh sách oranges
hoạt động tốt, tôi nhìn thấy 2 cam trong danh sách. Nhưng, tôi không chắc chắn làm thế nào để cấu hình fruitList
. Các fruitList
nên có 3 trái cây: 2 quả cam và 1 quả táo.
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Project {
@XmlAttribute
private String name;
@XmlElement(name = "orange")
private List<Orange> oranges = new ArrayList<Orange>();
// Not sure how to configure this... help!
private List<Fruit> fruitList = new ArrayList<Fruit>();
}
lớp Fruit
trái cây là một lớp trừu tượng. Đối với một số lý do, việc xác định lớp này là một bản tóm tắt dường như đang gây ra rất nhiều vấn đề.
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public abstract class Fruit {
@XmlAttribute
private String name;
}
Orange lớp
public class Orange extends Fruit {
@XmlAttribute
private String orangeKey;
}
của Apple lớp
public class Apple extends Fruit {
@XmlAttribute
private String appleKey;
}
Làm thế nào để cấu hình của tôi fruitList
trong Project
để đạt được những gì tôi muốn ở đây?
Cảm ơn nhiều!
Tôi đang thử cách tiếp cận của bạn ... Tôi đã chú thích 'fruitList' thuộc tính với '@ XmlElementRef' và các lớp' Orange' và 'Apple' được chú thích có' @ XmlRootElement'. Tôi chạy mã, và 'fruitList' xuất hiện trống. Tôi làm gì sai ở đây? Cảm ơn. – limc
Tôi đã tìm ra vấn đề, tôi phải thêm 'Orange.class' và' Apple.class' vào 'JAXBContext.newInstance (..)' cùng với 'Project'. Hoạt động ngay bây giờ. Cảm ơn. – limc