java - 使用一个 POJO 类来处理不同的 xml 响应

标签 java xml serialization jaxb

当我调用休息服务时,我得到不同的 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: unexpected element (uri:"", local:"error"). Expected elements are <{}recordingCreated>]]

问题:是否有机会让一个类使用不同的根元素解码两个不同的 xml 响应?

最佳答案

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

关于java - 使用一个 POJO 类来处理不同的 xml 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37255287/

相关文章:

c# - 通过在反序列化之前添加预处理步骤,使用 RestSharp 处理 XML 中的无效字符

xml - 合并具有相同属性的元素

asp.net-mvc-3 - MVC 3 下拉列表: Cannot figure out 'System.Web.Mvc.SelectList' cannot be serialized

java - 使用 ReferenceTypeDeserializer 与 Jackson & Spring 反序列化通用类型

java - getParamter() 返回 NULL

java - 关于字符串比较的问题

java - ImageView 上的涟漪效应未触发

java - 如何检查 double 是否为空?

SQL Server XML 添加属性(如果不存在)

java - 使用 serialVersionUID 还是禁止警告?