【发布时间】:2011-06-27 19:25:39
【问题描述】:
我有一个 Animal 类和一个名为 AnimalExtension 的 Animal 扩展。
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;我希望他们都有动物的元素名称。我只希望在 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属性的存在吗?如果有其他名为AnimalEnhacement的类具有id 属性怎么办? -
好点哈哈。没想到。