2015-06-09 3 views
1

Я получаю сообщение об ошибке:Преобразовать тип дата строки в JAXB с помощью привязок

Не удалось преобразовать XSD: дату типа java.lang.String

Я использую binding.xml файл с CXF XJC плагин

XSD:

<?xml version="1.0" encoding="UTF-8"?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="Date" type="xsd:date"/> 
    <xsd:element name="Audit"> 
     <xsd:complexType> 
      <xsd:sequence> 
       <xsd:element name="Creation"> 
        <xsd:complexType> 
         <xsd:sequence> 
          <xsd:element ref="Date"/> 
         </xsd:sequence> 
        </xsd:complexType> 
       </xsd:element> 
      </xsd:sequence> 
     </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 

binding.xml

<jaxb:bindings version="2.0" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <jaxb:bindings> 
     <jaxb:globalBindings> 
      <jaxb:javaType name="java.lang.String" xmlType="xsd:date"/> 
     </jaxb:globalBindings> 
    </jaxb:bindings> 
</jaxb:bindings> 

CXF XJC плагин:

<plugin> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-xjc-plugin</artifactId> 
     <version>3.0.3</version> 
     <executions> 
      <execution> 
       <id>generate-resources</id> 
       <phase>generate-resources</phase> 
       <configuration> 
        <defaultOptions> 
         <bindingFiles> 
          <bindingFile>${basedir}/src/main/resources/META-INF/binding.xml</bindingFile> 
         </bindingFiles> 
         <noAddressBinding>true</noAddressBinding> 
        </defaultOptions> 
        <sourceRoot>${project.build.directory}/generated-sources/cxf</sourceRoot> 
        <xsdOptions> 
         <xsdOption> 
          <xsd>${basedir}/src/main/resources/xsd/Misc.xsd</xsd> 
          <packagename>com.mycomp.ext.schema</packagename> 
          <extension>true</extension> 
         </xsdOption> 
        </xsdOptions> 
       </configuration> 
       <goals> 
        <goal>xsdtojava</goal> 
       </goals> 
      </execution> 
     </executions> 
    </plugin> 

Сгенерированный код содержит XMLGregorianCalendar вместо строки

@XmlElement(name = "Date", required = true) 
    @XmlSchemaType(name = "date") 
    protected XMLGregorianCalendar date; 

Любые предложения, пожалуйста?

+0

[Если это так, вы хотите использовать преобразование схемы, то вы можете попробовать решение, данное в ссылке] [1] [1]: http://stackoverflow.com/questions/ 3679266/simple-conversion-between-java-util-date-and-xmlgregoriancalendar – vinothM

ответ

0

Если изменить тип XML в XSD: дата XSD: строка должна быть рабочей

+0

У меня есть число XSD и файл привязки. Я хочу преобразовать xsd: поля данных в виде String в сгенерированные java POJO. – Sparkle8

0

Жаль, что я имею в виду, если вы хотите получить доступ к нему в качестве строкового поля в Java вы должны определить, что схема с XSD: строка типа вместо типа xsd: date.

Вариант 1. Если вы хотите использовать поле в качестве даты в java, вы можете отформатировать его в java позже.
Вариант второй: если вы хотите, чтобы схема заботилась о типе данных, вы должны определить как xsd: date и использовать XMLGregorianCalendar, который может быть преобразован в календарь или в обычный объект Date java позже в java. Таким образом, проверка формата даты будет выполняться самой схемой.