我正在使用包含以下类型的xjc编译XSD:
<xs:simpleType name="CPT-DateTime">
<xs:annotation>
<xs:appinfo>Can be specified as a integer number or as xs:dateTime</xs:appinfo>
</xs:annotation>
<xs:union memberTypes="xs:unsignedLong xs:dateTime"/>
</xs:simpleType>
使用此类型的结果类使用此元素设置为String进行编译,而我希望它们使用XMLGregorianCalendar。
有没有办法可以强制xjc在String上选择xs:dateTime成员类型?我已经看过如何为simple types而不是工会做到这一点。
答案 0 :(得分:2)
我相信,you've referenced应该对任意简单类型实际工作。假设tns
是模式中targen命名空间的声明前缀,请尝试以下映射:
<globalBindings>
<javaType name="javax.xml.datatype.XMLGregorianCalendar" xmlType="tns:CPT-DateTime" .../>
</globalBindings>
然而,我并非百分百肯定。
同时检查xjc:javaType
。
答案 1 :(得分:0)
此处类似问题xjc: override xs:simpleType definition
javaType
won't work because XMLGregorianCalendar
is abstract。我正在寻找添加小型适配器的道路。
答案 2 :(得分:0)
解决方案来自denishaskin的最终实施:
<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings jxb:version="2.1" xmlns:jxb="{NS1-n}" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc">
<jxb:bindings node="/xs:schema" schemaLocation="../{SCHEMA}.xsd">
<jxb:globalBindings>
<jxb:javaType name="org.joda.time.DateTime" xmlType="xs:dateTime"/>
<jxb:javaType name="org.joda.time.DateTime" xmlType="tns:CPT-DateTime"/>
<jxb:javaType name="org.joda.time.LocalDate" xmlType="tns:CPT-Date"/>
<jxb:javaType name="org.joda.time.LocalTime" xmlType="tns:CPT-Time"/>
</jxb:globalBindings>
</jxb:bindings>