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