Принудительная настройка Jaxb типа члена объединения при компиляции

1

Я компилирую XSD, используя xjc, который включает в себя следующий тип:

<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 выбрать тип члена xs: dateTime над String? Я видел, как это сделать для простых типов, но не для союзов.

Теги:
jaxb
xjc

3 ответа

2
Лучший ответ

Я полагаю, что вы написали, действительно, должны работать для произвольных простых типов. Предполагая, что tns является объявленным префиксом для пространства имен Targen в вашей схеме, попробуйте следующее сопоставление:

<globalBindings>
    <javaType name="javax.xml.datatype.XMLGregorianCalendar" xmlType="tns:CPT-DateTime" .../>
</globalBindings>

Однако я не уверен на 100%.

Также проверьте xjc:javaType.

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>

0

Аналогичный вопрос здесь xjc: переопределить xs: simpleType definition

javaType не будет работать, потому что XMLGregorianCalendar является абстрактным. Я направился по пути добавления небольшого адаптера.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню