JAXB从父类重写@XmlAttribute名称

时间:2014-03-23 15:58:25

标签: java xml jaxb override

我有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属性,我该怎么做?

0 个答案:

没有答案