3

我正在尝试解组具有多个同名元素的 XML 文档。我不确定是否需要为我的 bean 创建一个 Arraylist 并将其传递给 unmarshaller。我希望有人能给我一些指示来解决这个问题。我试图解析的 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;
   }
}

这给了我一个错误:IllegalAnnotationExceptions 类的计数有两个同名的属性“fkdevice”,它指向 getter 和 setter。

任何信息都可能会有所帮助,在此先感谢

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 绑定每个公共字段和每个 getter/setter 对。

一种解决方案是使用@XmlAccessorType指定字段且仅字段绑定到 XML。

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

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