2012-06-30 105 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