【V芯:yd7527】背景
前面我们介绍过利用javassist动态生成webservice,这种方式可以使得我们系统通过页面配置动态发布webservice服务,做到0代码开发发布北向接口。进一步思考,我们如何0代码开发调用第三方webservice服务呢?
wsdl解析
首先必然是理解第三方webservice的接口描述,也就是解析wsdl文件。wsdl文件是webservice服务接口描述文档,一个wsdl文件可以包含多个接口,一个接口可以包含多个方法。
实际上,wsdl解析是十分困难的工作,网上也没有找到有效的解决办法,最终通过阅读SoapUI源码,找到了完美的解析方法。
代码
1 /** 2 * WsdlInfo.java Create on 2013-5-4 下午12:56:14 3 * 4 * 类功能说明: wsdl解析入口 5 * 6 * Copyright: Copyright(c) 2013 7 * Company: COSHAHO 8 * @Version 1.0 9 * @Author 何科序 10 */ 11 public class WsdlInfo 12 { 13 private String wsdlName; 14 15 private List<InterfaceInfo> interfaces; 16 17 /** 18 * coshaho 19 * @param path wsdl地址 20 * @throws Exception 21 */ 22 public WsdlInfo(String path) throws Exception 23 { 24 WsdlProject project = new WsdlProject(); 25 WsdlInterface[] wsdlInterfaces = WsdlImporter.importWsdl( project, path ); 26 this.wsdlName = path; 27 if(null != wsdlInterfaces) 28 { 29 List<InterfaceInfo> interfaces = new ArrayList<InterfaceInfo>(); 30 for(WsdlInterface wsdlInterface : wsdlInterfaces) 31 { 32 InterfaceInfo interfaceInfo = new InterfaceInfo(wsdlInterface); 33 interfaces.add(interfaceInfo); 34 } 35 this.interfaces = interfaces; 36 } 37 } 38 39 public String getWsdlName() { 40 return wsdlName; 41 } 42 43 public void setWsdlName(String wsdlName) { 44 this.wsdlName = wsdlName; 45 } 46 47 public List<InterfaceInfo> getInterfaces() { 48 return interfaces; 49 } 50 51 public void setInterfaces(List<InterfaceInfo> interfaces) { 52 this.interfaces = interfaces; 53 } 54 }