我将一些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
只能存在一次。是这样的吗?是否可以在没有架构的情况下验证这一点?
答案 0 :(得分:1)
我通过在Java对象中允许元素的多个实例来解决这个问题:
@XmlElement(name = "element1", required = true)
private List<element1> element1;
这将允许我在afterUnmarshal
方法中检查列表的大小,如果列表的大小大于1,我可以抛出一个新的ValidationException
。
答案 1 :(得分:0)
调用您的应用程序的应用程序因为在Java层上执行此操作有点困难,但您可以在Web服务层轻松执行此操作,您可以在其中将minOccurance定义为将要投放的1个广告。
但是如果你想在Java层上这样做,你需要使用XML解析器,然后计算特定标签的Occurance,但这需要花费很多时间。