如何启用架构验证以便JAXB拒绝空元素?

时间:2011-05-15 02:22:46

标签: java validation xsd jaxb

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

以下是在架构中声明元素的方式:

(请参阅下面的评论)

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

(请参阅下面的评论)

即使它是必填字段,它也会被JAXB成功验证。如何启用拒绝此类空元素?

由于

2 个答案:

答案 0 :(得分:3)

您需要在XML架构中声明一个新的简单类型,该类型是xsd:string的限制,其中包含minLength构面。

<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>

以下问题涉及要求包含内容的字符串的模式。

有关示例,请参阅:

答案 1 :(得分:0)

你可以使用minOccurs参数