JAXB @XmlElements, разные типы, но с одинаковым именем?

У меня есть класс Animal и расширение Animal под названием AnimalExtension.

public class Animal

public class AnimalExtension extends Animal

Единственное различие между этими двумя классами состоит в том, что AnimalExtension имеет другую переменную экземпляра под названием animalId. У Animal нет этой переменной экземпляра.

У меня также есть собственный тип данных, который я хочу упорядочить и деамаршалировать в XML. Этот тип данных называется AnimalList. внутри AnimalList есть список животных в качестве переменной экземпляра.

@XmlType(name = "AnimalList")
public class AnimalList{
    private List<Animal> animalList;
    ....

animalList может содержать как Animal, так и AnimalExtension. Однако в XML я не хочу, чтобы элемент назывался AnimalExtension; Я хочу, чтобы у всех них было имя элемента Animal. Я хочу, чтобы дополнительный атрибут отображался только тогда, когда JAXB знает, что Animal на самом деле является экземпляром AnimalExtension. Итак, если у меня есть список, который выглядит как

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);

, я хочу, чтобы XML выглядел как

<AnimalList>
   <Animal name="Don" id="1" />
   <Animal name="Mike" />
</AnimalList>

Это то, что я пытался сделать

    @XmlElements(
    {
            @XmlElement(name = "Animal", type = Animal.class),
            @XmlElement(name = "Animal", type = AnimalExtension.class)
        }
    )
    public List<Animal> getEntries() {
        return animalList;
    }

Код компилируется, но когда я пытаюсь запустить свой сервер. Это дает мне эту странную ошибку, которая не имеет отношения к тому, что происходит (BeanCreationException). Я попытался сделать имя XmlElement различным для каждого типа, и это работает, но задача состоит в том, чтобы сделать имя одинаковым.

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'encryptionPayloadContentProvider'
10
задан Mike Cluck 12 November 2015 в 18:46
поделиться