JAXB,在解组时如何验证可空字段和必填字段

zib*_*ibi 4 java xml jaxb

我对JAXB有一个小问题,但是不幸的是我找不到答案。

我有一个Customer类,其中有两个字段namecity,映射是使用注释完成的,并且两个字段都标记为必填字段,并且不可为空。

@XmlRootElement(name = "customer")
public class Customer {

    enum City {
        PARIS, LONDON, WARSAW
    }

    @XmlElement(name = "name", required = true, nillable = false)
    public String name;
    @XmlElement(name = "city", required = true, nillable = false)
    public City city;

    @Override
    public String toString(){
        return String.format("Name %s, city %s", name, city);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我提交这样的XML文件时:

<customer>
    <city>UNKNOWN</city>
</customer>
Run Code Online (Sandbox Code Playgroud)

我将收到两个字段都设置为null的Customer实例。

是否应该没有验证例外,或者我在映射中缺少某些内容?

为了解组,我使用:

JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
Customer customer = (Customer) unmarshaller.unmarshal(in);
Run Code Online (Sandbox Code Playgroud)

dka*_*ubh 5

您需要使用架构进行验证。JAXB不能单独进行验证。

SchemaFactory sf = SchemaFactory.newInstance(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(ClassUtils.getDefaultClassLoader().getResource(schemaPath));
unmarshaller.setSchema(schema);
Run Code Online (Sandbox Code Playgroud)