Java 使用相同名称的多个元素解组XML JAXB

Java 使用相同名称的多个元素解组XML JAXB,java,xml,parsing,soap,jaxb,Java,Xml,Parsing,Soap,Jaxb,我正在尝试解组一个包含多个同名元素的XML文档。我不确定是否需要创建bean的Arraylist并将其传递给解组器。我希望有人能给我一些建议来解决这个问题。我试图解析的XML是一个SOAP响应,但我去掉了信封,所以只有它的主体,它看起来像这样: <return> <row> <fkdevice>bddc228e-4774-18b3-9c64-e218cbef7a8x</fkdevice> </row>

我正在尝试解组一个包含多个同名元素的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>
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;
   }
}
@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;
   }
}

bddc228e-4774-18b3-9c64-e218cbef7a8x
74a5a260-bbd9-0491-7c58-0b1983180d2c
312b5326-d7f1-4fb6-b1d9-dd96bb016152
ed110481-e1e1-4659-ae09-1d23d888292b
这是从一个包含50多个字段的表中返回的,但我创建了一个testBean,并定义了fkdevice,只是为了简化它。我的bean如下所示:

<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>
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;
   }
}
@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;
   }
}
packagebean;
//进口
@XmlRootElement(name=“return”)
公共类testBean{
//我想我需要一个arraylist,因为我有多个同名的元素。
公共阵列列表设备;
公共ArrayList getFkdevice(){
返回装置;
}
public void setFkdevice(ArrayList fkdevice){
this.fkdevice=fkdevice;
}
}
这给了我一个错误:IllegalAnnotationExceptions类的计数有两个同名的属性“fkdevice”,它指向getter和setter

任何信息都有帮助,
提前谢谢

可能是这样的:

<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>
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;
   }
}
@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;
   }
}

您的字段和方法都是公共的。默认情况下,JAXB绑定每个公共字段和每个getter/setter对

一种解决方案是使用
@xmlacessortype
指定字段和仅字段绑定到XML

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

    @XmlElement( name="fkdevice" )
    public ArrayList<string> fkdevice;
    ...
}
@XmlRootElement(name=“return”)
@XmlAccessorType(XmlAccessType.FIELD)
公共类testBean{
@XmlElement(name=“fkdevice”)
公共阵列列表设备;
...
}

我通常至少用@XmlElement或@XmlTransient注释每个字段。在上面添加了注释。如果我有一个“名称”或其他类似于fkdevice的字段,该怎么办,但我无法访问它们。因此,如果我打印x.getRow().get(0),在调试时会打印[row:null],我可以看到该行的子设备为firstchild,名称为nextsibling,但我不知道如何访问它们?XML中的
在哪里?与
中的
相同级别?我突然想到,“行”是列表中更好的名称。通过更改您所说的
x.getRows().get(0)
,这是可以理解的。是的,如果我有这样的内容,我如何才能访问其他字段:dskjhdjshdsdsdsdsds向
类添加更多属性、getter和setter。