from suds.clIEnt import ClIEntclIEnt = ClIEnt('http://www.example.org/MyService/wsdl/myservice.wsdl') #create clIEntresult = clIEnt.service.myWSMethod("Bubi",15) #invoke methodprint result #print the result returned by the WS method
我想用Java达到这么简单的用法.
使用Axis或CXF,您必须创建一个Web服务客户端,即一个包复制所有Web服务方法的包,以便我们可以像使用普通方法一样调用它们.我们称之为代理类;通常它们是由wsdl2java工具生成的.
实用且用户友好.但是每当我添加/修改Web服务方法并且我想在客户端程序中使用它时,我需要重新生成代理类.
所以我找到了CXF DynamicclIEntFactory,这种技术避免了使用代理类:
import org.apache.cxf.endpoint.ClIEnt;import org.apache.cxf.endpoint.dynamic.DynamicclIEntFactory;//...//create clIEntDynamicclIEntFactory dcf = DynamicclIEntFactory.newInstance();ClIEnt clIEnt = dcf.createClIEnt("http://www.example.org/MyService/wsdl/myservice.wsdl");//invoke methodObject[] res = clIEnt.invoke("myWSMethod","Bubi");//print the resultSystem.out.println("Response:\n" + res[0]);
但不幸的是,它创建并编译代理类运行时,因此在生产机器上需要JDK.我必须避免这种情况,或者至少我不能依赖它.
我的问题:
是否有另一种方法可以在Java中以动态方式调用Web服务的任何方法,而无需在运行时使用JDK并且不生成“静态”代理类?也许有一个不同的图书馆?谢谢!
解决方法 我知道这是一个非常古老的问题,但如果你仍然感兴趣,你可以使用soap-ws github项目: https://github.com/reficio/soap-ws这里有一个非常简单的示例用法:
Wsdl wsdl = Wsdl.parse("http://www.webservicex.net/CurrencyConvertor.asmx?WSDL");SoapBuilder builder = wsdl.binding() .localPart("CurrencyConvertorSoap") .find();SoapOperation operation = builder.operation() .soapAction("http://www.webserviceX.NET/ConversionRate") .find();Request request = builder.buildinputMessage(operation)SoapClIEnt clIEnt = SoapClIEnt.builder() .endpointUrl("http://www.webservicex.net/CurrencyConvertor.asmx") .build();String response = clIEnt.post(request);
你可以看到它非常简单.
总结以上是内存溢出为你收集整理的cxf – 动态调用Web服务的简便方法(无需JDK或代理类)全部内容,希望文章能够帮你解决cxf – 动态调用Web服务的简便方法(无需JDK或代理类)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)