调用方式一:
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);