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