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调用过程
- 客户端到UDDI寻找Service目录
- 客户端获得WSDL文件
- 客户端按照WSDL文件的约束和规范创建SOAP客户端
- 客户端通过SOAP访问service
