微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – JAXB,解组时如何验证nillable和必填字段

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

我有一个Customer类,有2个字段名称和城市,映射是使用注释完成的,并且两个字段都标记为必需而不是nillable.

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

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

<customer>
    <city>UNKNowN</city>
</customer>

我将收到一个Customer实例,其中两个字段都设置为null.

不应该有验证异常,或者我在映射中遗漏了什么?

为了解组我使用:

JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
Customer customer = (Customer) unmarshaller.unmarshal(in);

解决方法:

您需要使用架构进行验证. JAXB无法自行进行验证.

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。