我遇到了一个wiered JAXB解析问题。我正在使用JAXB RI 2.x.我已使用“unmarshaller.setSchema(schema)”启用了模式验证。但是,如果XML包含空元素,则JAXB不会抛出任何验证错误。所以客户很高兴地传递空字符串值!!
以下是在架构中声明元素的方式:
(请参阅下面的评论)
以下是它在XML实例中的显示方式:
(请参阅下面的评论)
即使它是必填字段,它也会被JAXB成功验证。如何启用拒绝此类空元素?
由于
答案 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参数