Xml JAXB枚举验证

Xml JAXB枚举验证,xml,validation,enums,xsd,jaxb,Xml,Validation,Enums,Xsd,Jaxb,如何在JAXB中使用XSD验证枚举值?如果设置了错误的值,但缺少的值是正确的(minOccurs=“0”),我想抛出一个错误。可以使用XML模式中的类型限制和枚举来完成。有关详细信息,请参阅此链接 请看一个表示性别的示例类型 <xsd:simpleType name="gender"> <xsd:restriction base="xs:string"> <xsd:enumeration value="M"/> <xsd:enumeratio

如何在JAXB中使用XSD验证枚举值?如果设置了错误的值,但缺少的值是正确的(
minOccurs=“0”
),我想抛出一个错误。

可以使用XML模式中的类型限制和枚举来完成。有关详细信息,请参阅此链接

请看一个表示性别的示例类型

<xsd:simpleType name="gender">
  <xsd:restriction base="xs:string">
  <xsd:enumeration value="M"/>
  <xsd:enumeration value="F"/>
</xsd:restriction>

并相应地验证您的输入。如果对此类类型的元素使用
minOccurs=“0”
,您应该可以得到所需的内容。

可以使用XML模式中的类型限制和枚举来完成。有关详细信息,请参阅此链接

请看一个表示性别的示例类型

<xsd:simpleType name="gender">
  <xsd:restriction base="xs:string">
  <xsd:enumeration value="M"/>
  <xsd:enumeration value="F"/>
</xsd:restriction>
并相应地验证您的输入。如果对这样类型的元素使用
minOccurs=“0”
,应该可以得到所需的结果。

解决方案:

    SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
    Schema schema = sf.newSchema(this.getClass().getClassLoader().getResource("XSD FILE UNDER WEB-INF/classes"));
    unmarshaller.setSchema(schema);
解决方案:

    SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
    Schema schema = sf.newSchema(this.getClass().getClassLoader().getResource("XSD FILE UNDER WEB-INF/classes"));
    unmarshaller.setSchema(schema);

好的,但是JAXB为坏值将枚举值设置为null,所以我看不出未设置值和坏值之间的区别。@nerd,我看我没能理解你问题的要点。与其说是枚举本身,不如说是在解组文档之前如何执行XML验证。我建议合并我们的答案或删除我的答案,并更改问题标题,以使其他人更容易找到解决方案。好的,但JAXB将枚举值设置为空表示错误值,因此我看不出未设置值和错误值之间的区别。@nerd,我看我没能理解你问题的要点。与其说是枚举本身,不如说是在解组文档之前如何执行XML验证。我建议合并我们的答案或删除我的答案,并更改问题标题,以使其他人更容易找到解决方案。