Mam klasę Animal i rozszerzenie Animal o nazwie AnimalExtension.JAXB @XmlElements, różne typy, ale takie same nazwy?
public class Animal
public class AnimalExtension extends Animal
Jedyna różnica między tymi dwiema klasami polega na tym, że AnimalExtension ma inną zmienną instancji o nazwie animalId. Zwierzę nie ma tej instancji zmiennej.
Mam również swój własny typ danych, który chcę zabezpieczyć i przypisać do formatu XML. Ten typ danych nosi nazwę AnimalList. wewnątrz AnimalList znajduje się lista zwierząt jako zmienna instancji.
@XmlType(name = "AnimalList")
public class AnimalList{
private List<Animal> animalList;
....
animalList może zawierać zarówno zwierzęce, jak i zwierzęce rozszerzenie. Jednak na XML nie chcę, aby element był nazywany AnimalExtension; Chcę, żeby wszyscy mieli imię zwierzęcia. Chcę tylko, aby dodatkowy atrybut pojawił się, gdy JAXB wie, że Animal jest faktycznie instancją AnimalExtension. Więc jeśli mam listę, która wygląda jak
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);
chcę XML wyglądać
<AnimalList>
<Animal name="Don" id="1" />
<Animal name="Mike" />
</AnimalList>
To jest to, co starałem się zrobić
@XmlElements(
{
@XmlElement(name = "Animal", type = Animal.class),
@XmlElement(name = "Animal", type = AnimalExtension.class)
}
)
public List<Animal> getEntries() {
return animalList;
}
Kod kompiluje ale kiedy próbuję uruchomić mój serwer. Daje mi to dziwny błąd, który jest tak niezwiązany z tym, co się dzieje (BeanCreationException). Próbowałem, aby nazwa XmlElement była inna dla każdego typu i działa, ale wyzwaniem jest tutaj, aby nazwa była taka sama.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'encryptionPayloadContentProvider'
Biorąc pod uwagę jak jest JAXB XML powinien określić, która klasa używać do tworzenia obiektów Javy? Czy jest to atrybut "id"? Co jeśli istnieje inna klasa o nazwie "AnimalEnhacement" z atrybutem id? –
dobry punkt lol. Nie myślałem o tym. – denniss