创建soapweb服务客户端的方法



我最近开始开发一些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协议是共同点。尊重协议和服务合同,服务可以与任何客户合作。

最新更新