Невозможно сгенерировать java.util.Calendar из xsd - получение XmlGregorianCalendar

Можно ли генерировать сущности с полями типа Claendar из файлов xsd? Я пытаюсь и xs:date и xs:dateTime, но все еще получаю XMLGregarionCalendar. Я использую cxf-codegen-plugin и jaxb bninding. Благодарю. Павел.

2 ответа

Решение

При создании ваших объектов вы можете использовать файл привязки JAXB, как показано в примере 7 документации по cxf-codegen-plugin. В зависимости от того, какой тип вы хотите использовать (Календарь, Дата и т. Д.), Вам нужно будет указать соответствующий адаптер. Для использования календаря JAXB предоставляет адаптер javax.xml.bind.DatatypeConverter. Чтобы использовать его с dateTime, date и time, файл привязок JAXB должен быть

<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings version="2.1"
              xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
              xmlns:xs="http://www.w3.org/2001/XMLSchema"
              xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc">

    <jxb:globalBindings>
        <!-- use Calendar instead of XMLGregorianCalendar -->
        <jxb:javaType name="java.util.Calendar" xmlType="xs:dateTime"
            parseMethod="javax.xml.bind.DatatypeConverter.parseDateTime"
            printMethod="javax.xml.bind.DatatypeConverter.printDateTime"/>

        <jxb:javaType name="java.util.Calendar" xmlType="xs:date"
            parseMethod="javax.xml.bind.DatatypeConverter.parseDate"
            printMethod="javax.xml.bind.DatatypeConverter.printDate"/>

        <jxb:javaType name="java.util.Calendar" xmlType="xs:time"
            parseMethod="javax.xml.bind.DatatypeConverter.parseTime"
            printMethod="javax.xml.bind.DatatypeConverter.printTime"/>

    </jxb:globalBindings>        
</jxb:bindings>

Если вы хотите вместо этого использовать Date, CXF предоставляет org.apache.cxf.xjc.runtime.DataTypeAdapter в cxf-xjc-runtime.

Основываясь на ответе Патрика, вот эквивалент XJC:

<jaxb:bindings version="2.1"
              xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
              xmlns:xs="http://www.w3.org/2001/XMLSchema"
              xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc">

    <jaxb:globalBindings>
       <!-- use Calendar Date instead of XMLGregorianCalendar -->
       <jaxb:javaType name="java.util.Date" xmlType="xs:dateTime"
                 parseMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.parseDateTime"
                 printMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.printDateTime"/>

       <jaxb:javaType name="java.util.Date" xmlType="xs:date"
                 parseMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.parseDate"
                 printMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.printDate"/>

       <jaxb:javaType name="java.util.Date" xmlType="xs:time"
                 parseMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.parseTime"
                 printMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.printTime"/>

    </jaxb:globalBindings>         
</jaxb:bindings>
Другие вопросы по тегам