`

CXF利用wsdl2java生成客户端时Date日期类型转换

 
阅读更多

  在利用CXF的wsdl2java生成客户端时,默认情况下java的Date类型会自动转换成XMLGregorianCalendar,如果想生成Date类型,该怎样处理?答案如下:

   1.生成配置文件(一般取名为jaxb-binding-date.xml,可放在任意路径下,只是在运行wsdl2java时使用):

   

<jaxws:bindings
          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='http://service.test.com/']">
      <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>

   这里需要注意的一点是:targetNamespace需要替换成自己的目标命名空间(可以在wsdl服务中看到)

 

   2.然后再在cmd下运行wsdl2java:

  

wsdl2java -p com.jd.crm.service.webserviceclient.complaintdetails -b D:\cxf\jaxb-binding-date.xml -d D:\cxf  http://localhost:9090/services/complaintDetails?wsdl

    参数说明:

    -p: 生成的客户端代码所在的包路径

    -b: jaxb-binding-date.xml文件的路径

    -d: 生成的客户端代码的本地存放路径

     http://localhost:9090/services/complaintDetails?wsdl    ----  webservice服务端wsdl访问路径

分享到:
评论
5 楼 penwei 2012-12-19  
cwfmaker 写道
penwei 写道
cwfmaker 写道
penwei 写道
这段配置放到什么位置地方?

可以放在任何地方,只需要在运行wsdl命令的时候,参数里面添加就行,比如:
-b D:\cxf\jaxb-binding-date.xml

再我的程序中不会用到wsdl命令,现在的情况是:例如我的服务端已经写好了接口add(Entity po ),在我的业务客户端调用这个接口,传递的po中包含一个DateTime属性,服务端接收到这个po后DateTime这个属性的值为空,其他的String\Long...类型的对象都有值!所以我实在看不出你的这个配置文件放到哪儿?

你生成的客户端代码里的package-info类

@javax.xml.bind.annotation.XmlSchema(namespace = "http://webservice.service.crm.***.com/")
package com.***.crm.service.webserviceclient.complaintdetails;


是否有上面那个注解?

我们没有通过哦wsdl文件生成客户端,
4 楼 cwfmaker 2012-12-18  
penwei 写道
cwfmaker 写道
penwei 写道
这段配置放到什么位置地方?

可以放在任何地方,只需要在运行wsdl命令的时候,参数里面添加就行,比如:
-b D:\cxf\jaxb-binding-date.xml

再我的程序中不会用到wsdl命令,现在的情况是:例如我的服务端已经写好了接口add(Entity po ),在我的业务客户端调用这个接口,传递的po中包含一个DateTime属性,服务端接收到这个po后DateTime这个属性的值为空,其他的String\Long...类型的对象都有值!所以我实在看不出你的这个配置文件放到哪儿?

你生成的客户端代码里的package-info类

@javax.xml.bind.annotation.XmlSchema(namespace = "http://webservice.service.crm.***.com/")
package com.***.crm.service.webserviceclient.complaintdetails;


是否有上面那个注解?
3 楼 penwei 2012-12-17  
cwfmaker 写道
penwei 写道
这段配置放到什么位置地方?

可以放在任何地方,只需要在运行wsdl命令的时候,参数里面添加就行,比如:
-b D:\cxf\jaxb-binding-date.xml

再我的程序中不会用到wsdl命令,现在的情况是:例如我的服务端已经写好了接口add(Entity po ),在我的业务客户端调用这个接口,传递的po中包含一个DateTime属性,服务端接收到这个po后DateTime这个属性的值为空,其他的String\Long...类型的对象都有值!所以我实在看不出你的这个配置文件放到哪儿?
2 楼 cwfmaker 2012-12-17  
penwei 写道
这段配置放到什么位置地方?

可以放在任何地方,只需要在运行wsdl命令的时候,参数里面添加就行,比如:
-b D:\cxf\jaxb-binding-date.xml
1 楼 penwei 2012-12-14  
这段配置放到什么位置地方?

相关推荐

Global site tag (gtag.js) - Google Analytics