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

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

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

   1:  JaxWsDynamicClientFactory dynamicClient = JaxWsDynamicClientFactory.newInstance();

2、创建客户端对象:


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

   1:  Object orderSplit = Thread.currentThread().getContextClassLoader() 
   2:                      .loadClass("com.jd.wmc.service.OrderSplit").newInstance(); 
   3:              Method setCky = orderSplit.getClass().getMethod("setCky2", 
   4:                      String.class); 
   5:              setCky.invoke(orderSplit, Configuration.getConfiguration() 
   6:                      .getValue("cky2")); 
   7:              Method setStoreId = orderSplit.getClass().getMethod("setStoreId", 
   8:                      String.class); 
   9:              setStoreId.invoke(orderSplit, Configuration.getConfiguration() 
  10:                      .getValue("storeid")); 
  11:              Method setWareHouse = orderSplit.getClass().getMethod( 
  12:                      "setWareHouse", String.class); 
  13:              setWareHouse.invoke(orderSplit, Configuration.getConfiguration() 
  14:                      .getValue("cky2") 
  15:                      + Configuration.getConfiguration().getValue("storeid")); 
  16:              Method setCount = orderSplit.getClass().getMethod("setCount", 
  17:                      Integer.class); 
  18:              setCount.invoke(orderSplit, count); 

4、调用远程方法:

   1:  client.invoke(methodName, new Object[] { orderSplit });

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

你可能感兴趣的:(object,java,c)