ejemplo web-services jax-ws

web-services - xmlgregoriancalendar ejemplo



¿cómo reemplazar XmlGregorianCalendar por fecha? (2)

Tengo que exponer una capa de servicio ejb a través de jax-ws.

He generado el servicio web usando jax-ws y wsimport, pero me han dejado cosas extrañas; La fecha se asigna a XmlGregorianCalendar. ¿Es posible utilizar la fecha clásica de java en su lugar? ¿Puedes mostrarme la forma correcta de proceder?

Gracias . Editar: este es el archivo de enlace que utilicé: gracias, modifiqué ligeramente su xml y lo adjunté con netbeans al servicio web del cliente y funcionó. Este es el enlace que utilicé:

<jaxws:bindings node="wsdl:definitions/wsdl:types/xsd:schema" xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" wsdlLocation="../wsdl/localhost_8080/web_test/Testor.wsdl" > <jaxb:globalBindings> <jaxb:javaType name="java.util.Date" xmlType="xsd:dateTime" parseMethod="lol.XsdDateTimeConverter.unmarshal" printMethod="lol.XsdDateTimeConverter.marshalDateTime" /><jaxb:javaType name="java.util.Date" xmlType="xsd:date" parseMethod="lol.XsdDateTimeConverter.unmarshal" printMethod="lol.XsdDateTimeConverter.marshalDate" /> </jaxb:globalBindings> </jaxws:bindings>


Gracias Tomasz. La solución anterior funciona.
Pero wsimport también agrega su conjunto de adaptadores como Adapter1.java y Adapter2.java con su paquete org.w3._2001.xmlschema , que realmente no coincide con mi propia estructura de paquete.

Encontré una manera de cambiar este nombre de paquete usando otro enlace jaxb. En realidad, busqué esto mucho y no pude encontrarlo fácilmente, así que lo estoy agregando aquí para cualquiera que busque lo mismo.

Agregue el siguiente enlace en wsimport usando ''-b binding.xml''. Tenga en cuenta que wsimport puede funcionar con múltiples archivos de enlace.

Contenido de binding.xml a continuación:

<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3.org/2001/XMLSchema" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.0"> <annotation><appinfo> <jaxb:schemaBindings> <jaxb:package name="com.abc.xyz.utils"/> </jaxb:schemaBindings> </appinfo></annotation> </schema>


No probado, pero debería funcionar. Primero crea dicha clase:

import javax.xml.bind.DatatypeConverter; public class XsdDateTimeConverter { public static Date unmarshal(String dateTime) { return DatatypeConverter.parseDate(dateTime).getTime(); } public static String marshalDate(Date date) { final GregorianCalendar calendar = new GregorianCalendar(); calendar.setTime(date); return DatatypeConverter.printDate(calendar); } public static String marshalDateTime(Date dateTime) { final GregorianCalendar calendar = new GregorianCalendar(); calendar.setTime(dateTime); return DatatypeConverter.printDateTime(calendar); } }

A continuación, agregue esto al archivo xjb personalizado:

<javaType name="java.util.Date" xmlType="xs:dateTime" parseMethod="XsdDateTimeConverter.unmarshal" printMethod="XsdDateTimeConverter.marshalDateTime" /> <javaType name="java.util.Date" xmlType="xs:date" parseMethod="XsdDateTimeConverter.unmarshal" printMethod="XsdDateTimeConverter.marshalDate" /> </globalBindings>

No probado, pero debería funcionar. Basado en mi respuesta aquí: JAX-WS y Joda-Time?