http://bdoughan.blogspot.com/2010/11/jaxb-and-inheritance-using-substitution.html

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

public class Animal

public class AnimalExtension extends Animal

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

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

@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'

Ответы на вопрос(1)

Ваш ответ на вопрос