锁定老帖子 主题:java间的webservice调用
精华帖 (0) :: 良好帖 (4) :: 新手帖 (12) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-03-17
调用方式一: 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); 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-03-18
LZ请问在axis2服务端中,如何保持session呢,在services.xml在scope="application"到是能能够,但是session我查了配不出来呵呵。
还有一个是,请问能否数据传递用excle文件, txt类型的文件用二进制流是可以的,但是excle如果用二进制就不可以啊,最后的文件是打不开的。 |
|
返回顶楼 | |
发表时间:2012-03-18
有时候只能用第二种方式,用第一种方式不行。
第二种方式好像仅限用Axis暴露的web service。 |
|
返回顶楼 | |
发表时间:2012-03-18
第二种方式List Map接口的axis2不会自动生成的,反正就是有点麻烦转换起来呵呵。
|
|
返回顶楼 | |
发表时间:2012-03-19
java 与java之间一定需要用webService吗?
|
|
返回顶楼 | |
发表时间:2012-03-19
qq123zhz 写道 java 与java之间一定需要用webService吗?
你这个问题太难了。 |
|
返回顶楼 | |
发表时间:2012-03-19
mfkvfn 写道 qq123zhz 写道 java 与java之间一定需要用webService吗?
你这个问题太难了。 java 与java是有很多选择的。。。。。。 |
|
返回顶楼 | |
发表时间: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。 |
|
返回顶楼 | |
发表时间:2012-03-19
luckyzhw 写道 有时候只能用第二种方式,用第一种方式不行。
第二种方式好像仅限用Axis暴露的web service。 恩,应该是这样,另外rpc调用还涉及到一些网络访问上的东西,比如代理 |
|
返回顶楼 | |
发表时间:2012-03-19
endual 写道 第二种方式List Map接口的axis2不会自动生成的,反正就是有点麻烦转换起来呵呵。
这个倒没有试过,用过可以拿来分享一下啊! |
|
返回顶楼 | |