J'utilise CXF pour héberger des services Web dans un contexte Spring, ce qui fait de JAX-WS la liaison par défaut. Et j'utilise Java-First, ce qui signifie des interfaces et des classes de point de terminaison annotées.Comment indiquer à Apache CXF d'utiliser java.util.Date dans Spring Configuration
Depuis liaison par défaut pour JAX-WS utilise la classe XMLGregorianCalendar
pour les dates, quand je l'appelle mon service web qui passe un java.util.Date
il est converti en XMLGregorianCalendar
sur le serveur.
Il y a beaucoup de messages et la documentation sur la façon de changer cela pour lier les valeurs de date à java.util.Date
, mais tous sont liés à l'outil de wsdl2java, tels que:
<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>
Depuis que je suis avec Spring, je suis la recherche d'un moyen de le faire dans les fichiers de configuration de contexte de printemps (ou les fichiers de configuration CXF). Un extrait de mon dossier:
<jaxws:endpoint id="jaxwsDocumentGroupWsEndpoint" implementor="#documentGroupWsEndpoint" address="/documentGroup">
<!-- SOMETHING TO WRITE HERE TO TELL CXF TO USE java.util.Date ??? -->
</jaxws:endpoint>
Dans le cas où quelqu'un a rencontré le même problème, je pourrait résoudre le mien en utilisant des annotations JAXB. Voir cette question: http://stackoverflow.com/questions/3953433/tell-jaxb-to-unmarshal-xsdatetime-to-date-class-using-annotations – Iravanchi
Pouvez-vous être plus précis, à propos de quel artefact vous voulez personnaliser? Si c'est un artefact JAX-WS (SEI), fournissez un code Java pour l'interface. Ou si c'est le bean JAXB, montrez-nous le code généré. –