如何使用属性的 getter 方法上的 @XMLElement 覆盖在类级别指定的 JAXB @XMLAccessorType(XMLAccessType.FIELD)?

2024-01-11

在下面的示例代码中,Employee已使用 JAXB 字段级别访问类型指定了类。对于物业dept,但是,访问类型已在 getter 方法级别指定为@XMLElement注解。

在编组期间组织类,抛出以下异常 -

com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
Class has two properties of the same name "dept"
    this problem is related to the following location:
        at public java.lang.String com.playground.jaxb.Employee.getDept()
    this problem is related to the following location:
        at private java.lang.String com.playground.jaxb.Employee.dept

您能帮我理解为什么 JAXB 访问器类型的重写不起作用吗?任何解决方案也将受到高度赞赏。

Example

根元素类

package com.playground.jaxb;

@XMLRootElement(name="organization")
public class Organization {

    @XmlElementWrapper(name = "employees")
    @XmlElement(name = "employee")
    private Set<Employee> employees;

    public Organization{}

    // Remainder omitted...
}

员工阶层

package com.playground.jaxb;

@XMLAccessorType(XMLAccessType.FIELD)
public class Employee {

    private String name;

    private String dept;

    @XMLElement(name="department")
    public String getDept() {
        return dept;
    }

    public void setDept(String dept) {
        this.dept = dept;
    }

    public Employee {}

    // Remainder omitted...
}

您可以重命名 getter/setter 对,例如getDept() -> getDepartment()

private String dept;

@XmlElement(name="department")
public String getDeptartment() {
    return dept;
}

public void setDeptartment(String dept) {
    this.dept = dept;
}   

但在这种情况下,您将在 XML 中出现重复的内容

   <dept>my_dept</dept>
   <department>my_dept</department>

或者你可以注释字段dept with @XmlTransient http://docs.oracle.com/javaee/5/api/javax/xml/bind/annotation/XmlTransient.html注释,如果您想更改访问类型,请输入它。

@XmlTransient
private String dept;

@XmlElement(name="department")
public String getDept() {
    return dept;
}

public void setDept(String dept) {
    this.dept = dept;
}

在这种情况下,dept字段将被忽略,并且将使用 getter/setter 对

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用属性的 getter 方法上的 @XMLElement 覆盖在类级别指定的 JAXB @XMLAccessorType(XMLAccessType.FIELD)? 的相关文章

随机推荐