在下面的示例代码中,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(使用前将#替换为@)