【问题标题】:JAXB2 generates getters/setters with primitive types for optional attributesJAXB2 为可选属性生成带有原始类型的 getter/setter
【发布时间】:2017-07-14 12:59:55
【问题描述】:

我们正在使用 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,而不是可以为 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 返回一个可为空的装箱类型,并且还在单元测试中对其进行测试,但单元测试失败并出现空指针异常。

有没有办法为可选属性生成具有可为空类型的 getter/setter? xsd 文件是由外部供应商提供的,所以我不想修改它们。我们在&lt;globalBindings&gt;中没有设置optionalProperty,所以取值是默认的wrapper

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 2022-12-24
      • 2018-07-17
      • 2018-07-21
      • 1970-01-01
      相关资源
      最近更新 更多