我想使用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元素而不适用于其他元素吗?
答案 0 :(得分:0)
一种选择是在解组完成后设置值。
这涉及向对象添加以下方法并在其中设置默认值:
void afterUnmarshal(Unmarshaller u, Object parent) {
this.isStatsEnabled = true;
}
请参阅相关文档here
答案 1 :(得分:-1)
我刚使用JDK 1.7.0_79遇到了同样的问题。对于它的价值,当布尔字段是属性而不是元素时,JAXB生成的POJO似乎返回默认值。因此,如果您的架构具有灵活性,您可能希望将您的元素转换为属性(无论如何,对于布尔字段来说更有意义)