3

同じ名前の要素が複数ある XML ドキュメントを非整列化しようとしています。Bean の Arraylist を作成してアンマーシャラーに渡す必要があるかどうかわかりません。誰かがこれを理解するための指針を教えてくれることを願っています。解析しようとしている XML は SOAP 応答として送信されますが、エンベロープを取り除いたので、本文のみが含まれています。次のようになります。

<return>
    <row>
        <fkdevice>bddc228e-4774-18b3-9c64-e218cbef7a8x</fkdevice>
    </row>
    <row>
        <fkdevice>74a5a260-bbd9-0491-7c58-0b1983180d2c</fkdevice>
    </row>
    <row>
        <fkdevice>312b5326-d7f1-4fb6-b1d9-dd96bb016152</fkdevice>
    </row>
    <row>
        <fkdevice>ed110481-e1e1-4659-ae09-1d23d888292b</fkdevice>
    </row>
</return>

これは、50 を超えるフィールドを持つテーブルから返されますが、testBean を作成し、単純にするためだけに fkdevice を定義しました。Bean は次のようになります。

package beans;
//imports    

@XmlRootElement(name="return")
public class testBean {
   //I think I need an arraylist here because I have multiple elements with teh same name.
   public ArrayList<string> fkdevice;

   public ArrayList<String> getFkdevice(){
       return fkdevice;
   }

   public void setFkdevice(ArrayList<String> fkdevice){
       this.fkdevice = fkdevice;
   }
}

これによりエラーが発生します: 1 カウントの IllegalAnnotationExceptions クラスには、同じ名前の "fkdevice" の 2 つのプロパティがあり、ゲッターとセッターを指しています。

どんな情報でも役立つかもしれません、事前に感謝します

4

2 に答える 2

7

多分このようなもの:

@XmlRootElement(name="return")
public class returnBean {
   private ArrayList<Row> rows;

   public ArrayList<Row> getRows(){
       return rows;
   }

   public void setRows(ArrayList<Row> rows){
       this.rows = rows;
   }
}

フィールドがプライベートになっていることに注意してください。

そして、おそらくここに注釈は必要ありません:

public class Row {
    private String fkdevice;

    public String getFkdevice() {
        return fkdevice;
    }

    public void setFkdevice(String val) {
        fkdevice = val;
    }
}
于 2013-06-14T17:02:48.290 に答える
2

フィールドとメソッドはどちらもパブリックです。デフォルトでは、JAXB はすべての public フィールドとすべての getter/setter ペアをバインドします。

1 つの解決策は、 を使用@XmlAccessorTypeしてフィールドを指定し、フィールドのみを XML にバインドすることです。

@XmlRootElement(name="return")
@XmlAccessorType( XmlAccessType.FIELD )
public class testBean {

    @XmlElement( name="fkdevice" )
    public ArrayList<string> fkdevice;
    ...
}
于 2013-06-14T17:03:18.193 に答える