JAXB如何嵌套多个对象?

JAXB how to nest several objects?

我一直在尝试搜索如何执行此操作,但我还没有找到符合我确切要求的答案:

假设我们有这个 3 类:

public class Main {
    public ArrayList<MyFirstClass> myFirstClass;
}

class MyFirstClass {
    public int num;
    public MySecondClass mySecondClass;
}

class MySecondClass {
    public String otherStr;
    public MyThirdClass myThirdClass;
}

class MyThirdClass {
    public int otherNum;
}

我希望能够使用解组器阅读这些 XML:

<Main>
    <MyFirstClasses>
        <MyFirstClass>
            <num>1</num>
            <MySecondClass>
                <str>Hello</str>
                <MyThirdClass>
                    <otherNum>2</otherNum>
                </MyThirdClass>
            </MySecondClass>
        </MyFirstClass>
    <MyFirstClasses>
</Main>

我基本上能够设置作为对象的变量 (MySecond/Third Class)。

我知道我可以使用 @XMLRootElement 然后 @XmlElementWrapper(name="aName")@XmlElement(name="aName") 来完成

<Main>
    <MyFirstClasses>
        <MyFirstClass>
            <num>1</num>
        </MyFirstClass>
    <MyFirstClasses>
</Main>

但是我怎样才能将 MySecondClass 嵌套在 MyFirstClass 中,这样我就可以设置它的值,否则 FirstClassObject 将有一个 MySecondClass 具有空值。

提前致谢!

问题是您的 xml 与您的 POJO 不匹配。您可以使用注释来解决这个问题(重命名字段也可以)。试试这个:

@XmlRootElement(name = "Main")
public class Main {
    @XmlElementWrapper(name = "MyFirstClasses")
    @XmlElement(name = "MyFirstClass")
    private List<MyFirstClass> myFirstClass;
}

然后头等舱:

@XmlAccessorType(XmlAccessType.FIELD)
public class MyFirstClass {
    private int num;
    @XmlElement(name = "MySecondClass")
    private MySecondClass mySecondClass;
}

和 MySecondClass:

@XmlAccessorType(XmlAccessType.FIELD)
public class MySecondClass {
    private String str;

    @XmlElement(name = "MyThirdClass")
    private MyThirdClass myThirdClass;
}

最后是 MyThirdClass:

@XmlAccessorType(XmlAccessType.FIELD)
public class MyThirdClass {
    public int otherNum;
}