我有JAXB注释类来映射XML。 在XML中有两个元素,它们具有相同的属性,但是一个元素具有略微不同的属性名称。元素甚至具有相同的标记名称。
1: <element name="" attr2="" ... />
2: <element slightlyDifferentName="" attr2="" ... />
属性的内容相同,它们应映射到同一Java类。所以我先做了一个A类:
@XmlAccessorType(XmlAccessType.NONE)
@XmlType(name = "A")
@XmlSeeAlso({B.class})
public class A {
private String name;
@XmlAttribute(name = "name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
B级使用多种不同方法扩展A,如下所示:
@XmlAccessorType(XmlAccessType.NONE)
@XmlType(name = "B")
public class B extends A {
@XmlAttribute(name = "slightlyDifferentName")
public String getName() {
return super.getName();
}
public void setName(String name) {
super.setName(name);
}
}
我还尝试使用不同的名称创建其他方法,并将重写的方法更改为XmlTransient,使字段受到保护,并将其组合起来。 当我创建XML时,两个属性都设置为相同的值:
<element name="FOO" slightlyDifferentName="FOO" attr2="" ... />
或没有设置:
<element attr2="" ... />
唯一可行的方法是在B类中使用不同名称的getter / setter创建第二个字段,但我真的不希望这样。 它是相同的数据结构,只是在某些XML中属性名称不同(没有明显的原因),因此值应始终存储在同一个字段中。
我只想覆盖子类中@XmlAttribute的name属性,我该怎么做?