规定在JAXB中只允许一个元素的一个实例?

时间:2015-07-13 13:33:55

标签: java xml jaxb

我将一些XML传递给RESTful Web服务:

<root>
    <element1/>
        <element2/>
    <element3/>
</root>

Web服务将解组此XML,我想确保XML有效。

我使用模式来创建Java对象,并且在此模式中element1具有maxOccurs=1属性,但这对创建的Java对象没有影响(例如,添加{ {1}}会导致minOccurs=1添加到"required=true"注释中。在解组传递Web服务的XML时,如果应该只出现一次的元素多次出现,则将解析该元素的最后一个实例。我不希望这种情况发生,因为我希望能够提醒客户端他们发送的XML无效,并且他们应该删除任何不适用的元素 - 而不是随意接受最后一个元素。我相信这将涉及在解组前进行一些预先验证 - 我可以使用beforeUnmarshal方法。

经过一些研究后,我的理解是没有JAXB注释可以指定@XMLElement只能存在一次。是这样的吗?是否可以在没有架构的情况下验证这一点?

2 个答案:

答案 0 :(得分:1)

我通过在Java对象中允许元素的多个实例来解决这个问题:

@XmlElement(name = "element1", required = true)
private List<element1> element1;

这将允许我在afterUnmarshal方法中检查列表的大小,如果列表的大小大于1,我可以抛出一个新的ValidationException

答案 1 :(得分:0)

调用您的应用程序的应用程序因为在Java层上执行此操作有点困难,但您可以在Web服务层轻松执行此操作,您可以在其中将minOccurance定义为将要投放的1个广告。

但是如果你想在Java层上这样做,你需要使用XML解析器,然后计算特定标签的Occurance,但这需要花费很多时间。