JAXB @XmlElements, de différents types, mais le même nom?

J'ai un Animal de la classe et une extension de l'Animal appelé AnimalExtension.

public class Animal

public class AnimalExtension extends Animal

La seule différence entre les deux classes n'est que AnimalExtension a une autre variable d'instance appelée animalId. Les animaux n'ont pas cette variable d'instance.

J'ai aussi mon propre type de données que je veux maréchal et unamarshal à XML. Ce type de données est appelé AnimalList. à l'intérieur de AnimalList, il y a une liste des Animaux comme une variable d'instance.

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

animalList peut contenir à la fois des Animaux et des AnimalExtension. Cependant, sur le XML je ne veux pas l'élément à être nommé comme AnimalExtension; je veux qu'ils aient tous le nom de l'élément de l'Animal. Je veux seulement l'attribut supplémentaire pour montrer quand JAXB sait que l'Animal est en fait une instance de AnimalExtension. Donc, si j'ai une liste qui ressemble à

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

Je veux le XML pour ressembler à

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

C'est ce que j'ai essayé de faire

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

Le code compile mais quand j'ai essayer de lancer mon serveur. Il me donne cette erreur bizarre c'est donc sans rapport avec ce qui se passe (BeanCreationException). J'ai essayé de faire au nom de la XmlElement différents pour chaque type et qui fonctionne, mais le défi ici est de rendre le nom de le même.

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'encryptionPayloadContentProvider'
Compte tenu de XML comment est JAXB censé déterminer la classe à utiliser pour Java création d'un objet? Est-il l'existence de id attribut? Que faire si il y avait autre classe nommée AnimalEnhacement avec l'attribut id?
bon point lol. il n'a pas penser que.

OriginalL'auteur denniss | 2011-02-15