JAXB XML 到 Pojo 使用继承如何

问题描述 投票:0回答:0

我从某些端点收到一些 XML。每个响应的基本结构都是相似的(我得到的是 XML,没有 xsd):

  1. 端点名称-地址
<RESPONSE>
<INFO>
  <ret_code>0</ret_code>
  </details>
</INFO>
<CONTENT>
   <name>John</name>
   <addresses>
      <address>
         <city>NewYork</city>
         <street>5th</street>
      </address>
      <address>
          <city>Paris</city>
          <street>Colombe</street>
      </address>
   </addresses>
</CONTENT>
</RESPONSE>
  1. 薪资终点
<RESPONSE>
<INFO>
  <ret_code>1</ret_code>
  <details>no salary data</details>
</INFO>
</RESPONSE>

或有效的数据回复

<RESPONSE>
<INFO>
  <ret_code>0</ret_code>
  </details>
</INFO>
<CONTENT>
   <name>John</name>
   <salary>1000</salary>
</CONTENT>
</RESPONSE>
  1. 常用零件

如您所见, 标签始终存在, 标签始终存在。 并不总是存在,有时内容会根据调用的端点而有所不同。

所以我想(使用 JaxB)将这些映射到一些 POJO,如下所示:

  1. 信息类
@XmlRootElement(name="INFO")
public class INFO {
    @XmlElement
    public String ret_code;
    @XmlElement 
    public String details;
}

也是地址类

@XmlRootElement(name = "address")
public class ADDRESS{
    @XmlElement
    public String city;
    @XmlElement
    public String street;
}
  1. 端点地址
@XmlRootElement(name="RESPONSE")
public class Response extends INFO{

    @XmlElement(name="name")
    public String name;

    @XmlWrapperElement(name="addresses")
    @XmlElement(name="address")
    public List<Address> addresses;
}

2.1.) 没有继承的 EndpointAddress 变化

@XmlRootElement(name="RESPONSE")
public class Response {
 
    @XmlElement(name="INFO")
    public INFO info; 

    @XmlElement(name="name")
    public String name;

    @XmlWrapperElement(name="addresses")
    @XmlElement(name="address")
    public List<Address> addresses;
}
  1. 端点薪水 - 此处有 2 个案例(继承与否)如上所述..不会发布两者以保持简短
@XmlRootElement(name="RESPONSE")
public class Response extends INFO{

    @XmlElement(name="salary")
    public String salary;
}

此时映射返回:

  1. ClassCastException 在使用继承时尝试将 INFO 映射到 Response

  2. Info信息的空值,没有继承时的地址。

任何关于如何实现某些可重用性的帮助都将非常受欢迎。

谢谢!

java inheritance jaxb unmarshalling pojo
© www.soinside.com 2019 - 2024. All rights reserved.