我正在尝试解组具有多个具有相同名称的元素的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;
}
}
这给了我一个错误:1个IllegalAnnotationExceptions类的计数有两个同名“fkdevice”的属性,它指向getter和setter。
任何信息都可能有帮助, 提前致谢
答案 0 :(得分: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;
}
}
答案 1 :(得分:2)
您的字段和方法都是公开的。默认情况下,JAXB绑定每个公共字段和每个getter / setter对。
一种解决方案是使用@XmlAccessorType
指定字段,并且仅将字段绑定到XML。
@XmlRootElement(name="return")
@XmlAccessorType( XmlAccessType.FIELD )
public class testBean {
@XmlElement( name="fkdevice" )
public ArrayList<string> fkdevice;
...
}