zoukankan      html  css  js  c++  java
  • [置顶] WebService调用工具(AXIS2)

    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<CeicsNeinfo> 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> T callback(String method,Class<T> clazz) throws AxisFault
    	{
    		return callback(method,new Object[]{},clazz);
    	}
    	/**
    	 * 调用 method 方法,传递一个参数param
    	 * 有返回值,返回值类型 clazz
    	 */
    	public <T> T callback(String method,Object param,Class<T> clazz) throws AxisFault
    	{
    		return callback(method,new Object[]{param}, clazz);
    	}
    	/**
    	 * 调用 method 方法,传递多个参数param
    	 * 有返回值,返回值类型 clazz
    	 */
    	@SuppressWarnings("unchecked")
    	public <T> T callback(String method,Object[] param,Class<T> 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));
    			}else
    			{
    				return callback(method.getName(),args,retType);
    			}
    		}else
    		{
    			call(method.getName(),args);
    			return null;
    		}
    	}
    	/**
    	 * 创建代理对象
    	 * @throws IllegalArgumentException 
    	 * @throws AxisFault 
    	 */
    	@SuppressWarnings("unchecked")
    	public static <T> T create(String endpoint,String nameSpace,Class<T> clazz) throws AxisFault, IllegalArgumentException
    	{
    		ClassLoader loader = clazz.getClassLoader();
    		Class<?>[] proxy = new Class[]{clazz};
    		T t =(T) Proxy.newProxyInstance(loader,proxy,new WebServiceUtil(endpoint,nameSpace));
    		return t;
    	}
    }



  • 相关阅读:
    WeTagger不封号的微信客服工具(一)——预告
    WeSender不封号的微信群发软件(六)——升级:第六版已经完成
    .net core系列(一)
    .net core系列整理收藏
    Ansible Windows模块学习
    Windows配置Ansible Host
    Alembic管理Sqlite3数据库版本
    高端VIPRION实物图
    Calendar 类 set() 方法使用要点
    Java 日期处理工具类
  • 原文地址:https://www.cnblogs.com/riasky/p/3371992.html
Copyright © 2011-2022 走看看