Я переношу проект из JAXB 1.0 в JAXB 2.1, и у меня возникают проблемы с отображением типа данных.
Я использую компилятор привязки Ant xjc, и я успешно настроил глобальные привязки, такие как (например) xs: date maps to java.util.Calendar.
Однако я получаю сгенерированные методы, которые возвращают Boolean, и я хочу boolean.
Вот сложный тип:
<xs:element name="usage-auth-rate-charge">
<xs:complexType>
<xs:sequence>
<xs:element name="service-id" type="xs:string"/>
<xs:element name="pricepoint_custom_fields_required" type="xs:boolean" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
И сгенерированный класс выглядит следующим образом:
public class UsageAuthRateCharge {
........
public Boolean isPricepointCustomFieldsRequired() {
return pricepointCustomFieldsRequired;
}
Проблема заключается в том, что, хотя бокс будет работать, если поставляемый XML не содержит значения для pricepoint_custom_fields_required
, класс Boolean field имеет значение null, а не false. Поэтому я получаю NullPointerException, когда делаю что-то вроде этого:
methodWhichTakesPrimitiveBooleanArg(myUsageAuthRateChargeInstance.isPricepointCustomFieldsRequired());
потому что он пытается распаковать Boolean, переданный в - кроме него null.
Я не могу изменить схему, и я не могу настроить весь код клиента для выполнения нулевых проверок.
Я установил атрибут optionalProperty в свой файл binding.xml следующим образом:
<globalBindings optionalProperty="primitive">
В спецификации говорится: "Если значение атрибута" примитивно ", оно связывается, как в JAXB 1.0"
Но это явно не происходит.
Как я могу решить эту проблему?
UPDATE:
Теперь это исправлено в jaxb 2.2.9: https://java.net/jira/browse/JAXB/fixforversion/16850