我有一個動物類和動物的延伸叫做AnimalExtension。JAXB @XmlElements,不同類型但名稱相同?
public class Animal
public class AnimalExtension extends Animal
這兩個類之間的唯一區別是AnimalExtension具有另一個名爲animalId的實例變量。動物沒有這個實例變量。
我也有我自己的數據類型,我想編組和unamarshal到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'
給定一個XML的JAXB應該如何確定使用Java對象創建哪一類?是否存在'id'屬性?如果有其他具有id屬性的名爲'AnimalEnhacement'的類呢? –
好點大聲笑。沒有想到這一點。 – denniss