编译时强制联合成员类型的Jaxb首选项

时间:2014-11-25 17:22:03

标签: java xml jaxb xjc

我正在使用包含以下类型的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而不是工会做到这一点。

3 个答案:

答案 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>