我传递一些XML的RESTful Web服务:规定在JAXB中只允许一个元素的一个实例?
<root>
<element1/>
<element2/>
<element3/>
</root>
Web服务将解组此XML,我希望确保XML是有效的。
我使用的架构来创建Java对象,并在此架构element1
具有maxOccurs=1
属性但这对所创建的(不同于,例如Java对象没有影响,添加minOccurs=1
这将导致"required=true"
被添加到@XMLElement
注释)。在解组传递Web服务的XML时,如果一次只出现一次的元素出现多次,那么元素的最后一个实例将被解析。我不希望发生这种情况,因为我希望能够提醒客户他们发送的XML无效,并且应该删除任何不适用的元素 - 而不是只是随意接受最后一个元素。我相信这将涉及解组之前的一些预验证 - 我可以使用beforeUnmarshal方法。
经过一番研究,我的理解是没有JAXB注释可以让我指定element1
只能存在一次。是这样吗?如果没有模式,是否可以验证它?
你试过maxOccurs = 1吗? – Victor
我从maxOccurs = 1的模式生成了我的java类,是的。但是java类没有任何东西可以强制执行,所以如果有多个元素会解析最后一个元素,并且似乎忽略了其余元素,那么当我真的需要一个异常时。 – kirsty
JAXB不执行模式验证。你必须手动进行模式验证 –