将一个POJO类用于不同的xml响应

时间:2016-05-16 13:37:29

标签: java xml serialization jaxb

当我调用rest服务时,我得到不同的xml响应,具有不同的xml根元素。我想知道,有没有机会将这些xmls解组为一个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 resposne时,JAXB解组好

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

但当我得到第二个回复时,当然,我得到了一个错误,就像这个

  

javax.xml.bind.UnmarshalException:意外元素(uri:“”,   本地: “错误”)。预期的元素是&lt; {} recordingCreated&gt;]]

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

1 个答案:

答案 0 :(得分:0)

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