gpt4 book ai didi

java - 如何启用模式验证以便 JAXB 拒绝空元素?

转载 作者:行者123 更新时间:2023-11-29 06:13:17 24 4
gpt4 key购买 nike

我遇到了一个奇怪的 JAXB 解析问题。我正在使用 JAXB RI 2.x。我已经使用“unmarshaller.setSchema(schema)”启用了模式验证。但是,如果 XML 包含空元素,JAXB 不会抛出任何验证错误。所以客户很乐意传递空字符串值!!

这是元素在模式中的声明方式:

(请看下面我的评论)

这是它在 XML 实例中的显示方式:

(请看下面我的评论)

尽管它是必填字段,但它已被 JAXB 成功验证。如何拒绝此类空元素?

谢谢

最佳答案

您需要在 XML 模式中声明一个新的简单类型,它是 xsd:string 的限制,包括 minLength facet。

<xs:element name="ChargeCode" type="stringMinSize1"/>
<xs:simpleType name="stringMinSize1">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>

您还可以使用其他方面,例如 pattern 来进一步控制字符串内容的外观。一个典型的例子是加拿大的邮政编码,它在字母之间交替:

<xs:element name="PostalCode" type="postalCode"/>
<xs:simpleType name="postalCode">
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z]{1}[0-9]{1}[A-Z]{1} [0-9]{1}[A-Z]{1}[0-9]{1}"/>
</xs:restriction>
</xs:simpleType>

下面的问题涉及一种模式,需要包含内容的字符串。

例子见:

关于java - 如何启用模式验证以便 JAXB 拒绝空元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6006103/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com