Преобразовать тип даты в строку в jaxb, используя привязки
Я получаю сообщение об ошибке:
Не удалось преобразовать xsd: date в тип 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 вместо String
@XmlElement(name = "Date", required = true)
@XmlSchemaType(name = "date")
protected XMLGregorianCalendar date;
Любые предложения, пожалуйста?
2 ответа
Если вы измените тип xml на xsd:date xsd:string, он должен работать
Извините, я имею в виду, если вам нужно получить доступ к нему как к строковому полю в Java, вы должны определить эту схему с типом xsd:string вместо типа xsd:date.
Вариант первый: если вы хотите использовать поле в качестве даты в Java, вы можете отформатировать его в Java позже.
Вариант 2: Если вы хотите, чтобы схема заботилась о типе данных, вы должны определить ее как xsd:date и использовать XMLGregorianCalendar, который можно преобразовать в календарь или в обычный объект Java даты позже в Java. Таким образом, проверка формата даты будет выполняться самой схемой.