【问题标题】:Unmarshalling Self Closed Tag with Empty Nested List使用空嵌套列表解组自封闭标签
【发布时间】:2014-12-13 01:57:02
【问题描述】:

我无法正确注释我的类,这样自封闭标签会导致类创建一个空列表。换句话说,该列表根本没有在 XML 中指定。

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

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

@XmlRootElement(name="b")
public class B {
    @XmlValue
    String v;
}

这个 XML 可以很好地解组:

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

第二个 XML 示例也使用预期的空列表正确解组:

<a>
    <b/>
</a>

但是,第三个示例导致 XML 根本不解组。

<a/>

我希望在解组第三个示例时看到的行为与第二个示例中的类使用空列表初始化的行为相同。这可能使用 JAXB,还是我试图做一些与定义的行为背道而驰的事情?

【问题讨论】:

  • 根本不解组 - 在什么意义上?你不会有例外吧?
  • 不抛出 JAXBException。当 A 是一个字段时,该字段被设置为 null。

标签: java xml jaxb unmarshalling


【解决方案1】:

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

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

bs 没有二传手!

【讨论】:

  • 这就像宣传的那样。只需确保显式初始化列表,否则您将在解组时收到 NullPointException。
  • 怎么会有NPE?如果有 getter,JAXB 不会访问私有字段。
猜你喜欢
  • 1970-01-01
  • 2018-03-13
  • 1970-01-01
  • 1970-01-01
  • 2017-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-23
相关资源
最近更新 更多