论坛首页 Java企业应用论坛

java间的webservice调用

浏览 10471 次
精华帖 (0) :: 良好帖 (4) :: 新手帖 (12) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-03-17  
    最近一直在做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类,通过该类调用服务端
			TreasuryServiceServiceLocator tssl = new TreasuryServiceServiceLocator();
			//通过locator类生成服务端			
			TreasuryService service = tssl.getTreasuryService(new URL(url));//http://10.142.59.53:9081/tjmccProcessWeb/services/BiService
			//通过service直接调用服务端方法
			HashMap returnMap = service.requestOpAuth(reqMap);

   发表时间:2012-03-18  
LZ请问在axis2服务端中,如何保持session呢,在services.xml在scope="application"到是能能够,但是session我查了配不出来呵呵。

还有一个是,请问能否数据传递用excle文件,
txt类型的文件用二进制流是可以的,但是excle如果用二进制就不可以啊,最后的文件是打不开的。
0 请登录后投票
   发表时间:2012-03-18  
有时候只能用第二种方式,用第一种方式不行。

第二种方式好像仅限用Axis暴露的web service。
0 请登录后投票
   发表时间:2012-03-18  
第二种方式List Map接口的axis2不会自动生成的,反正就是有点麻烦转换起来呵呵。
0 请登录后投票
   发表时间:2012-03-19  
java 与java之间一定需要用webService吗?
0 请登录后投票
   发表时间:2012-03-19  
qq123zhz 写道
java 与java之间一定需要用webService吗?

你这个问题太难了。
0 请登录后投票
   发表时间:2012-03-19  
mfkvfn 写道
qq123zhz 写道
java 与java之间一定需要用webService吗?

你这个问题太难了。

java 与java是有很多选择的。。。。。。
0 请登录后投票
   发表时间:2012-03-19   最后修改:2012-03-19
endual 写道
LZ请问在axis2服务端中,如何保持session呢,在services.xml在scope="application"到是能能够,但是session我查了配不出来呵呵。

还有一个是,请问能否数据传递用excle文件,
txt类型的文件用二进制流是可以的,但是excle如果用二进制就不可以啊,最后的文件是打不开的。


axis2 没用过,但axis中有两中方式管理session,不过也都属于“曲线救国”,一种是借助HTTP和HTTP cookies,另一种是用SOAP headers;excel可以考虑使用xml传递,毕竟excel的本质还是xml。
0 请登录后投票
   发表时间:2012-03-19  
luckyzhw 写道
有时候只能用第二种方式,用第一种方式不行。

第二种方式好像仅限用Axis暴露的web service。

恩,应该是这样,另外rpc调用还涉及到一些网络访问上的东西,比如代理
0 请登录后投票
   发表时间:2012-03-19  
endual 写道
第二种方式List Map接口的axis2不会自动生成的,反正就是有点麻烦转换起来呵呵。

这个倒没有试过,用过可以拿来分享一下啊!
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics