我最近开始开发一些SOAP和REST web服务。在SOAPWeb服务中,我发现必须首先开发一个客户端,这样才能使用该服务。
我想知道为web服务开发客户端的不同方法。
我看到为SOAP web服务开发客户端的方法独立于web服务实现(CXF、AXIS、JAXB)。例如,创建客户端的一种方法是使用wsimport
命令行,该命令行通过将WSDL作为参数来生成客户端代码。
其他方式呢?
要调用SOAP web服务,必须向它发送一条格式正确的SOAP消息,该消息尊重服务的约定。就是这样!
因此,基本上,为了创建一个客户端,您只需要构建XML消息,例如,给定此服务,您可以执行以下操作(我假设Java,因为您标记了这样的问题,但它适用于任何编程语言):
1)使用字符串串联(这是最基本的):
int number1 = 1;
int number2 = 2;
String myMessage = "<?xml version="1.0" encoding="utf-8"?>"
+ "<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">"
+ " <soap:Body>"
+ " <Add xmlns="http://tempuri.org/">"
+ " <intA>" + number1 + "</intA>"
+ " <intB>" + number2 + "</intB>"
+ " </Add>"
+ " </soap:Body>"
+ "</soap:Envelope>";
然后对服务进行(基本)POST,注意为其提供所需的HTTP标头(如SOAPAction
等)。
2)手动构建一个XML文档以发送到服务,例如使用SAAJ。
3)使用服务WSDL,并将其提供给某个框架/库(JAX-WS、Axis2、CXF等)中的工具(wsimport、wsdl2java等),以获取一个客户端,该客户端将调用抽象为一个简单的方法调用,该方法调用获取Java对象并返回Java对象。
4)您可以想到的任何其他方法来创建SOAP消息并将其作为POST请求发送(我看到您标记了问题JAXB,这也可以…)
如今,调用SOAPWeb服务非常常见,以至于当几乎每种语言都有工具可以从WSDL生成客户端时,没有人愿意花时间构建客户端。这是样板代码。
人们只需要一个客户端,把它推到项目中,使用它,然后在应用程序中做更重要的事情。这就是为什么大多数人支持第三点。
我认为为SOAP web服务开发客户端的方法独立于web服务实现
是的,您可以在编程语言/技术堆栈中使用服务,在另一个堆栈中使用客户端。SOAP协议是共同点。尊重协议和服务合同,服务可以与任何客户合作。