[置顶] 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;
}
}
[置顶] WebService调用工具(AXIS2)的更多相关文章
- [置顶]
WebService学习总结(1)——WebService相关概念
一.序言 大家或多或少都听过 WebService(Web服务),有一段时间很多计算机期刊.书籍和网站都大肆的提及和宣传WebService技术,其中不乏很多吹嘘和做广告的成 分.但是不得不承认的是W ...
- [置顶]
WebService学习总结(4)——第三方webService服务调用
互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示,下面就以获取天气预报数据和查询国内手机号码归属地为 ...
- [置顶]
WebService学习总结(3)——使用java JDK开发WebService
一.WebService的开发手段 使用Java开发WebService时可以使用以下两种开发手段 1. 使用JDK开发(1.6及以上版本) 2.使用CXF框架开发(工作中) 二.使用JDK开发Web ...
- [置顶] PHP调用move_uploaded_file()提示 failed to open stream: Permission denied(Linxux环境,以Ubuntu12.04为例)
在使用PHP上传文件之后,我们有时候还需要移动到特定的文件夹,这时候就要调用move_uploaded_file()函数,可是会出现如下错误: Warning: move_uploaded_file( ...
- [置顶] android调用第三方库——第四篇——调用多个第三方库
0:前言: 在前面三篇中我们介绍了android调用第三方库的形式,在这一篇中我们介绍调用多个第三方库的Android.mk的写法,由于其他三篇介绍的很详细,这里只给出Android.mk的内容. [ ...
- [置顶]
Java WebService接口生成和调用 图文详解
webservice简介: Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的.专门的第三方软件或硬件, 就可相互交换数据或集成.依据Web Service规范实施的应用之间 ...
- 转--Android中调用webservice的工具类
最近学习WebService,感觉利用这个借口开发网站的Android客户端方便及了,用到一个工具类,这里铭记一下. public static final String WebServiceName ...
- 纯 Java 开发 WebService 调用测试工具(wsCaller.jar)
注:本文来自hacpai.com:Tanken的<纯 Java 开发 WebService 调用测试工具(wsCaller.jar)>的文章 基于 Java 开发的 WebService ...
- 019 [工具软件]窗体置顶 DeskPins
DeskPins:Windows下将任何窗体置顶的工具 官方主页:https://efotinis.neocities.org/deskpins/index.html 官方下载的是一个exe安装包,用 ...
随机推荐
- 【CTSC1999】【解救大兵瑞恩】
44. [CTSC1999] 解救大兵瑞恩 ★★☆ 输入文件:rescue.in 输出文件:rescue.out 简单对照 时间限制:1 s 内存限制:128 MB 问题描写叙述 1944年,特种兵麦 ...
- JavaScrtip之JS最佳实践
一.JavaScript之平稳退化 这边使用一个当用户点击某个页面内某个链接弹出一个新窗口的案例: JavaScript使用window对象的open()方法来创建新的浏览器窗口; window.op ...
- JavaScript之获取和设置元素属性
1.与我前面的随笔获取元素的那些方法不同http://www.cnblogs.com/GreenLeaves/p/5689075.html 获取元素属性的方法getAttribute()不属于docu ...
- Css 外边距折叠(collapsed margin ) 浅析
Css 外边距折叠(collapses margin ) a.先来看看w3c 文档对于外边距折叠的定义: In CSS, the adjoining margins of two or more bo ...
- Java中的compareTo()函数用法
public int compareTo(String anotherString) 按字典顺序比较两个字符串.该比较基于字符串中各个字符的 Unicode 值.将此 String 对象表示的字符序列 ...
- ubuntu10.04 安装NVIDIA GT 420M驱动
安装ubuntu已经好几天了,由于显卡驱动没装,屏幕在600X800下的效果很难看,于是就想办法,查阅资料终于安装成功了,下面将我的安装方法记录下来以供大家参考. 借鉴:ubuntu12.04下安装N ...
- hadoop搭建杂记:Linux下不同linux主机之间文件copy的scp命令
不同的Linux之间copy文件常用有3种方法: 不同的Linux之间copy文件常用有3种方法: ①ftp 就是其中一台Linux安装ftp Server,这样可以另外一台使用ftp的程序来进行文件 ...
- Mysql innodb 后台的7大线程与3大内存
A:一个master 线程(innodb 几乎在这个线程上实现有所有功能) B:一个lock 监控线程 C:一个错误监控线程 D:四个IO线程(insert buffer thread\log thr ...
- 关注SSO
https://wiki.jasig.org/display/CASC/Configuring+the+Jasig+CAS+Client+for+Java+in+the+web.xml 其余的看osc ...
- USB創意讀卡機設計特別獎