JAXB如何嵌套几个对象?

问题描述 投票:0回答:1

我一直试图搜索如何做到这一点,但我没有找到我的确切要求的答案:

假设我们有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;
}

我希望能够使用unmarshaller读取这些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。

提前致谢!

java xml jaxb unmarshalling
1个回答
2
投票

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

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

然后是FirstClass:

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

Pineally myrtidasilus:

@XmlAccessorType(XmlAccessType.FIELD)
public class MyThirdClass {
    public int otherNum;
}
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.