封送处理派生类中的XMLAttribute

封送处理派生类中的XMLAttribute,xml,jaxb,superclass,derived-class,Xml,Jaxb,Superclass,Derived Class,我想在派生类中封送XMLAttribute,但我有一些问题 我有2个派生类和1个超类,如下所示: public class Dog extends Animal { @XmlAttribute(name = "type") private String type; @XmlElement private String name; } public class Cat extends Animal { @XmlAttribute(name = "ty

我想在派生类中封送XMLAttribute,但我有一些问题

我有2个派生类和1个超类,如下所示:

public class Dog extends Animal {

    @XmlAttribute(name = "type")
    private String type;

    @XmlElement
    private String name;
}

public class Cat extends Animal {

    @XmlAttribute(name = "type")
    private String type;

    @XmlElement
    private String name;
}

@XmlSeeAlso({Dog.class, Cat.class})
public class Animal {

}

@XmlRootElement(name="some_element_wrapper")
public SomeElementWrapper() {

    List<Animal> listAnimal;

    @XmlElement(name = "animals")
    public List<Animal> getListAnimal() {}
    public void setListAnimal(List<Animal> listAnimal) {}
}
公共类狗扩展了动物{
@XmlAttribute(name=“type”)
私有字符串类型;
@XmlElement
私有字符串名称;
}
公营猫科动物{
@XmlAttribute(name=“type”)
私有字符串类型;
@XmlElement
私有字符串名称;
}
@XMLSEEALLO({Dog.class,Cat.class})
公营动物{
}
@XmlRootElement(name=“some\u element\u wrapper”)
公共SomeElementWrapper(){
列出动物名单;
@XmlElement(name=“动物”)
公共列表getListAnimal(){}
公共无效setListAnimal(列表listAnimal){}
}
假设我有一个填充了一些数据的列表。 我想从我的类生成XML,如下所示:

<some_element_wrapper>
    <animals>
        <animal type="dog">....</animal>
        <animal type="cat">....</animal>
    </animals>
</some_element_wrapper>

....
....
我的问题是,除了type属性之外,我得到了我想要的东西。我尝试了其他不同的解决方案,在超类中移动属性类型,或者重写派生类型字段,但没有结果。
有什么建议吗?

JAXBContext
了解子类

实现不会自动识别映射的类和子类。您需要将它们包括在用于引导
JAXBContext
的类数组中,或者在其中一个映射的类上使用
@xmlseea
注释

@xmlsealse(Dog.class,Cat.class)
公营动物{
}
继承指标

如果您希望使用type属性来指定所使用的子类型,我建议不要这样做,而是使用
xsi:type
属性,这是继承在XML中的表示方式(使用XML模式)和JAXB中的默认表示方式

如果确实不想使用
xsi:type
属性,可以利用
XmlAdapter
使用
type
属性作为继承指示符

还提供了一个扩展(
@xmlsdescrinatornode
/
@xmlsdescrimatorvalue
),使这个用例更简单(我是MOXy的负责人)


谢谢@Blaise。我是通过EclipseJAXB(MOXy)获得的……它更有用、更实用。我用你的笔记更新了我的问题。