【问题标题】:Default boolean value is not getting set in JAXB generated class在 JAXB 生成的类中未设置默认布尔值
【发布时间】:2016-04-20 22:52:05
【问题描述】:

我打算使用 JAXB 从 xsd 生成类并使用 xsd 中的默认值。 但是当我将 xs:boolean 元素的默认值设置为“true”时。该值未设置,我得到空指针异常,因为布尔对象值尚未初始化为 true。

<xs:element name="statsEnabled" type="xs:boolean" minOccurs="0" default="true"/>

我做错了什么?我们可以只为 xs:string 而不为 xs:boolean 设置默认值吗?

生成的xml文件是这样的:

public class Cluster {

@XmlElement(defaultValue = "true")
protected Boolean topoEnabled;
@XmlElement(defaultValue = "true")
protected Boolean statsEnabled;

public Boolean isTopoEnabled() {
    return topoEnabled;
}

    public Boolean isStatsEnabled() {
    return statsEnabled;
}

}

当我尝试调用该函数时:

Cluster cluster = new cluster();

if(cluster.isTopoEnabled)
  .....

if(cluster.isStatEnabled)
  ....

我收到空指针错误。虽然在我的代码中我已经处理了这个空值。

我只是想知道为什么默认值不起作用。我做错了什么,我该怎么办? 要么 是否默认值仅适用于 xs:string 元素而不适用于其他元素?

【问题讨论】:

标签: java xsd jaxb boolean default


【解决方案1】:

我刚刚在使用 JDK 1.7.0_79 时遇到了同样的问题。值得一提的是,当布尔字段是属性而不是元素时,JAXB 生成的 POJO 似乎正在返回默认值。因此,如果您的架构具有灵活性,您可能希望将元素转换为属性(无论如何,这对于布尔字段来说更有意义)

【讨论】:

  • 也许这更适合作为对该问题的评论。你的回答不是很有说服力。您可以进一步检查问题并更新您的答案。
【解决方案2】:

一种选择是在解组完成后设置值。

这涉及将以下方法添加到您的对象并在其中设置默认值:

void afterUnmarshal(Unmarshaller u, Object parent) {
    this.isStatsEnabled = true;
}

查看相关文档here

【讨论】:

    猜你喜欢
    • 2014-09-11
    • 2020-05-21
    • 2011-12-13
    • 2012-01-16
    • 2013-03-06
    • 2019-11-09
    • 2015-03-28
    • 1970-01-01
    • 2016-01-17
    相关资源
    最近更新 更多