1

我们正在使用 jaxb2 从一些外部数据的 xml 模式定义生成 Java 代码。该项目相当古老,使用了 maven-jaxb-plugin 1.1.1。我们想更新到也将使用 jaxb2 的 jaxb2-maven-plugin,但我们发现生成的代码存在一些差异。具体来说,我们有以下形式的属性

    <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

4

1 回答 1

1

我想我对自己的问题有一个解决方案。除了optionalPropertyin之外globalBindings,还有一个选项generateIsSetMethod可以控制是否isSetNum生成类似的方法。int如果启用此功能,将使用原始类型如代替Integer.

于 2017-07-14T14:31:21.620 回答