Tôi có một lớp học Động vật và một phần mở rộng của Động vật được gọi là AnimalExtension.JAXB @XmlElements, các loại khác nhau nhưng cùng tên?
public class Animal
public class AnimalExtension extends Animal
Sự khác biệt duy nhất giữa hai lớp là AnimalExtension có một biến thể hiện khác được gọi là animalId. Động vật không có biến thể hiện này.
Tôi cũng có loại dữ liệu của riêng mình mà tôi muốn sắp xếp và không đối sánh với XML. Kiểu dữ liệu này được gọi là AnimalList. bên trong AnimalList, có một danh sách các loài động vật như một biến cá thể.
@XmlType(name = "AnimalList")
public class AnimalList{
private List<Animal> animalList;
....
animalList có thể chứa cả Animal and AnimalExtension. Tuy nhiên, trên XML tôi không muốn phần tử được đặt tên là AnimalExtension; Tôi muốn tất cả họ có tên yếu tố của động vật. Tôi chỉ muốn thêm thuộc tính để hiển thị khi JAXB biết rằng Động vật thực sự là một thể hiện của AnimalExtension. Vì vậy, nếu tôi có một danh sách giống như
List<Animal> animalList = new LinkedList<Animal>();
AnimalExtension animalExtension = new AnimalExtension();
animalExtension.setAnimalId(1);
amimalExtension.setName("Don");
Animal animal = new Animal();
animal.setName("Mike");
animalList.add(animalExtension);
animalList.add(animal);
Tôi muốn XML để trông giống như
<AnimalList>
<Animal name="Don" id="1" />
<Animal name="Mike" />
</AnimalList>
Đây là những gì tôi đã cố gắng làm
@XmlElements(
{
@XmlElement(name = "Animal", type = Animal.class),
@XmlElement(name = "Animal", type = AnimalExtension.class)
}
)
public List<Animal> getEntries() {
return animalList;
}
mã biên dịch nhưng khi tôi thử chạy máy chủ của mình. Nó mang lại cho tôi lỗi lạ này không liên quan đến những gì đang diễn ra (BeanCreationException). Tôi đã cố gắng làm cho tên của XmlElement là khác nhau cho mỗi loại và hoạt động, nhưng thách thức ở đây là làm cho tên giống nhau.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'encryptionPayloadContentProvider'
Với một XML như thế nào JAXB phải xác định lớp để sử dụng cho việc tạo đối tượng Java? Nó có tồn tại thuộc tính 'id' không? Điều gì sẽ xảy ra nếu có một lớp khác có tên 'AnimalEnhacement' có thuộc tính id? –
điểm tốt lol. không nghĩ về điều đó. – denniss