Java @XmlElement,它能够在元素类型上拥有更多元素,并且只有一个实例
我试图弄清楚如何注释一个类变量,这样它最多只能有一个基类型的元素——但具体类型可以是三个不同类中的一个。这里有一个例子,希望能解释我试图实现的目标Java @XmlElement,它能够在元素类型上拥有更多元素,并且只有一个实例,java,xml,jaxb,Java,Xml,Jaxb,我试图弄清楚如何注释一个类变量,这样它最多只能有一个基类型的元素——但具体类型可以是三个不同类中的一个。这里有一个例子,希望能解释我试图实现的目标 public class A extends Baseclass {} public class B extends Baseclass {} public class C extends Baseclass {} public MyClass { @XmlElements({ @XmlElement(name="name1",type
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或其他什么?您需要使用模式验证来获得所需的行为。这是通过在
解组器
上设置XML架构来完成的,如果XML与XML架构不匹配,则会引发错误:
@XmlElements
对应于XML模式中的选择结构的概念,并适用于您的用例
解组器
上设置XML架构来完成的,如果XML与XML架构不匹配,则会引发错误:
@XmlElements
对应于XML模式中的选择结构的概念,并适用于您的用例