规定在 JAXB 中只允许一个元素的一个实例?
Stipulate that only one instance of an element is allowed in JAXB?
我正在将一些 XML 传递给 RESTful 网络服务:
<root>
<element1/>
<element2/>
<element3/>
</root>
Web 服务将解组此 XML,我想确保 XML 有效。
我使用了一个模式来创建 Java 对象,在这个模式中 element1
有一个 maxOccurs=1
属性,但这对 Java 对象没有影响被创建(不像,例如,添加 minOccurs=1
这将导致 "required=true"
被添加到 @XMLElement
注释)。在解组传递给 Web 服务的 XML 时,如果一个应该只出现一次的元素出现多次,则将解析该元素的最后一个实例。我不希望这种情况发生,因为我希望能够提醒客户他们发送的 XML 无效并且他们应该删除任何不适用的元素 - 而不仅仅是任意接受最后一个元素。我相信这将涉及在解组之前进行一些预验证 - 我可以使用 beforeUnmarshal 方法。
经过一些研究后,据我了解,没有 JAXB 注释允许我指定 element1
只能存在一次。是这样吗?是否可以在没有模式的情况下验证这一点?
哪个应用程序调用您的应用程序,因为在 Java 层上执行此操作有点困难,但您可以在 Web 服务层轻松执行此操作,您可以在其中将 minOccurance 定义为将投放的 1 个广告。
但是如果你想在 Java 层上这样做,你需要使用 XML 解析器,然后计算特定标签的出现次数,但这会花费很多时间。
我通过允许 Java 对象中的元素的多个实例解决了这个问题:
@XmlElement(name = "element1", required = true)
private List<element1> element1;
这将允许我在 afterUnmarshal
方法中检查列表的大小,如果列表的大小大于 1,我可以抛出一个新的 ValidationException
。
我正在将一些 XML 传递给 RESTful 网络服务:
<root>
<element1/>
<element2/>
<element3/>
</root>
Web 服务将解组此 XML,我想确保 XML 有效。
我使用了一个模式来创建 Java 对象,在这个模式中 element1
有一个 maxOccurs=1
属性,但这对 Java 对象没有影响被创建(不像,例如,添加 minOccurs=1
这将导致 "required=true"
被添加到 @XMLElement
注释)。在解组传递给 Web 服务的 XML 时,如果一个应该只出现一次的元素出现多次,则将解析该元素的最后一个实例。我不希望这种情况发生,因为我希望能够提醒客户他们发送的 XML 无效并且他们应该删除任何不适用的元素 - 而不仅仅是任意接受最后一个元素。我相信这将涉及在解组之前进行一些预验证 - 我可以使用 beforeUnmarshal 方法。
经过一些研究后,据我了解,没有 JAXB 注释允许我指定 element1
只能存在一次。是这样吗?是否可以在没有模式的情况下验证这一点?
哪个应用程序调用您的应用程序,因为在 Java 层上执行此操作有点困难,但您可以在 Web 服务层轻松执行此操作,您可以在其中将 minOccurance 定义为将投放的 1 个广告。
但是如果你想在 Java 层上这样做,你需要使用 XML 解析器,然后计算特定标签的出现次数,但这会花费很多时间。
我通过允许 Java 对象中的元素的多个实例解决了这个问题:
@XmlElement(name = "element1", required = true)
private List<element1> element1;
这将允许我在 afterUnmarshal
方法中检查列表的大小,如果列表的大小大于 1,我可以抛出一个新的 ValidationException
。