【问题标题】:using one POJO class for different xml responses对不同的 xml 响应使用一个 POJO 类
【发布时间】:2016-05-16 13:37:29
【问题描述】:

当我调用 rest 服务时,我得到不同的 xml 响应,具有不同的 xml 根元素。我想知道,有没有机会将这些 xml 解组为一个 pojo 类。

例如,我有一个类 RecordingCreated。

@XmlRootElement(name = "recordingCreated")
public class RecordingCreated {

    private String nodeID;
    private String cameraID;
    private String recPath;
    private String recordingStatus;


    public String getNodeID() {
        return nodeID;
    }

    @XmlElement
    public void setNodeID(String nodeID) {
        this.nodeID = nodeID;
    }

    public String getCameraID() {
        return cameraID;
    }

    @XmlElement
    public void setCameraID(String cameraID) {
        this.cameraID = cameraID;
    }

    public String getRecPath() {
        return recPath;
    }

    @XmlElement
    public void setRecPath(String recPath) {
        this.recPath = recPath;
    }

    public String getRecordingStatus() {
        return recordingStatus;
    }

    @XmlElement
    public void setRecordingStatus(String recordingStatus) {
        this.recordingStatus = recordingStatus;
    }
}

调用rest服务后,我可以得到xml格式的响应

<recordingCreated>
    <nodeID>"111</nodeID>
    <cameraID>222</cameraID>\
    <recordingID>333</recordingID>\
    <recPath>rec</recPath>
    <recordingStatus>recorded</recordingStatus>
</recordingCreated>

并以

的形式
<error>
    <code>444</code>
    <description>broker: access denied</description>
</error>

当我得到第一个 xml 响应时,JAXB 解组很好

JAXBContext jaxbContext = JAXBContext.newInstance(RecordingCreated.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
RecordingCreated recordingCreated = (RecordingCreated) jaxbUnmarshaller.unmarshal(inputStream);

但是当我得到第二个响应时,当然,我得到了一个错误,就像这样

javax.xml.bind.UnmarshalException: 意外元素 (uri:"", 本地:“错误”)。预期元素是 ]]

问题:有没有机会让一个类解组具有不同根元素的两个不同的 xml 响应?

【问题讨论】:

  • 你为什么要这么做?
  • 1.我不想为不同的响应创建类似的类。 2. 我不知道我得到什么回应。因此,如果我得到第二个响应并尝试解组,则会出现错误。

标签: java xml serialization jaxb


【解决方案1】:

尝试为您的两个不同响应及其对应的根创建两个不同的子类。 您可以将当前类发布为它们的父类,并根据您获得的响应,调用所需的类。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2016-02-17
  • 2018-04-17
  • 1970-01-01
  • 2023-04-08
  • 2012-06-28
  • 1970-01-01
  • 2013-06-01
  • 2018-08-05
相关资源
最近更新 更多