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, 96);">   1:  </span>Object orderSplit = Thread.currentThread().getContextClassLoader() 
       2:                      .loadClass("com.jd.wmc.service.OrderSplit").newInstance(); 
    <span class="lnum" style="color: rgb(96, 96, 96);">   3:  </span>            Method setCky = orderSplit.getClass().getMethod(<span class="str" style="color: rgb(0, 96, 128);">"setCky2"</span>, 
       4:                      String.class); 
    <span class="lnum" style="color: rgb(96, 96, 96);">   5:  </span>            setCky.invoke(orderSplit, Configuration.getConfiguration() 
       6:                      .getValue("cky2")); 
    <span class="lnum" style="color: rgb(96, 96, 96);">   7:  </span>            Method setStoreId = orderSplit.getClass().getMethod(<span class="str" style="color: rgb(0, 96, 128);">"setStoreId"</span>, 
       8:                      String.class); 
    <span class="lnum" style="color: rgb(96, 96, 96);">   9:  </span>            setStoreId.invoke(orderSplit, Configuration.getConfiguration() 
      10:                      .getValue("storeid")); 
    <span class="lnum" style="color: rgb(96, 96, 96);">  11:  </span>            Method setWareHouse = orderSplit.getClass().getMethod( 
      12:                      "setWareHouse", String.class); 
    <span class="lnum" style="color: rgb(96, 96, 96);">  13:  </span>            setWareHouse.invoke(orderSplit, Configuration.getConfiguration() 
      14:                      .getValue("cky2") 
    <span class="lnum" style="color: rgb(96, 96, 96);">  15:  </span>                    + Configuration.getConfiguration().getValue(<span class="str" style="color: rgb(0, 96, 128);">"storeid"</span>)); 
      16:              Method setCount = orderSplit.getClass().getMethod("setCount", 
    <span class="lnum" style="color: rgb(96, 96, 96);">  17:  </span>                    Integer.<span class="kwrd" style="color: rgb(0, 0, 255);">class</span>); 
      18:              setCount.invoke(orderSplit, count); 

4、调用远程方法:

<span class="lnum" style="color: rgb(96, 96, 96);">   1:  </span>client.invoke(methodName, <span class="kwrd" style="color: rgb(0, 0, 255);">new</span> Object[] { orderSplit });

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值