加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

派生类中的Marshal XMLAttribute

发布时间:2020-12-16 22:44:41 所属栏目:百科 来源:网络整理
导读:我想在派生类中编组 XMLAttribute,但是我有一些问题. 我有2个派生类和1个超类,如下所示: public class Dog extends Animal { @XmlAttribute(name = "type") private String type; @XmlElement private String name;}public class Cat extends Animal { @Xml
我想在派生类中编组 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) {}
}

假设我有一个填充了一些数据的List.
我想从我的类生成XML,如下所示:

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

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

解决方法

使JAXBContext意识到子类

JAXB (JSR-222)实现不会自动识别映射的类子类.您需要将它们包含在用于引导JAXBContext的类数组中,或者在其中一个映射类上使用@XmlSeeAlso注释.

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

}

继承指标

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

> http://blog.bdoughan.com/2010/11/jaxb-and-inheritance-using-xsitype.html

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

> http://blog.bdoughan.com/2012/01/jaxb-and-inhertiance-using-xmladapter.html

EclipseLink JAXB (MOXy)还提供了一个扩展(@ XmlDescrinatorNode / @ XmlDescrimatorValue),使这个用例更容易(我是MOXy领导者).

> http://blog.bdoughan.com/2010/11/jaxb-and-inheritance-moxy-extension.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读