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?