java间的webservice调用

最近一直在做webservice的调用,刚开始双方的接口一致在变,我的调用也跟着变了N多次,但发现变来变去调用也就那么几行代码就搞定,现总结如下:
调用方式一:
RPC调用,调用比较简单,注意一下设置输入输出参数就ok。代码如下:

Service service = new Service();
try{
Call call = (Call)service.createCall();
//设置url
call.setTargetEndpointAddress(new URL(url));
//注册服务端命名空间
// QName qn = new QName("urn:server","beanName");
//注册返回值arrayList中的javabean,这里使用map代替,如果使用该bean需要服务端在wsdd文件中做相关配置
// call.registerTypeMapping(bean.class, qn,new BeanSerializerFactory(bean.class,qn), new BeanDeserializerFactory(bean.class,qn));
//设置请求服务及服务方法,具体名称需要根据wsdl来填
call.setOperation(new QName("server"), "method");
//设置返回值类型,这里返回的list
call.setReturnClass(ArrayList.class);
//设置输入参数,data1、data2需要根据wsdl中的名称来填,如果输入参数为map或list 中间参数为XMLType.XSD_HEXBINARY
call.addParameter("date1", XMLType.XSD_STRING, ParameterMode.IN);
call.addParameter("date2", XMLType.XSD_STRING, ParameterMode.IN);
Calendar cal = Calendar.getInstance();
String now = df.format(cal.getTime());
cal.add(Calendar.HOUR_OF_DAY, -1);
String pre = df.format(cal.getTime());
Object[] param = new Object[]{pre,now};
//直接调用
ArrayList returnMap = (ArrayList)call.invoke(param);
System.out.println("======" + returnMap.size());
for (Object object : returnMap) {
HashMap map = (HashMap)object;
Set<Map.Entry<String,String>> me = map.entrySet();
Iterator<Entry<String,String>> it = me.iterator();
while(it.hasNext()){
Entry<String,String> en = it.next();
System.out.println("key:" + en.getKey() + "==value:" + en.getValue());
}
}
}catch(Exception e){
e.printStackTrace();
}

详细开发配置见附件。
调用方式二:stub调用,这种调用方式需要借助axis提供的工具根据wsdl生成客户端代码(eclipse已集成该工具),生成客户端后将生成的代码拷入工程中再进行调用,调用方式很简单,见代码:

//工具会生成*serviceLocator类,通过该类调用服务端
ServiceLocator tssl = new ServiceLocator();
//通过locator类生成服务端
TService service = tssl.getTService(new URL(url));
//通过service直接调用服务端方法
HashMap returnMap = service.reqOpt(reqMap);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值