JAXB2 генерирует геттеры/сеттеры с примитивными типами для необязательных атрибутов.

Мы используем jaxb2 для генерации кода Java из определений схемы xml для некоторых внешних данных. Проект довольно старый и использовал 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 генерирует геттеры и сеттеры с примитивным типом вместо нулевых типов:

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, а также проверяет это в модульных тестах, которые завершаются ошибкой с исключением нулевого указателя.

Есть ли способ генерировать геттеры/сеттеры с нулевыми типами для необязательных атрибутов? Файлы xsd предоставляются внешним поставщиком, поэтому я бы предпочел не изменять их. Мы не устанавливаем optionalProperty в <globalBindings>, поэтому по умолчанию используется значение wrapper.


person Jens    schedule 14.07.2017    source источник


Ответы (1)


Я думаю, что у меня есть решение моего собственного вопроса. В дополнение к optionalProperty в globalBindings есть опция generateIsSetMethod, которая определяет, должны ли генерироваться такие методы, как isSetNum. Если эта функция включена, примитивные типы, такие как int, будут использоваться вместо Integer.

person Jens    schedule 14.07.2017