我正在将一个项目从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());
因为它试图对传入的布尔值进行拆箱-除非布尔值为空。
我不能更改模式,也不能调整所有客户端代码来执行null检查。
我在binding.xml中设置了optionalProperty属性,如下所示:
<globalBindings optionalProperty="primitive">
在规范中,它说:“如果属性值是"primitive",它就像在JAXB1.0中那样绑定。”
然而,这显然没有发生。
我该如何解决这个问题?
更新:
这个问题现在已经在jaxb 2.2.9:https://java.net/jira/browse/JAXB/fixforversion/16850中修复了
https://stackoverflow.com/questions/13035975
复制相似问题