Java 使用空嵌套列表解组自关闭标记

Java 使用空嵌套列表解组自关闭标记,java,xml,jaxb,unmarshalling,Java,Xml,Jaxb,Unmarshalling,我看不到如何正确地注释我的类,从而使自关闭标记导致类创建一个空列表。换句话说,XML中根本没有指定列表 对于我的问题,我将参考以下两个示例类: @XmlRootElement(name="a") public class A { @XmlElement List<B> bs; } @XmlRootElement(name="b") public class B { @XmlValue String v; } @XmlRootElement(name

我看不到如何正确地注释我的类,从而使自关闭标记导致类创建一个空列表。换句话说,XML中根本没有指定列表

对于我的问题,我将参考以下两个示例类:

@XmlRootElement(name="a")
public class A {
    @XmlElement
    List<B> bs;
}

@XmlRootElement(name="b")
public class B {
    @XmlValue
    String v;
}
@XmlRootElement(name=“a”)
公共A类{
@XmlElement
名单b;
}
@XmlRootElement(name=“b”)
公共B级{
@XmlValue
字符串v;
}
此XML解组很好:

<a>
    <b>One</b>
    <b>Two</b>
    <b>Three</b>
</a>

一个
两个
三
第二个XML示例也正确地与预期的空列表解组:

<a>
    <b/>
</a>

但是,第三个示例导致XML根本没有解组

<a/>

我希望看到的第三个示例与第二个示例相同,在第二个示例中,类使用空列表初始化。这是否可能使用JAXB实现,或者我是否试图做一些违背定义行为的事情?

标准方法(JAXB在从XML模式生成代码时也使用)是

@XmlRootElement(name=“a”)
公共A类{
私人名单;
@xmlement(name=“b”)
公共列表getBs(){
如果(bs==null){
bs=新的ArrayList();
}
返回bs;
}
}

没有二传手

一点也不拆封——从什么意义上说?您不会得到异常,是吗?不会抛出任何JAXBEException。当A是一个字段时,该字段被设置为null。这就像广告一样有效。只需确保显式初始化列表,否则在解组时会出现NullPointException。怎么会有NPE?如果有getter,JAXB不会访问私有字段。
@XmlRootElement(name="a")
public class A {
    private List<B> bs;

    @XmlElement(name="b")
    public List<B> getBs(){
        if( bs == null ){
            bs = new ArrayList<>();
        }
        return bs;
    }
}