我正在将项目从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
,则该类的布尔字段为null,而不是false。所以当我做这样的事情时,我会得到
NullPointerExceptions :
methodWhichTakesPrimitiveBooleanArg(myUsageAuthRateChargeInstance.isPricepointCustomFieldsRequired());
因为它尝试取消对传入的布尔值进行装箱-除非它为null。
我无法更改架构,也无法调整所有客户端代码以执行null检查。
我在我的 binding.xml中 设置了 optionalProperty 属性,如下所示: __
<globalBindings optionalProperty="primitive">
在规范中,它说:“如果属性的值是“原始”,则它将像在JAXB 1.0中一样进行绑定”
然而,这显然没有发生。
我怎么解决这个问题?
更新:
现在已在jaxb
2.2.9中修复此问题:https
://java.net/jira/browse/JAXB/fixforversion/16850
我无聊地等待开发团队的修复,所以我袖手旁观,自己动手做。
我包含以下代码,以帮助对这也是一个问题的人们。
免责声明 :我的代码可能不是解决问题的最佳方法,但对我有用。
现在,生成的代码如下所示:
public boolean isPricepointCustomFieldsRequired() {
if (pricepointCustomFieldsRequired == null) {
return false;
} else {
return pricepointCustomFieldsRequired;
}
}
修改如下:
com.sun.tools.xjc.reader.xmlschema.bindinfo.BIProperty:createElementProperty,第〜358行
下线后
types.addTo(prop);
插入以下代码:
if (prop.isOptionalPrimitive() && getOptionalPropertyMode() == OptionalPropertyMode.PRIMITIVE &&
!prop.getTypes().isEmpty() && "boolean".equals(prop.getTypes().get(0).getTypeName().getLocalPart()) ) {
prop.defaultValue= CDefaultValue.create(CBuiltinLeafInfo.BOOLEAN, new XmlString("false"));
}
我正在将一个项目从JAXB 1.0迁移到JAXB 2.1,我在数据类型映射方面遇到了问题。 我正在使用蚂蚁xjc绑定编译器,并且我已经成功地配置了全局绑定,以便(例如)xs: date映射到java.util.日历。 然而,我得到的生成方法返回,而我想要。 这里是复杂类型: 生成的类看起来像这样: 问题是,虽然装箱可以工作,但如果提供的XML不包含的值,则类的布尔字段为null,而不是false。
我使用jaxb2-maven-plugin ver1.5生成Java类从XSD在我的项目。我的XSD看起来像: 反序列化到Java类后,我收到布尔值的免费文件夹,但我需要布尔值。我不能编辑XSD,因为它是公开的。有人知道如何在不改变方案的情况下解决这个问题吗?
我正在从WSDL生成源代码。它生成包装器类型。我希望JAXB生成基本类型,而不是包装器。 在pom.xml 在我的WSDL文件中 在生成类中 我尝试设置bindingDirectory以强制使用原语而不是包装器。但jaxb2 maven插件2.5.0版本似乎不提供该选项。 aBindingConfiguration。xjb文件
问题内容: 尝试按照Apple文档(和教程化的)创建Launch Helper时,我似乎遇到了麻烦,原因是将Objective- C代码移植到Swift中…在此方面,谁的编译器再也不过分了案件。 该错误似乎始终是: 我尝试过在多个位置进行转换,以防万一我只是在处理一个多余的,古老的原语(由Obj- C或Core Foundation引入)而无济于事。 为了以防万一,我尝试投射响应: 产生错误: …
Dart为布尔数据类型提供内置支持,Dart中的布尔数据类型仅支持两个值 - 和。关键字用于表示Dart中的布尔文字。 在Dart中声明布尔变量的语法,如下所示 - 示例1 执行上面示例代码,得到以下结果 - 示例2 与JavaScript不同,布尔数据类型仅将文字识别为。任何其他值都被视为。考虑以下示例 - 如果在JavaScript中运行,上面的代码段将打印消息 - ,因为如果字符串不为空,结
我对Java编码非常陌生,我已经研究这个问题大约4天了。我正在做一个选择你自己的结局故事。当我到达第69行时,如果读者选择是,我希望系统重新开始故事,如果他们选择否,则结束程序。我不确定我是否正确地编码了while循环,或者我甚至可以使用中断;操作员就像我在使用它一样。对不起,我的代码太难看了,哈哈,我正在努力变得更好。感谢您的建议! }