目录

soap协议

soap协议是什么

SOAP(Simple Object Access Protocal)简单对象访问协议 是一种轻量级的、简单的、基于XML的协议,它被设计成在WEB上交换结构化的和固有的信息。

SOAP是基于XML的简易协议,可使应用程序在HTTP之上进行信息交换

SOAP已经逐渐被RESTFUL给替换掉了。

soap结构

一条soap消息就是一个普通的xml文档,包含:

  • 必需的 Envelope 元素,可把此 XML 文档标识为一条 SOAP 消息
  • 可选的 Header 元素,包含头部信息
  • 必需的 Body 元素,包含所有的调用和响应信息
  • 可选的 Fault 元素,提供有关在处理此消息所发生错误的信息

soap的基本结构:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Header>
  ...
  ...
</soap:Header>

<soap:Body>
  ...
  ...
  <soap:Fault>
    ...
    ...
  </soap:Fault>
</soap:Body>

</soap:Envelope>

演示

演示通过soap进行调用

请求

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
POST /cxf
Content-Type: text/xml; charset=utf-8
Accept: */*
Cache-Control: no-cache
Host: localhost:9999

<soap:Envelope
        xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

    <soap:Body>
        <ns2:sayHello xmlns:ns2="http://demo.webservice.eh.com/">
            <arg0>徐达</arg0>
        </ns2:sayHello>
    </soap:Body>

</soap:Envelope>

响应

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
HTTP/1.1 200 OK
Date: Mon, 09 Nov 2020 09:43:49 GMT
Content-Type: text/xml;charset=utf-8
Content-Length: 227
Server: Jetty(9.4.31.v20200723)

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <ns2:sayHelloResponse xmlns:ns2="http://demo.webservice.eh.com/">
            <return>hello, 徐达</return>
        </ns2:sayHelloResponse>
    </soap:Body>
</soap:Envelope>

小结

soap是用于网络服务的应用层协议。一次web service的调用,不是方法的调用,而是一次soap消息(xml格式规范的文档片段)的交换(输入/输出)

webservice调用过程

  1. 客户端到UDDI寻找Service目录
  2. 客户端获得WSDL文件
  3. 客户端按照WSDL文件的约束和规范创建SOAP客户端
  4. 客户端通过SOAP访问service

http://img.cana.space/picStore/20201109181215.png