1
如何使用JAXB中的XSD验证枚举值?我想抛出一个错误,如果设置了错误的值但缺失值是好的(minOccurs = "0"
)。JAXB枚举验证
如何使用JAXB中的XSD验证枚举值?我想抛出一个错误,如果设置了错误的值但缺失值是好的(minOccurs = "0"
)。JAXB枚举验证
解决办法:
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);
它可以使用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"
,你应该得到你想要的。
OK,但JAXB设置枚举值设置为null坏的价值观,所以我看不到取消设置值和坏值之间的差异。 – nerd
@nerd我看到我没有得到你问题的要点。关于如何在解组文档之前执行XML验证,这与枚举本身没有多大关系。我建议合并我们的答案或删除我的答案,并更改问题标题以使解决方案更容易找到其他人。 – toniedzwiedz