【发布时间】:2012-01-06 23:32:52
【问题描述】:
我试图弄清楚如何注释一个类变量,以便它最多可以有一个基本类型的元素 - 但具体类型可以是三个不同的类之一。这是一个示例,希望可以解释我要完成的工作。
public class A extends Baseclass {}
public class B extends Baseclass {}
public class C extends Baseclass {}
public MyClass {
@XmlElements({
@XmlElement(name="name1",type="A.class"),
@XmlElement(name="name2",type="B.class"),
@XmlElement(name="name3",type="C.class")
})
private Baseclass xyz;
...
}
此构造允许 xml 包含多个具有“name1”、“name2”或“name3”的元素。 JAXB 显然只获取最后解析的元素并将其用作“xyz”的值。
但是,我希望 JAXB 只允许 A、B 或 C 类型的一个元素分别带有“name1”、“name2”或“name3”。
xml 看起来像:
<myElement>
<name1></name1>
<name1></name1>
<name2></name2>
</myElement>
在这种情况下,name2 元素将被分配给 xyz 变量。
但我想要的是让 JAXB 在使用上述 xml 构造时返回错误。
我只想允许
<myElement>
<name1></name1>
</myElement>
但不是
<myElement>
<name1></name1>
<name1></name1>
<name2></name2>
</myElement>
@XmlElements 的 javadoc 声明它适用于列表,这似乎就是发生这种行为的原因。
所以,我的问题是:
如何注释“xyz”以获得所需的行为? @XmlAdapter 还是什么?
【问题讨论】: