在 JAXB 生成的类中未设置默认布尔值
Posted
技术标签:
【中文标题】在 JAXB 生成的类中未设置默认布尔值【英文标题】:Default boolean value is not getting set in JAXB generated class 【发布时间】: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 元素而不适用于其他元素?
【问题讨论】:
你能展示一个发生这种情况的示例 XML 你一定认为你得到了Boolean
而不是boolean
,所以当找到一个缺失的元素时会引发null
......这实际上是一个错误。 Find here a workaround
顺便说一句:你接受过答案吗 (meta.stackexchange.com/questions/5234/…)
重复***.com/questions/5423414/…
@wero 感谢您让我知道接受答案。我以前不知道。
【参考方案1】:
我刚刚在使用 JDK 1.7.0_79 时遇到了同样的问题。值得一提的是,当布尔字段是属性而不是元素时,JAXB 生成的 POJO 似乎正在返回默认值。因此,如果您的架构具有灵活性,您可能希望将元素转换为属性(无论如何,这对于布尔字段来说更有意义)
【讨论】:
也许这更适合作为对该问题的评论。你的回答不是很有说服力。您可以进一步检查问题并更新您的答案。【参考方案2】:一种选择是在解组完成后设置值。
这涉及将以下方法添加到您的对象并在其中设置默认值:
void afterUnmarshal(Unmarshaller u, Object parent)
this.isStatsEnabled = true;
查看相关文档here
【讨论】:
以上是关于在 JAXB 生成的类中未设置默认布尔值的主要内容,如果未能解决你的问题,请参考以下文章