[置顶] 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安装包,用 ...
随机推荐
- Boost::Thread使用示例 - CG-Animation - 博客频道 - CSDN.NET
Boost::Thread使用示例 - CG-Animation - 博客频道 - CSDN.NET Boost::Thread使用示例 分类: C/C++ 2011-07-06 14:48 5926 ...
- 从ACM中删除一个已经创建的Library
从ACM中删除一个已经创建的Library,无法通过界面操作,须要手工从DB中删除.须要删除的表记录有: RECENTUPDATE 找到字段Name等于该libraryName的那条记录删除掉 del ...
- jquery $.post 返回json数据
$(function () { $("#prompt").hide(); $("#searchIpt").keyup(function () { var key ...
- Css元素布局定位
<!DOCTYPE HTML> <html lang="zh-cn"> <head> <meta charset="UTF-8& ...
- vs2013 中HTML页 无法在设计窗口中查看的解决
VS2013不支持HTML文件的解决办法: 1.将html文件重命名为aspx即可.不需要创建项目,直接拖进vs即可. 2.打开VS菜单->工具->选项->文本编辑器->文件扩 ...
- 选择器,$("A+B") 和$("A~B") 的理解
在我发表这个理解之前,我有看过博客园 永恒浪子 大神的 JQuery选择器大全(http://www.cnblogs.com/hulang/archive/2011/01/12/1933771.htm ...
- Visusl Studio常用快捷键
Visusl Studio常用快捷键 快捷键 功能 ctrl+k,c 注释选中行 ctrl+k,u 取消对选中行的注释 CTRL + SHIFT + B:生成解决方案 CTRL + ...
- WPF中常用控件的属性
Source = new BitmapImage( new Uri( WangCaiConfig.GetCurrentDirectory() + imgStr, UriKind.RelativeOrA ...
- MySQL5.7.11(ZIP)安装
1.环境变量-系统变量: Path添加:;D:\worksoftware\mysql-5.7.11\bin 2.配置更改:my-default.ini,注意是ANSI编码 添加 #(mysql所在目录 ...
- MyEclipse 免安装版制作
前言:以MyEclipse6.0为例,安装目录,例如如d:\java\MyEclipse6.0 (1)新建MyEclipse 6.0.bat文件 新建位置:当前MyEclipse根目录 文件内容: s ...