JAXB Unmarshalling - 是否可以在不使用模式验证的情况下限制元素的出现?

时间:2013-12-10 16:37:31

标签: xml validation jaxb xsd

我是JAXB的新手,并继承了一个使用它来编组/解组xml的项目 - 已经使用各种JAXB注释编写了自定义验证 - 目前没有使用模式。
我需要在解组时添加一些验证来检查给定元素只出现一次 - 从搜索周围看起来它通常在xsd中使用“maxOccurs = 1”实现 - 所以我的问题是可以使用任何JAXB验证来实现注释?
例如(简化版本缩短版) - 当前最后一个值“NameThree”被取消编组,但是当存在多个名称元素时我想要验证错误。

@XmlAccessorType(XmlAccessType.FIELD)
public class Person {

@XmlElement(name="NAME", required = true)
    protected String name;
}

和xml文件:

<Person>
 <Name>NameOne</Name>
 <Name>NameTwo</Name> 
 <Name>NameThree</Name> 
</Person>

感谢您的任何指示。

编辑 - 为清楚起见,元素不是根元素。还有其他元素(以上仅供参考)

1 个答案:

答案 0 :(得分:3)

您问题的直接答案是我认为您不能使用JAXB验证注释来识别元素的多次出现。

但是,为了在不实现模式的情况下解决您的问题,您可以向unmarshaller添加listener,以便您访问callbacks.然后您可以使用回调在条件为右。