WebService调用工具(AXIS2)(一)

2014-11-24 09:01:44 · 作者: · 浏览: 0
package com.metarnet.util;  
  
import java.lang.reflect.InvocationHandler;  
import java.lang.reflect.Method;  
import java.lang.reflect.ParameterizedType;  
import java.lang.reflect.Proxy;  
import java.lang.reflect.Type;  
import java.util.Arrays;  
import java.util.List;  
import javax.xml.namespace.QName;  
import org.apache.axis2.AxisFault;  
import org.apache.axis2.addressing.EndpointReference;  
import org.apache.axis2.client.Options;  
import org.apache.axis2.rpc.client.RPCServiceClient;  
  
/** 
 * WebService调用工具 
 * 用法: 
 *  1:(推荐)WebServiceUtil.create(发布地址,命名空间,接口类); 
 *      创建的对象可以直接当成本地接口调用,例如 
 *           WebService service = WebServiceUtil.create("http://localhost:8080/test/cxf/webservice", 
 *              "http://www.yanfan.com/",WebService.class); 
 *           List list = service.selectNeList(); 
 * 2:创建Util方式 WebServiceUtil util = new WebServiceUtil( 
                "http://127.0.0.1:8090/metarnetos_v3/cxf/webservice", 
                "http://www.metarnet.com/"); 
                CeicsNeinfo[] tasks = util.callback("selectNeList",CeicsNeinfo[].class); 
 *  
 * @author YANFAN 
 */  
public class WebServiceUtil implements InvocationHandler{  
      
    private RPCServiceClient serviceClient;  
    private String nameSpace;//命名空间  
    private int timeout = 30;//超时时间,单位:秒  
      
    public WebServiceUtil(String endpoint,String nameSpace) throws AxisFault{  
        serviceClient = new RPCServiceClient();  
        Options options = serviceClient.getOptions();  
        EndpointReference targetEPR = new EndpointReference(endpoint);  
        options.setTo(targetEPR);  
        options.setTimeOutInMilliSeconds(timeout*1000);  
        this.nameSpace = nameSpace;  
    }  
    /** 
     * 调用 method 方法 
     * 有返回值,返回值类型 clazz 
     */  
    public  T callback(String method,Class clazz) throws AxisFault  
    {  
        return callback(method,new Object[]{},clazz);  
    }  
    /** 
     * 调用 method 方法,传递一个参数param 
     * 有返回值,返回值类型 clazz 
     */  
    public 
T callback(String method,Object param,Class clazz) throws AxisFault { return callback(method,new Object[]{param}, clazz); } /** * 调用 method 方法,传递多个参数param * 有返回值,返回值类型 clazz */ @SuppressWarnings("unchecked") public T callback(String method,Object[] param,Class clazz) throws AxisFault { QName opName = new QName(nameSpace,method); Class< >[] returnTypes = new Class[]{clazz}; T[] results = (T[]) serviceClient.invokeBlocking(opName,param,returnTypes); return results[0]; } /** * 调用 method 方法 * 无返回值 */ public void call(String method) throws AxisFault { QName opName = new QName(nameSpace,method); serviceClient.invokeBlocking(opName,new Object[]{}); } /** * 调用 method 方法,传递多个参数param * 无返回值 */ public void call(String method,Object[] param) throws AxisFault { QName opName = new QName(nameSpace,method); serviceClient.invokeBlocking(opName,param); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Class< > retType = method.getReturnType(); if(args == null){args=new Object[]{};} if(retType!=null) { if(retType.isAssignableFrom(List.class)) { Type type = method.getGenericReturnType(); if (type instanceof ParameterizedType) { retType = (Class< >)((ParameterizedType) type).getActualTypeArguments()[0]; retType = java.lang.reflect.Array.newInstance(retType,2).getClass(); } return Arrays.asList((Object[]) callback(method.getName(),args,retType