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