私はJavaでXMLを扱うのが初めてですが、私が使用するサービスの1つが結果として返されます。今までは、@XmlRootElement
のようなアノテーションを使用して、POJOにXMLをマッピングすることに取り組んできました。しかし、今、私は絶対にこの文書で行うには考えていますJAXBコレクションマッピング
@XmlRootElement(name="response")
public class Response {
private Status status;
private String result;
public Status getStatus() {
return status;
}
@XmlElement(name = "status")
public void setStatus(Status status) {
this.status = status;
}
public String getResult() {
return result;
}
@XmlElement(name ="result")
public void setResult(String result) {
this.result = result;
}
}
@XmlRootElement(name = "status")
public class Status {
private String ID;
private String code;
private String error;
public String getID() {
return ID;
}
@XmlElement(name = "ID")
public void setID(String ID) {
this.ID = ID;
}
public String getCode() {
return code;
}
@XmlElement(name = "code")
public void setCode(String code) {
this.code = code;
}
public String getError() {
return error;
}
@XmlElement(name = "error")
public void setError(String error) {
this.error = error;
}
}
しかし、今I:今まで
<?xml version="1.0" encoding="windows-1251"?>
<response>
<status>
<code>0</code>
</status>
<result>
<limit>2</limit>
...
<data>
<row0>
<ID>85427</ID>
<name>Default</name>
<siteID>40628</siteID>
... some elements
</row0>
</data>
</result>
</response>
は、私はPOJOに(「データ」ノードを除く)XMLをバインドするためにこれらのクラスを使用しません要素を要素の集合としてバインドする必要があります。私は例を探し、コレクションのアイテムのルート要素を定義するために特定のタグを使用していましたが、このドキュメントではルートタグは<row0>
,<row1>
などとなります。
私は正しく理解すればJAXBアノテーションを使用してXMLからPOJOバインドルールを定義します。だから、このやり方でこのやりかたを解決することができますか、またはこの文書をDOMスタイルで操作する必要がありますか?あなたの<row0>,<row1>
などを表し
あなたの行を作成したクラスは...、あなたが正常にそれを行うだろうようにJAXBでそれをマップ:
私はあなたがお勧めするものでしたが、私のアダプタのマーシャル&アンマーシャリング方法の避難所呼び出されました。 私はマーシャル&アンマーシャルロジックを実装していないだけで、戻り値nullを書き込んだり、ブレークポイントを配置して呼び出されたことを確認したりします。 何か不足していますか? –
申し訳ありませんが、私はJAXBのバグを認識していませんでした。私の答えを修正し、私の先例の答えがうまくいかなかった理由を最後に追加しました。 –
[回答](http://pastebin.com/qVhMG4QB)、[データ](http://pastebin.com/ZmFGWeV6)、[アダプター]の順にアドバイスしてクラスを編集しました。 http://pastebin.com/0SzSf3wf)。データ=ヌル。私は私のアダプターでRow&Elementの汎用タイプを切り替えようとしましたが、結果はありませんでした。たぶんアダプターがまっすぐになっていませんか? Btw、私のテストでは、このコードで呼び出します:JAXB.unmarshal(new StringReader(xml)、Response.class)。それは失敗の理由でしょうか? –