首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JAXB编译器正在将xs:boolean绑定到Java布尔包装类,而不是布尔原语类型

JAXB编译器正在将xs:boolean绑定到Java布尔包装类,而不是布尔原语类型
EN

Stack Overflow用户
提问于 2012-10-24 01:25:54
回答 3查看 20.3K关注 0票数 19

我正在将一个项目从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中修复了

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13035975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档