soap-ws 获取wsdl中所有方法 (二)
2016-07-01 11:02
302 查看
2. 获取portType节点的所有operation
获取portType节点的operation比较麻烦,soap-ws没有提供直接可以使用的接口。不过可以参考soap-ws的源码写一个方法。
soap-ws提供了一些example。参考例子:
soap-ws\soap-examples\quickstart\src\test\java\org\reficio\ws\quickstart\SoapClientExamplesTest.java
在IntelliJ IDEA中debug,eclipse中看起来不舒服。
可以看到在wsdl的私有成员soapFacade中有portType节点,binding节点信息。这些信息最终是定义在messageBuilder的私有变量definition中的,按照这个路径查看源代码。查看SoapMessageBuilder的构造方法。
public SoapMessageBuilder(URL wsdlUrl) throws WSDLException { WSDLReader reader = new WSDLReaderImpl(); reader.setFeature("javax.wsdl.verbose", false); this.definition = reader.readWSDL(wsdlUrl.toString()); this.definitionWrapper = new SchemaDefinitionWrapper(definition, wsdlUrl.toString()); }
根据上面的代码进行改造。完整的代码如下:
private static List<Operation> getPortTypeOperations(String wsdlUrl) { List<Operation> operationList = new ArrayList(); try { WSDLReader reader = new WSDLReaderImpl(); reader.setFeature("javax.wsdl.verbose", false); Definition definition = reader.readWSDL(wsdlUrl.toString()); Map<String, PortTypeImpl> defMap = definition.getAllPortTypes(); Collection<PortTypeImpl> collection = defMap.values(); for (PortTypeImpl portType : collection) { operationList.addAll(portType.getOperations()); } } catch (WSDLException e) { System.out.println("get wsdl operation fail."); e.printStackTrace(); } return operationList; }
获取operation的名字
public static List<String> getOperationByUrl(String wsdlUrl) { List<String> resultList = new ArrayList<>(); List<Operation> operationList = getPortTypeOperations(wsdlUrl); for (Operation operation : operationList) { resultList.add(operation.getName()); } return resultList; }
上面的方法也可以获取Binding节点的operation。代码如下
public static List<String> getAllBindingOperation(String wsdlUrl) { List<BindingOperation> operationList = new ArrayList(); List<String> nameList = new ArrayList(); try { WSDLReader reader = new WSDLReaderImpl(); reader.setFeature("javax.wsdl.verbose", false); Definition definition = reader.readWSDL(wsdlUrl.toString()); Map<String, BindingImpl> defMap = definition.getAllBindings(); Collection<BindingImpl> collection = defMap.values(); for (BindingImpl binding : collection) { operationList.addAll(binding.getBindingOperations()); } for (BindingOperation operation:operationList) { nameList.add(operation.getName()); } } catch (WSDLException e) { System.out.println("get wsdl operation fail."); e.printStackTrace(); } return nameList; }
相关文章推荐
- php的webservice的wsdl的XML无法显示问题的解决方法
- 在PHP中利用wsdl创建标准webservice的实现代码
- Aixs2开发Web service操作数据库demo
- gSoap使用实例 - 发送WSDL文件
- 服务注册和服务仓库在SOA中的角色
- WSDL 1.1 中文规范
- eclipse根据wsdl文件生成webservice客户端
- 【异常】OS X-EI-目录权限
- 手机归属地免费查询接口,api,wsdl,webservice
- ip归属地免费接口,api,wsdl,webservice
- 免费省份证信息归属地查询接口,ASPI,WDL,webservice
- EndPoints (端点)
- NSOperation
- 超簡單! WSDL + Eclipse 筆記
- CXF学习笔记
- .NET根据wsdl文件解析成调用的类文件,客户端方法
- IE Operation aborted
- 使用CXF发布服务接口
- 利用Myeclipse自动生成webService客户端代码
- 通过 wsdl 文件 创建webservice