2016-05-16 4 views
0

私はrestサービスをコールすると、異なるxmlルート要素を持つ異なるxml応答を取得します。私は、これらのXMLを一つのpojoクラスに非整列化する機会があることを知りたいと思います。xmlレスポンスごとに1つの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サービスを呼び出した後、私は

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

の形でそして、私は最初のXML resposneを得た

<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); 

予想外の要素(URI: ""、 ローカル: "エラー")私は2番目の応答を得たときしかし、もちろん、私はこの

javax.xml.bind.UnmarshalExceptionのように、エラーが発生しました。予想される要素は<ある{} recordingCreated>]]

質問:は別のルート要素を持つ一つのクラスアンマーシャリング2つのさまざまなXML応答を有する任意の機会はありますか?

+0

なぜそれをしたいですか? – chrylis

+0

1.私は、異なる応答のために同様のクラスを作成したくありません。 2.私はどのような反応を得るのか分かりません。だから私は2番目の応答を取得し、私はunmarshalしようとするとエラーが発生している。 – Vladimir

答えて

0

2つの異なる応答の2つの異なるサブクラスを、対応するルーツで作成してみてください。 あなたは現在のクラスを両者の親としてポスティングしておくことができます。また、取得するレスポンスに応じて、必要なクラスを呼び出します。

+0

コードの例を挙げることができますか、私はあなたが正しくないと思います。 – Vladimir

+0

私はこのようなことを提案していました http://stackoverflow.com/questions/33098330/jaxb-marshal-unmarshal-different-xml-elements-to-one-class/33148115 –

関連する問題