我正在将一个项目从 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 不包含 的值pricepoint_custom_fields_required
,则该类的布尔字段为空,而不是假。所以我在做这样的事情时得到NullPointerExceptions :
methodWhichTakesPrimitiveBooleanArg(myUsageAuthRateChargeInstance.isPricepointCustomFieldsRequired());
因为它试图拆箱传入的布尔值 - 除了它是空的。
我无法更改架构,也无法调整所有客户端代码来进行空检查。
我在binding.xml中设置了optionalProperty属性,如下所示:
<globalBindings optionalProperty="primitive">
在规范中,它说:“如果属性的值是“原始的”,它会像在 JAXB 1.0 中那样绑定”
然而,这显然没有发生。
我怎么解决这个问题?
更新:
这现在在 jaxb 2.2.9 中得到修复: https ://java.net/jira/browse/JAXB/fixforversion/16850