JAXB @XmlElements, verschiedene Arten, aber gleiche Namen?

Habe ich ein Tier-Klasse und eine Erweiterung der Tier namens AnimalExtension.

public class Animal

public class AnimalExtension extends Animal

Der einzige Unterschied zwischen den beiden Klassen ist, dass AnimalExtension hat eine andere Instanz-variable namens animalId. Tier nicht über diese Instanz-variable.

Ich habe auch meine eigenen Daten geben, die ich möchte, Marschall und unamarshal zu XML. Dieser Datentyp heißt AnimalList. innerhalb AnimalList, es gibt eine Liste von Tieren, die als Instanz-variable.

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

animalList enthalten kann, die sowohl Tier-und AnimalExtension. Aber auf der XML, die ich nicht wollen, das element benannt zu werden, als AnimalExtension; ich will Sie alle haben element name des Tieres. Ich will nur das extra-Attribut zu zeigen, wenn JAXB weiß, dass das Tier tatsächlich eine Instanz AnimalExtension. Wenn ich also eine Liste, die so aussieht wie

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

Möchte ich die XML Aussehen

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

Dies ist, was ich versucht habe zu tun

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

Den code kompiliert, aber wenn ich versuche mit meinem server. Es gibt mir dieses seltsame Fehlermeldung, die so nichts mit, was Los ist (BeanCreationException). Ich habe versucht, die Namen der XmlElement, anders zu sein für jeden Typ und das funktioniert, aber die Herausforderung hier ist, den Namen der gleichen.

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'encryptionPayloadContentProvider'
  • Gegeben sei ein XML-wie wird JAXB soll, um zu bestimmen, welche Klasse für Java-Objekt erstellen? Ist es die Existenz der id - Attribut? Was ist, wenn es anderen Klasse mit dem Namen AnimalEnhacement mit id-Attribut?
  • guter Punkt, lol. glaube nicht, dass.
InformationsquelleAutor denniss | 2011-02-15
Schreibe einen Kommentar