JAXB:根据元素的属性值对不同类进行解组

时间:2011-10-31 03:14:42

标签: java jaxb2

我想知道是否有任何方法可以解组包含固定元素名称的XML,其属性引用各种类。请考虑以下XML:

案例#1:

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <request-status>valid</request-status>
    <interface name="person">
        <f-name>Joe</f-name>
        <l-name>Blow</l-name>
        <age>25</age>
        <email>joe.blow@email.com</email>
    </interface>
</response>

案例#2:

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <request-status>valid</request-status>
    <interface name="vehicle">
        <make>Ford</make>
        <type>truck</type>
        <year>1989</year>
        <model>F150</model>
    </interface>
</response>

在这两种情况下,包含类都是“响应”,有2个实例变量:requestStatus(String)和interface(某些超类?)。我需要帮助的是如何使用正确的JAXB注释编写包含类“Response”,以便unmarshall将为“interface”变量创建正确的类实例。

提前感谢一大堆帮助。

1 个答案:

答案 0 :(得分:3)

注意:我是EclipseLink JAXB (MOXy)主管,是JAXB 2 (JSR-222)专家组的成员。

您可以使用MOXy的@XmlDescriminatorNode / @XmlDescriminatorValue JAXB扩展程序。

基础

@XmlDiscriminatorNode("@name")
public abstract class Base {
}

<强>人

@XmlDiscriminatorValue("person")
public class Person extends Base {
}

<强>车辆

@XmlDiscriminatorValue("vehicle")
public class Vehicle extends Base {
}     

了解更多信息

以下是使用旧版MOXy API的类似问题的答案: