gpt4 book ai didi

xml - 在派生类中编码 XMLAttribute

转载 作者:数据小太阳 更新时间:2023-10-29 02:12:35 26 4
gpt4 key购买 nike

我想在派生类中编码 XMLAttribute,但我遇到了一些问题。

我有 2 个派生类和 1 个父类(super class),如下所示:

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) {}
}

假设我有一个列表,其中填充了一些数据。我想像这样从我的类中生成 XML:

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

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

最佳答案

JAXBContext 知道子类

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

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

}

继承指标

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

如果您真的不想使用 xsi:type 属性,您可以利用 XmlAdaptertype 属性用作继承指标。

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

关于xml - 在派生类中编码 XMLAttribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13008531/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com