JAXB - java类的正确注释

时间:2014-06-09 19:03:15

标签: java xml jaxb

我有一个xml文档,例如:

<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和amp;的结果列表SecondJavaClass具有所有空值。我认为“Row”元素正在绊倒我,但我不确定如何正确地注释。 请协助。感谢。

1 个答案:

答案 0 :(得分:1)

您应该注释如下:

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

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

注释意味着:

  • @XmlElementWrapper对应于您希望嵌套收藏数据的元素。
  • FirstJavaClass的每个实例都将对应于嵌套在Row元素中的FirstClass元素。

调试技巧

如果您的JAXB对象模型没有解组正确,请尝试:

  1. 填充它并将其编组为XML。
  2. 然后将此XML与您要解组的内容进行比较,以了解其差异。
  3. 调整注释,直到编组的XML与您要解组的内容相匹配
  4. 解组XML。
相关问题