在JAXB生成的类中未设置默认布尔值

时间:2016-01-15 10:54:10

标签: java xsd jaxb boolean default

我想使用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元素而不适用于其他元素吗?

2 个答案:

答案 0 :(得分:0)

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

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

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

请参阅相关文档here

答案 1 :(得分:-1)

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