JAXB枚举验证

时间:2012-06-30 07:13:27

标签: xml validation enums xsd jaxb

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

2 个答案:

答案 0 :(得分:1)

可以使用XML Schema中的类型限制和枚举来完成。请参阅some documentation

的此链接

查看代表性别的示例类型。

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

JAXB会生成这样的枚举:

@XmlType(name = "gender")
@XmlEnum
public enum Gender {

  M,
  F;

  public String value() {
    return name();
  }

  public static Gender fromValue(String v) {
    return valueOf(v);
  }

}

并相应地验证您的输入。如果你对这种类型的元素使用minOccurs="0",你应该得到你想要的东西。

答案 1 :(得分: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);