2014-06-09 60 views
1

我有一个XML文件,如:JAXB - Java类的适当注释

<ParentClass> 
    <FirstClass> 
     <Row> 
      <data1>...<data1> 
      <data2>...<data2> 
     </Row> 
     <Row> 
      <data1>...<data1> 
      <data2>...<data2> 
     </Row> 
    </FirstClass> 
    <SecondClass> 
     <Row> 
      <data1>...<data1> 
      <data2>...<data2> 
     </Row> 
     <Row> 
      <data1>...<data1> 
      <data2>...<data2> 
     </Row> 
    </SecondClass> 
    </ParentClass> 

我有如下的Java类:

@XmlRootElement(name = "ParentClass") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class ParentJavaClass 
{ 
    @XmlElement(name="FirstClass") 
    private List<FirstJavaClass> fc; 
    public List<FirstJavaClass> getFc() 
    { 
     return fc; 
    } 
    public void setFc(List<FirstJavaClass> fc) 
    { 
     this.fc = fc; 
    } 

    @XmlElement(name="SecondClass") 
    private List<SecondJavaClass> sc; 
    public List<SecondJavaClass> getSc() 
    { 
     return sc; 
    } 
    public void setSc(List<SecondJavaClass> sc) 
    { 
     this.sc = sc; 
    } 
} 

    @XmlType(name = "Row", namespace = "Fc") 
    @XmlAccessorType(XmlAccessType.FIELD) 
    public class FirstJavaClass 
    { 
    private String data1; 
    private String data2; 

    // getters & setters 
    } 

    @XmlType(name = "Row", namespace = "Sc") 
    @XmlAccessorType(XmlAccessType.FIELD) 
    public class SecondJavaClass 
    { 
    private String data1; 
    private String data2; 

    // getters & setters 
    } 

但是,当我打电话

final ParentJavaClass x = (ParentJavaClass) jaxbUnmarshaller.unmarshal(file); 

我的FirstJavaClass &的结果列表SecondJavaClass具有全部空值。我认为“行”元素是让我绊倒的东西,但我不确定如何正确注释。 请协助。谢谢。

回答

1

你应该标注如下:

@XmlElementWrapper(name="FirstClass") 
@XmlElement(name="Row") 
private List<FirstJavaClass> fc; 

@XmlElementWrapper(name="SecondClass") 
@XmlElement(name="Row") 
private List<SecondJavaClass> sc; 

标注的意义:

  • @XmlElementWrapper相当于要嵌套您的收藏数据withing的元素。
  • FirstJavaClass的每个实例将对应嵌套在FirstClass元素中的元素。

的调试技巧

当你的JAXB对象模型不正确的解组,尝试:

  1. 填充它,它编组到XML。
  2. 然后将此XML与您试图解组的内容进行比较,以查看差异是什么。
  3. 调整注释,直到编组XML与您正在尝试解组的编号相匹配
  4. 反编组XML。
+1

太棒了!现在有道理。谢谢。 – user3723491