最近公司接个项目,要跟9个或者更多个系统对接,需要写webservice接口,但是这么多一个个写的话很麻烦,而且还是不定个数的对接,所以思来想去,还是写个可配置的吧,步骤如下:
1、给出统一的接口标准,统一使用cxf 的标准wsdl 格式的webservice
2、给出统一接口标准后,所有系统调用方法,所传的参数,返回值格式均一致,这样的话就可以开始表写配置文件(WebService.properties),配置对应的wsdl url路径
#下面为wsdl url路径,前面的URL1、2、3均随意,不重复即可,这里为了统一,统一使用该格式
URL1=http\://localhost\:8899/hello?wsdl URL2=http\://localhost\:8898/hello?wsdl URL3=http\://localhost\:8897/hello?wsdl
#标记URL的个数,用来确认新配置的URL的key为URL(COUNT+1) COUNT=3
3、解析WebService.properties配置文件,获取url
public static Map<String,String> urlMap = new HashMap<String,String>(); static{ InputStream ins = Test.class.getResourceAsStream("util.properties"); // 生成properties对象 Properties p = new Properties(); try { p.load(ins); Enumeration enu=p.propertyNames(); while(enu.hasMoreElements()){ String key = (String)enu.nextElement(); urlMap.put(key, p.getProperty(key)); System.out.println(key); } } catch (Exception e) { e.printStackTrace(); } }
这里由于key是不重复的,所以直接使用map
4、上面已经解析完全部的url,下面开始循环调用
public static void get(){ List<String> list = new ArrayList<String>(); for (String key : urlMap.keySet()) { if(!"COUNT".equals(key)) list.add(urlMap.get(key)); } System.err.println(list.size()); String url = ""; for(int i = 0 ; i < list.size(); i++){ url = list.get(i); System.err.println(url); Client client = getClient(url); String method = "queryMenuList";//webservice的方法名 Object[] result = null; Object[] par = {"张三","1"}; try { result = client.invoke(method, par);//调用webservice } catch (Exception e) { e.printStackTrace(); } System.err.println(result[0].toString()); } }
5、至此我们的webservice循环调用结束,下面开始做可配置的webservice
int count = Integer.parseInt(Test.urlMap.get("COUNT"));//获取url数 count++; String url = "http://localhost:8893/hello?wsdl"; String urlKey = "URL"+count; Properties p = new Properties(); //将新的webservice URL写入配置文件,以便重启后仍然可以使用 try { InputStream io = WriteURL.class.getResourceAsStream("util.properties"); p.load(io); FileOutputStream f1 = null; if(Test.getValue(url)){ p.setProperty(urlKey,url); p.setProperty("COUNT",count+""); } io.close(); OutputStream outputFile = new FileOutputStream("src\\main\\java\\com\\webService\\util.properties"); p.store(outputFile,"更新新的配置"); outputFile.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }
//将新的webservice URL写入map,以便在不重新启动程序的情况下使用 Test.urlMap.put(urlKey, url);
6、至此可配置的webservice实现完成
