Problems with XMLGregorianCalendar
The conversion between wsdl dataTypes and java dataTypes is held automatically by this plugin, so in most cases, you don´t need to worry about anything more.But one annoying thing most people notes is the conversión between date/dateTime and XMLGregorianCalendar.
For example, by having this detifintion:
<xs:complexType name="operacionesPagoFiltroDTO"> <xs:sequence> <xs:element minOccurs="0" name="entidad" type="xs:long" /> <xs:element minOccurs="0" name="fechaDesde" type="xs:dateTime" /> <xs:element minOccurs="0" name="fechaHasta" type="xs:dateTime" /> <xs:element minOccurs="0" name="nifUsuario" type="xs:string" /> <xs:element minOccurs="0" name="seccion" type="xs:long" /> </xs:sequence> </xs:complexType>
You will get this POJO:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "operacionesPagoFiltroDTO", propOrder = {
"entidad",
"fechaDesde",
"fechaHasta",
"nifUsuario",
"seccion"
})
public class OperacionesPagoFiltroDTO {
protected Long entidad;
@XmlSchemaType(name = "dateTime")
protected XMLGregorianCalendar fechaDesde;
@XmlSchemaType(name = "dateTime")
protected XMLGregorianCalendar fechaHasta;
protected String nifUsuario;
protected Long seccion;
(...)
}
So, you have to manually make the conversion in order to obtain java.util.Date.
Solution
The solution is to use a custom binding file and a dateAdapter. When CXF plugin is executed, it will check the binding configuration and will generate the java.util.Date automatically.In pom.xml you have to specify the custom binding file:
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${cxf.version}</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>${project.build.directory}/generated/cxf</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/resources/wsdl/gestionEconomica/GestionEconomica.wsdl</wsdl>
<bindingFiles>
<bindingFile>${basedir}/src/main/resources/wsdl/gestionEconomica/GestionEconomicaBinding.xml</bindingFile>
</bindingFiles>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
And this would be the binding file:
<jaxws:bindings wsdlLocation="GestionEconomica.xsd.wsdl"
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<jaxws:bindings node="wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='http://mytargetspace.es/']">
<jxb:globalBindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jxb:javaType
name="java.util.Date"
xmlType="xs:dateTime"
parseMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.parseDateTime"
printMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.printDateTime" />
</jxb:globalBindings>
</jaxws:bindings>
</jaxws:bindings>
By doing so, you will get this POJO:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "operacionesPagoFiltroDTO", propOrder = {
"entidad",
"fechaDesde",
"fechaHasta",
"nifUsuario",
"seccion"
})
public class OperacionesPagoFiltroDTO {
protected Long entidad;
@XmlElement(type = String.class)
@XmlJavaTypeAdapter(Adapter1 .class)
@XmlSchemaType(name = "dateTime")
protected Date fechaDesde;
@XmlElement(type = String.class)
@XmlJavaTypeAdapter(Adapter1 .class)
@XmlSchemaType(name = "dateTime")
protected Date fechaHasta;
protected String nifUsuario;
protected Long seccion;
(...)
}
You can specify any adapter you want, but CXF also provides you with a basic implementation: org.apache.cxf.xjc.runtime.DataTypeAdapter. In order to use it, you need to add this extra dependency to your pom.xml:
<dependency>
<groupId>org.apache.cxf.xjc-utils</groupId>
<artifactId>cxf-xjc-runtime</artifactId>
<version>${cxf-xjc-runtime.version}</version>
</dependency>
Note: You can check more about wsdl2java and eclipse in one of my previous posts: http://trabajosdesisifo.blogspot.com.es/2015/04/eclipse-maven-configure-wsdl2java.html
No hay comentarios:
Publicar un comentario