当前位置: 首页 > 知识库问答 >
问题:

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

公羊宇定
2023-03-14

我打算使用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个答案

雷国兴
2023-03-14

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

巩阳秋
2023-03-14

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

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

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

在这里查看相关留档

 类似资料:
  • 我想为布尔值定义默认值false,但它似乎仍然是true,因为它在昂首阔步上是默认值。 我如何定义它以将false视为默认值。 昂首阔步的请求: Dto类

  • 问题内容: 我正在尝试从FpML(金融产品标记语言)4.5版生成Java类。生成了大量代码,但是我不能使用它。尝试序列化一个简单的文档,我得到以下信息: 实际上,没有任何类具有@XmlRootElement批注,那么我该怎么做呢?我将xjc(JAXB 2.1)指向fpml-main-4-5.xsd,其中包括所有类型。 问题答案: v

  • 问题内容: 有没有一种方法可以在共享首选项中设置默认值? 这是我的负载偏好代码 这是我的保存偏好代码 问题答案: 当您使用键和值设置首选项时,实际上是在提供该值。因此,这次不必使用默认值。请参见,在检索该值时,如果以前未设置该值,则可以定义一个默认值。 如果您得到strSavedMem1 =“ default”,那么肯定是默认情况,因为您没有在首选项中为MEM1设置任何其他值

  • 问题内容: 我在同一包中有2个班级。这两个类都具有main方法。现在,我想构建一个jar文件。我想建立2个jar文件,这些文件使用不同的主要功能作为默认主要功能。 例如 如何在NetBeans IDE中进行操作? 我找到了答案。您可以在netbeans中轻松地做到这一点:1)右键单击项目>属性>运行>选择类frm并下拉列表。在netbeans中是如此简单。Netbeans摇摇欲坠! 问题答案: 在

  • 我在xsd模式中有不同的复杂类型,我使用Jaxb在java类上展示了这一点。我以这种方式在javaclass中展示了成功复杂类型枚举: 但我不能在java生成的类中表达这种限制 minOccurs="0"和maxLlong value="15"都播种在生成的java类中。 有人能帮我吗?三硝基二甲苯

  • 问题内容: 为什么在编写时默认分配给变量而不是变量? 我之所以问是因为,我遇到了一些代码,其中有一个关于布尔变量的求值,即是否确定是否执行方法。 问题答案: 布尔(带有大写的“ B”)是一个布尔对象,如果未分配值,则默认为null。布尔值(带有小写的“ b”)是布尔值基元,如果未分配值,则默认为false。