在 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 服务方法并且我想在客户端程序中使用它,我都需要重新生成代理类。
所以我找到了CXFDynamicClientFactory
,这种技术避免了使用代理类:
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 并且不生成“静态”代理类?也许有不同的图书馆?谢谢!