`
wang4674890
  • 浏览: 88954 次
  • 性别: Icon_minigender_2
  • 来自: 厦门
社区版块
存档分类
最新评论

CXF ,在Client端用于把 Date 类型转换成 XMLGregorianCalendar .

    博客分类:
  • java
 
阅读更多
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;

private XMLGregorianCalendar convertToXMLGregorianCalendar(Date date) {

        GregorianCalendar cal = new GregorianCalendar();
        cal.setTime(date);
        XMLGregorianCalendar gc = null;
        try {
            gc = DatatypeFactory.newInstance().newXMLGregorianCalendar(cal);
        } catch (DatatypeConfigurationException e) {
            LOG
                    .debug(
                            "There are some error for convert java.util.Date to XMLGregorianCalendar",
                            e);
        }
        return gc;
    }

Remark:
            由于在使用CXF的 wsdl2java 生成Java客户端时,JAXB(默认)把java.util.Date类型解释为 XMLGregorianCalendar,所以在客户端调用的时候,也需要传入XMLGregorianCalendar参数来对应Date类型,此上是一种解决办法。


----------------------------------------------------------------------------------------------



默认情况下,JAXB将xsd:date, xsd:time, 和xsd:dateTime映射为XMLGregorianCalendar , 对于从java开始构建service的人,很少会直接用到这个类, 一般情况下我们都是用java.util.Date或者java.util.Calendar, 调用apache cxf 的java2wsdl, 我们得到的wsdl 的schema部分是xsd:dateTime, 当你再次调用wsdl2java来生产impl的时候,你会发现这个impl根本无法编译, 因为impl里是用的是XMLGregorianCalendar , 而SEI则是java.util.Date或者java.util.Calendar
那么如何才能使得wsdl2java生产的impl里,也是java.util.Date或者java.util.Calendar呢?

答案就是使用jaxws/jaxb 的customization。 jaxb允许我们做数据类型的转换,类javax.xml.bind.DatatypeConverter, 就是用来做这个的。
但是,jaxb只为我们做了xsd:date 到java.util.Calendar, java.util.Date需要自己来完成,好在我已经把这个代码放到了apache cxf里org.apache.cxf.tools.common.DataTypeAdapter

这里给出一个简单的例子,注意jaxb customzation部分是嵌入在schema里的


<xs schema elementformdefault="qualified" version="1.0" xmlns xs="http://www.w3.org/2001/XMLSchema" jaxb="http://java.sun.com/xml/ns/jaxb" version="2.0" targetnamespace="calendar-schemalet">
  <xs annotation>  <xs appinfo>
    <jaxb globalbindings>
      <jaxb javatype name="java.util.Calendar" xmltype="xs:date" parsemethod="javax.xml.bind.DatatypeConverter.parseDate" printmethod="javax.xml.bind.DatatypeConverter.printDate" />
    </jaxb globalbindings>
  </xs appinfo></xs annotation>
</xs schema>
那么上面这段代码就可以把xsd:date转换为java.util.Calendar了,而且是全局替换
如果你需要转换的schema类型是dateTime, 那么parseMethod 的parseDate就得改成parseDateTime, printMethod 也是类似。
这里再给一个java.util.Date的例子, 假设我们需要映射xsd:time 到java.util.Date,那么我们可以这些写:

<xs schema elementformdefault="qualified" version="1.0" xmlns xs="http://www.w3.org/2001/XMLSchema" jaxb="http://java.sun.com/xml/ns/jaxb" version="2.0" targetnamespace="calendar-schemalet">
  <xs annotation>  <xs appinfo>
    <jaxb globalbindings>
      <jaxb javatype name="java.util.Date" xmltype="xs:time" parsemethod="org.apache.cxf.tools.common.DataTypeAdapter.parseTime" printmethod="org.apache.cxf.tools.common.DataTypeAdapter.printTime" />
    </jaxb globalbindings>
  </xs appinfo></xs annotation>
</xs schema>
分享到:
评论

相关推荐

    Cxf转换器示例

    转换器在CXF中扮演着关键角色,尤其是在处理不同类型数据之间的转换时,如XML到Java对象,反之亦然。这些转换过程对于确保不同系统间的数据一致性至关重要。 首先,我们需要了解CXF的转换器体系结构。CXF框架中的...

    cxf+spring+client

    在IT行业中,CXF是一个广泛使用的开源框架,用于构建服务导向架构(SOA)中的Web服务。它提供了SOAP和RESTful服务的实现,并且与Spring框架无缝集成,使得配置和服务管理变得更加简单。在这个"**cxf+spring+client**...

    cxf-rt-rs-client-3.0.1-API文档-中文版.zip

    赠送jar包:cxf-rt-rs-client-3.0.1.jar; 赠送原API文档:cxf-rt-rs-client-3.0.1-javadoc.jar; 赠送源代码:cxf-rt-rs-client-3.0.1-sources.jar; 赠送Maven依赖信息文件:cxf-rt-rs-client-3.0.1.pom; 包含...

    CXF Web Service & client

    在提供的文件列表中,"WebService"可能包含了服务器端的代码和配置,而"WebserviceClient"则可能包含客户端的相关实现。通过这两个文件,你可以深入了解CXF如何应用于实际项目中,实践上述的知识点。 总结,Apache ...

    cxf spring server client demo.rar

    这个压缩包包含了一个服务器端(cxfserver)和一个客户端(cxfclient),用于展示如何使用CXF和Spring来创建、消费SOAP Web服务。 【描述】在描述中提到,“soap webservice”表明此项目专注于SOAP协议,这是一种...

    WebService CXF --- 由WSDL文件开发Client端

    WebService CXF是一个强大的开源框架,用于创建和消费Web服务。它允许开发者基于WSDL(Web Service Description Language)文件快速地生成服务端和客户端代码,极大地简化了Web服务的开发流程。在本篇中,我们将深入...

    07.处理Map等CXF无法自动转换的复合数据类型的形参和返回值

    在IT行业中,尤其是在Web服务开发领域,CXF是一个广泛应用的开源框架,用于构建和开发SOAP和RESTful服务。本文将详细探讨如何处理Map等CXF无法自动转换的复合数据类型的形参和返回值,这对于提升服务功能和用户体验...

    08.CXF拦截器的理论以及如何为CXF的客户端和服务器端添加拦截器

    拦截器分为两种类型:客户端拦截器和服务器端拦截器,分别处理客户端和服务端的请求和响应。 ### 二、拦截器的生命周期 CXF拦截器的生命周期与消息处理紧密相关,主要包含以下阶段: 1. **Pre-Dispatch(预调度)...

    cxf 2.1.3 client

    CXF 2.1.3 客户端是Apache CXF框架的一个版本,它用于构建和集成Web服务。Apache CXF是一个开源项目,提供了一套完整的工具和服务接口,用于实现SOAP(Simple Object Access Protocol)和RESTful(Representational ...

    CXF 一个完整的webService(整合客户端和服务端)

    CXF(CXF: XFire Community eXtended)是一个开源的Java框架,用于构建和部署Web服务。它提供了强大的支持,包括SOAP、RESTful API、WS-*规范等多种协议和服务模型。CXF不仅简化了Web服务的开发,而且允许开发者无缝...

    02.CXF功能概述_CXF发展历史和使用CXF开发WebService服务器端

    【标题】"02.CXF功能概述_CXF发展历史和使用CXF开发WebService服务器端"主要探讨了Apache CXF框架在Web服务领域的应用及其发展历程,同时也涵盖了如何利用CXF来构建一个高效的WebService服务器端。 Apache CXF是一...

    apache-cxf-2.7.7以及cxf客户端所需要的jar包

    2. **Data Binding**:CXF支持多种数据绑定机制,如JAXB(Java Architecture for XML Binding)用于将XML与Java对象相互转换,简化了Web服务的处理。 3. **WS-* Stack**:提供了对各种Web服务规范的支持,如WS-...

    CXF客户端添加soapHeader代码 + jar包 + apache-cxf-3.1.15

    在开发基于SOAP协议的服务时,有时我们需要在请求中添加特定的Header信息,这在CXF框架下可以通过编程方式实现。Apache CXF是一个流行的开源服务框架,支持SOAP和RESTful服务的开发、部署和消费。本示例将详细介绍...

    cxf转换器

    【标题】"CXF转换器"涉及的是Apache CXF框架在Web服务开发中的应用,特别是其转换器功能和Web服务发布的实现。 Apache CXF是一个开源的Java框架,它主要用于构建和开发SOAP(简单对象访问协议)和RESTful...

    apache-cxf-2.4.6.zip

    Apache CXF是一个开源的Java框架,它主要用于构建和开发服务导向架构(SOA)和Web服务。这个"apache-cxf-2.4.6.zip"压缩包包含了CXF框架的2.4.6版本,这是一个相对早期的版本,发布于2012年。在深入探讨CXF之前,...

    jdk5 下 CXF 开发 WEB Service client 所需jar 包

    在JDK 5环境下,Apache CXF是一个常用的框架,用于开发和消费Web服务,无论是作为服务提供者还是客户端。CXF支持多种协议,如SOAP、RESTful、WS-*等,使得开发者能方便地实现Web服务接口。 本篇内容将详细讲解在JDK...

    springboot整合CXF发布webservice和客户端调用

    SpringBoot整合CXF是将流行的Java Web服务框架CXF与SpringBoot轻量级框架结合,以便更方便地创建和消费Web服务。这个项目提供了一个很好的示例,通过详细注释帮助开发者理解如何在SpringBoot应用中发布和调用Web服务...

    cxf框架包 apache-cxf-3.4.3.tar.gz

    在本案例中,我们讨论的是"apache-cxf-3.4.3.tar.gz",这是Apache CXF 3.4.3版本的压缩包,通常包含了CXF框架的所有组件和必要的库文件。 **1. CXF框架介绍** Apache CXF是一个全面的服务开发框架,它的全称是...

    CXF契约优先开发方式之客户端实现(client)

    在本文中,我们将深入探讨如何使用Apache CXF的契约优先(Contract First)开发方式来创建一个客户端实现。CXF是一个开源的Java框架,它提供了一种灵活的方式来进行Web服务的开发,包括服务端和客户端。契约优先的...

    cxf的jar包

    CXF(CXF: Composite eXtensible Services Framework)是一个开源的Java框架,它用于构建和开发服务导向架构(SOA)中的Web服务。CXF允许开发者以他们选择的语言(如Java)编写服务端和客户端代码,同时支持多种Web...

Global site tag (gtag.js) - Google Analytics