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

Java 未在JAXB生成的类中设置默认布尔值,java,xsd,jaxb,boolean,default,Java,Xsd,Jaxb,Boolean,Default,我打算使用JAXB从xsd生成类,并使用xsd中的默认值。 但当我将xs:boolean元素的默认值设置为“true”时。该值未设置,我得到空指针异常,因为布尔对象值尚未初始化为true <xs:element name="statsEnabled" type="xs:boolean" minOccurs="0" default="true"/> 当我尝试调用函数时: Cluster cluster = new cluster(); if(cluster.isTopoEnable

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

<xs:element name="statsEnabled" type="xs:boolean" minOccurs="0" default="true"/>
当我尝试调用函数时:

Cluster cluster = new cluster();

if(cluster.isTopoEnabled)
  .....

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

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

一个选项是在解组完成后设置该值

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

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

请参阅相关文档

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

您能给出一个发生这种情况的XML示例吗?您一定认为您得到的是
布尔
而不是
布尔
,因此,当发现缺少的元素时,将引发
null
。。。什么是真正的bug。顺便问一下,你接受过答案吗?重复@wero谢谢你让我知道你接受了答案。我以前不知道。也许这更适合作为对这个问题的评论。你的回答不太令人信服。你可以进一步检查这个问题并更新你的答案。
if(cluster.isStatEnabled)
  ....
void afterUnmarshal(Unmarshaller u, Object parent) {
    this.isStatsEnabled = true;
}