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);

猜你喜欢

转载自zhouan.iteye.com/blog/1456409