我使用CXF在Spring上下文中托管Web服务,这使得JAX-WS成为默认绑定。我正在使用Java-First,这意味着带注释的端点接口和类。由于JAX-WS的缺省绑定使用日期的XMLGregorianCalendar
类,当我呼叫我的web服务传递java.util.Date
时,它将在服务器上转换为XMLGregorianCalendar
。如何告诉Apache CXF在Spring配置中使用java.util.Date
有很多帖子和文档,了解如何更改此日期值绑定到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上下文配置文件(或CXF配置文件)中执行此操作的方法。我的文件的片段:
<jaxws:endpoint id="jaxwsDocumentGroupWsEndpoint" implementor="#documentGroupWsEndpoint" address="/documentGroup">
<!-- SOMETHING TO WRITE HERE TO TELL CXF TO USE java.util.Date ??? -->
</jaxws:endpoint>
如果有人遇到同样的问题,我可以使用JAXB注释解决我的问题。看到这个问题:http://stackoverflow.com/questions/3953433/tell-jaxb-to-unmarshal-xsdatetime-to-date-class-using-annotations – Iravanchi 2010-10-18 07:59:25
你可以更具体,关于你想要自定义什么工件?如果它是JAX-WS工件(SEI),那么为接口提供Java代码。或者如果这是JAXB bean,请向我们展示生成的代码。 – 2011-11-21 16:50:17