来自wsdl的动态Web服务客户端

时间:2014-10-14 07:08:41

标签: java web-services wsdl cxf

我的一个系统需要调用基于SOAP的Web服务。截至目前,对于每个新的Web服务,我从提供的WSDL文件生成Java存根,并使用新的Web服务使用者代码重新部署Web应用程序。有没有一种很好的方法可以动态创建一个可以从提供的WSDL文件中调用方法的Web服务客户端?我所期待的只是

  • 将WSDL文件放在Web应用程序可以访问的位置
  • 使用具有wsdl文件名的关键字以及webservice方法所需的其他参数调用Servlet。

Apache CXF可以为此提供帮助吗?我在一篇文章中读到,在运行时生成wsdl2java并在一段时间内加载类可以耗尽pemgen内存空间。

1 个答案:

答案 0 :(得分: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的源代码分发中有许多其他示例。