【问题标题】:Dynamic web service client from wsdl来自 wsdl 的动态 Web 服务客户端
【发布时间】:2014-10-14 07:08:40
【问题描述】:
我的一个系统需要调用基于 SOAP 的网络服务。到目前为止,对于每个新的 Web 服务,我都会从提供的 WSDL 文件生成 Java 存根,并使用新的 Web 服务使用者代码重新部署 Web 应用程序。有没有一种好的方法来动态创建一个可以从提供的 WSDL 文件调用方法的 web 服务客户端?我所期待的只是
- 将 WSDL 文件放在 Web 应用程序可以访问的位置
- 使用具有 wsdl 文件名的关键字和 webservice 方法所需的其他参数调用 Servlet。
Apache CXF 可以在这方面提供帮助吗?我在一篇文章中读到,在运行时生成 wsdl2java 并加载类,一段时间后,会耗尽 pemgen 内存空间。
【问题讨论】:
标签:
java
web-services
wsdl
cxf
【解决方案1】:
你应该看这里:http://cxf.apache.org/docs/dynamic-clients.html
就是这样。
这里是一个例子:
ClientImpl client = (ClientImpl)doc.getClientFromWsdl("http://myurl:8080/DataCentersWS?wsdl");
String operationName = "getVirtualisationManagerUuid";
BindingOperationInfo op = doc.getOperation(client, operationName);
List<MessagePartInfo> messagesParts = op.getInput().getMessageParts();
Object[] params = new Object[messagesParts.size()];
/* feed yours params here (this feeding was heavy in my code */
Object[] res = client.invoke(op, params);
cxf的源码分布还有很多其他的例子。