JAXB 编译器将 xs:boolean 绑定到 Java Boolean 包装器类,而不是布尔基元类型
我正在将一个项目从 JAXB 1.0 迁移到 JAXB 2.1,但我在数据类型映射方面遇到了问题。
我正在使用Ant xjc绑定编译器,并且我已经成功配置了全局绑定,例如,xs:date映射到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 不包含 的值,则该类的布尔字段为 null,而不是 false。因此,在执行以下操作时,我得到了NullPointerExceptions:pricepoint_custom_fields_required
methodWhichTakesPrimitiveBooleanArg(myUsageAuthRateChargeInstance.isPricepointCustomFieldsRequired());
因为它试图取消包装传入的布尔值 - 除了它是空的。
我无法更改架构,也无法调整所有客户端代码以执行 null 检查。
我已经在绑定中设置了可选的Property属性.xml如下所示:
<globalBindings optionalProperty="primitive">
在规范中,它说:“如果属性的值为'基元',它将像在JAXB 1.0中那样绑定”
然而,这显然没有发生。
我该如何解决这个问题?
更新:
现在在 jaxb 2.2.9 中修复了此问题:https://java.net/jira/browse/JAXB/fixforversion/16850