2012-06-30 131 views
1

如何使用JAXB中的XSD驗證枚舉值?我想拋出一個錯誤,如果設置了錯誤的值但缺失值是好的(minOccurs = "0")。JAXB枚舉驗證

回答

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); 
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

OK,但JAXB設置枚舉值設置爲null壞的價值觀,所以我看不到取消設置值和壞值之間的差異。 – nerd

+0

@nerd我看到我沒有得到你問題的要點。關於如何在解組文檔之前執行XML驗證,這與枚舉本身沒有多大關係。我建議合併我們的答案或刪除我的答案,並更改問題標題以使解決方案更容易找到其他人。 – toniedzwiedz