Sto utilizzando CXF per ospitare i servizi Web in un contesto Spring, che rende JAX-WS l'associazione predefinita. E sto usando Java-First, che significa interfacce e classi endpoint annotate.Come comunicare a Apache CXF di utilizzare java.util.Date in Spring Configuration
Dal vincolante per JAX-WS predefinito utilizza XMLGregorianCalendar
classe per le date, quando chiamo il mio servizio web passando un java.util.Date
viene convertita in XMLGregorianCalendar
sul server.
Ci sono molti posti e la documentazione su come cambiare questo per associare i valori di data di java.util.Date
, ma tutti sono legati a strumento WSDL2Java, come ad esempio:
<jaxws:bindings wsdlLocation="YOUR_WSDL_LOCATION"
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='THE_NAMESPACE_OF_YOUR_SCHEMA']">
<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.tools.common.DataTypeAdapter.parseDateTime"
printMethod="org.apache.cxf.tools.common.DataTypeAdapter.printDateTime"/>
</jxb:globalBindings>
</jaxws:bindings>
</jaxws:bindings>
Dal momento che sto usando Primavera, io sono cercare un modo per farlo in Primavera nei file di configurazione del contesto (o nei file di configurazione CXF). Uno snippet del mio file:
<jaxws:endpoint id="jaxwsDocumentGroupWsEndpoint" implementor="#documentGroupWsEndpoint" address="/documentGroup">
<!-- SOMETHING TO WRITE HERE TO TELL CXF TO USE java.util.Date ??? -->
</jaxws:endpoint>
Nel caso in cui qualcuno abbia riscontrato lo stesso problema, io potrebbe risolvere il mio usando annotazioni JAXB. Vedi questa domanda: http://stackoverflow.com/questions/3953433/tell-jaxb-to-unmarshal-xsdatetime-to-date-class-using-annotations – Iravanchi
Puoi essere più specifico su quale artefatto vuoi personalizzare? Se si tratta di artefatto JAX-WS (SEI), fornire un codice Java per l'interfaccia. O se quello è bean JAXB, mostraci il codice generato. –