gpt4 book ai didi

cxf - 动态调用 Web 服务的简便方法(无需 JDK 或代理类)

转载 作者:搜寻专家 更新时间:2023-11-01 03:41:53 25 4
gpt4 key购买 nike

在 Python 中,我可以轻松地使用 Web 服务:

from suds.client import Client
client = Client('http://www.example.org/MyService/wsdl/myservice.wsdl') #create client
result = client.service.myWSMethod("Bubi", 15) #invoke method
print 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 client
DynamicClientFactory dcf = DynamicClientFactory.newInstance();
Client client = dcf.createClient("http://www.example.org/MyService/wsdl/myservice.wsdl");
//invoke method
Object[] res = client.invoke("myWSMethod", "Bubi");
//print the result
System.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 或代理类),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12459914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com