JAXB:根据元素的属性值解组到不同的类

Jac*_*man 5 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>
Run Code Online (Sandbox Code Playgroud)

案例#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>
Run Code Online (Sandbox Code Playgroud)

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

提前感谢一堆人的任何帮助。

bdo*_*han 4

注意:我是EclipseLink JAXB (MOXy) 的负责人,也是JAXB 2 (JSR-222)专家组的成员。

您可以使用 MOXy 的@XmlDescriminatorNode/ @XmlDescriminatorValueJAXB 扩展。

根据

@XmlDiscriminatorNode("@name")
public abstract class Base {
}
Run Code Online (Sandbox Code Playgroud)

@XmlDiscriminatorValue("person")
public class Person extends Base {
}
Run Code Online (Sandbox Code Playgroud)

车辆

@XmlDiscriminatorValue("vehicle")
public class Vehicle extends Base {
}     
Run Code Online (Sandbox Code Playgroud)

了解更多信息

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