【问题标题】:How to ignore elements/attributes in XML when mapping to objects using JAXB?使用 JAXB 映射到对象时如何忽略 XML 中的元素/属性?
【发布时间】:2015-03-07 11:27:22
【问题描述】:

我正在使用 JAXB 2.0 将 XML 字符串映射到 POJO,反之亦然,我希望能够确定 XML 中应该映射到带注释的 POJO 类中的元素。

假设我有以下 XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer id="1">
    <firstName>Peter</firstName>
    <lastName>Parker</lastName>
    <socialSecurityNumber>112233445566</socialSecurityNumber>
</customer>

我想将它映射到一个省略 socialSecurityNumber 元素的类:

@XmlRootElement
public class Customer {
    private Integer id;
    private String firstName;
    private String lastName;

    public Customer() {
    }

    public Customer(Integer id, String firstName, String lastName) {
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
    }

    @XmlAttribute
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    @XmlElement(nillable = true)
    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    @XmlElement(nillable = true)
    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}

如果我尝试对此进行解组,则会收到错误消息:

意外元素(uri:“”,本地:“socialSecurityNumber”)。预期元素是

是否可以忽略我的 POJO 类中不存在的 XML 中的元素/属性?

【问题讨论】:

    标签: java xml jaxb


    【解决方案1】:

    默认情况下,JAXB 不应该抱怨额外的元素。但是,您可以在 unmarshall 上指定 ValidationEventHandler 的实例以获得您正在寻找的行为。

    【讨论】:

    • 我有一个 ValidationEventHandler 但如何设置它以使 JAXB 在解析此 xml 时不会崩溃?
    • @UrielArvizu - JAXB 只会在您为事件处理程序返回 false 的事件中出错。
    • 所以如果错误与此问题有关,我应该返回 true 吗?这样我就可以正确完成映射?
    • 我正在检查,ValidationEventHandlerhandleEvent 方法返回 true 解决了我的问题,但是如果我想处理其他错误,我是否必须添加一个 if检查抛出的错误是否是由于意外元素的语句?
    • 你还提到by default JAXB 不应该抱怨,但我收到这个错误意味着我没有使用它的默认配置?
    猜你喜欢
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多