jaxb2为可选属性生成具有原语类型的getter/setter

gzjq41n4  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(401)

我们使用jaxb2从xml模式定义为一些外部数据生成java代码。这个项目非常老,使用了maven jaxb plugin 1.1.1。我们想更新到jaxb2 maven plugin,它也将使用jaxb2,但是我们在生成的代码中发现了一些差异。具体来说,我们的属性是

<xsd:attribute name="num" type="xsd:int" use="optional">

Map到的 Integer 生成的代码中的字段。

@XmlAttribute(name = "num")
protected Integer num;

但是,jaxb2生成的getter和setter是基元类型,而不是可为null的类型:

public int getNum() {
    return num;
}

public void setNum(int value) {
    this.num = value;
}

public boolean isSetNum() {
    return (this.num!= null);
}

public void unsetNum() {
    this.num = null;
}

但是,我们当前的代码假设 getNum 返回一个可为null的装箱类型,并在单元测试中测试该类型,单元测试失败并出现null指针异常。
有没有一种方法可以为可选属性生成具有可空类型的getter/setter?xsd文件是由外部供应商提供的,所以我不想修改它们。我们不设定 optionalProperty<globalBindings> ,因此该值是默认值 wrapper .

j8yoct9x

j8yoct9x1#

我想我有办法解决我自己的问题。除了 optionalPropertyglobalBindings ,有选择 generateIsSetMethod 如果方法 isSetNum 是否生成。如果启用此选项,则基本类型(如 int 将使用而不是 Integer .

相关问题