Я использую CXF для размещения веб-служб в контексте Spring , что делает привязку JAX-WS по умолчанию. И я использую Java-First, что означает аннотированные интерфейсы и классы конечных точек.
Поскольку привязка по умолчанию для JAX-WS использует класс XMLGregorianCalendar
для дат, когда я вызываю свой веб-сервис, передавая java.util.Date
, он преобразуется в XMLGregorianCalendar
на сервере.
Есть много сообщений и документации о том, как изменить это, чтобы привязать значения даты к java.util.Date
, но все они связаны с wsdl2java, например:
<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>
Поскольку я использую Spring, я ищу способ сделать это в файлах конфигурации контекста Spring (или файлах конфигурации CXF). Фрагмент моего файла:
<jaxws:endpoint id="jaxwsDocumentGroupWsEndpoint" implementor="#documentGroupWsEndpoint" address="/documentGroup">
<!-- SOMETHING TO WRITE HERE TO TELL CXF TO USE java.util.Date ??? -->
</jaxws:endpoint>