微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CXF 动态客户端--复杂对象

大家都知道,CXF提供了两种创建客户端的方式:一种是使用cxf提供的wsdl2java命令生成客户端,另一种就是动态创建客户端。关于第一种方式,就是直接将远程提供的类信息在本地生成,原理很简单。关键是动态调用并且方法参数为复杂对象时,这种方式是通过动态加载(加载到内存,并且只在当前线程中有效)需要使用到的远程的类信息,来完成客户端的创建以及远程方法调用,使用方式如下:

1、 首先创建动态客户端工厂:

<span class="lnum" style="color: rgb(96,96,96);">   1:  </span>JaxWsDynamicclientFactory dynamicclient = JaxWsDynamicclientFactory.newInstance();

2、创建客户端对象:


3、创建远程方法需要使用的对象参数,并为对象属性赋值:

    <span class="lnum" style="color: rgb(96,96);">   1:  </span>Object orderSplit = Thread.currentThread().getContextClassLoader() 
       2:                      .loadClass("com.jd.wmc.service.OrderSplit").newInstance(); 
    getmethod(<span class="str" style="color: rgb(0,128);">"setCky2"</span>,
       4:                      String.class); 
    figuration.getConfiguration() 
       6:                      .getValue("cky2")); 
       8:                      String.  10:                      .getValue("storeid")); 
    getmethod( 
      12:                      "setWareHouse",String.  14:                      .getValue("cky2") 
    figuration.getConfiguration().getValue(<span class="str" style="color: rgb(0,128);">"storeid"</span>)); 
      16:              Method setCount = orderSplit.getClass().getmethod("setCount",
     
      
      18:              setCount.invoke(orderSplit,count); 

4、调用远程方法

注意:客户端的创建一定要保证和创建参数对象时在同一个线程,否则将抛出找不到类的异常。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐