要调用 SOAP Web 服务,您必须向其发送格式正确且尊重服务合同的 SOAP 消息。就是这样!
所以基本上要创建一个客户端,您只需要构建该 XML 消息,例如,给定 this service,您可以执行以下操作(我假设 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 that to the service,注意为其提供所需的 HTTP 标头(如 SOAPAction 等)。
2) 手动构建 XML 文档以发送到服务,例如 using SAAJ。
3) 使用 service WSDL 并将其从某些框架/库(JAX-WS、Axis2、CXF 等)提供给工具(wsimport、wsdl2java 等)以获取将调用抽象为一个简单的方法调用的客户端,该方法调用采用 Java 对象并返回 Java 对象。
4) 您能想到的任何其他方法来创建 SOAP 消息并将其作为 POST 请求发送(我看到您标记了问题 JAXB,这也可以......)。
如今调用 SOAP Web 服务非常普遍,当几乎每种语言都有工具可以从 WSDL 生成客户端时,没有人会费心花时间构建客户端。这是样板代码。
人们只是想要一个客户,把它推到项目中,使用它,然后继续在他们的应用程序中做更重要的事情。这就是为什么大多数人选择第 3 点)。
我看到为 SOAP Web 服务开发客户端的方式独立于 Web 服务实现
是的,您可以使用一种编程语言/技术堆栈提供服务,而使用另一种编程语言/技术堆栈提供客户端。 SOAP 协议是共同点。尊重协议和服务合同,服务可以与任何客户端合作。