JAXB2为可选属性生成具有基本类型的getter / setter

时间:2017-07-14 12:59:56

标签: java jaxb2 xjc jaxb2-maven-plugin jaxb2-basics

我们正在使用jaxb2从一些外部数据的xml架构定义生成Java代码。该项目很老,使用了maven-jaxb-plugin 1.1.1。我们想要更新到jaxb2-maven-plugin,它也将使用jaxb2,但我们发现生成的代码存在一些差异。具体来说,我们有

形式的属性
    <xsd:attribute name="num" type="xsd:int" use="optional">

映射到生成的代码中的Integer字段。

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

但是,jaxb2使用基本类型而不是可空类型生成getter和setter:

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返回一个可以为空的盒装类型,并在单元测试中对此进行测试,该测试因空指针异常而失败。

有没有办法为可选属性生成具有可空类型的getter / setter? xsd文件是从外部供应商提供的,所以我宁愿不修改它们。我们未在optionalProperty中设置<globalBindings>,因此该值为默认wrapper

1 个答案:

答案 0 :(得分:1)

我想我能解决自己的问题。除了optionalProperty中的globalBindings之外,还有一个选项generateIsSetMethod可以控制是否生成isSetNum之类的方法。如果启用此选项,则将使用int等基本类型而不是Integer