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 NamenAnimalEnhacement
mit id-Attribut? - guter Punkt, lol. glaube nicht, dass.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zum anzeigen dieser use-case könnte Sie nutzen, die folgenden XmlAdapters:
AnimalAdapter
Seit AnimalExtension ist ein super set von Tier-wir werden Sie nutzen, zu produzieren/konsumieren XML. Dann werden wir nutzen Sie die Vorteile der animalId-Eigenschaft, um zu bestimmen, wenn eine Instanz von Tier-oder AnimalExtension zurück AnimalList.
IdAdapter
Brauchen wir eine zweite XmlAdapter zu unterdrücken animalId, wenn Ihr Wert 0 ist:
Ihre model-Klassen werden kommentiert wie folgt:
AnimalList
Tier
AnimalExtension
Demo-Code
Den folgenden demo-code kann verwendet werden, um dies zu demonstrieren Lösung:
Werden die folgende Ausgabe produziert:
Verwandte Informationen
Finden Sie möglicherweise die folgenden Informationen nützlich: