什么是SOAP协议 SOAP消息的XML结构详解

2次阅读

SOAP 消息由 Envelope(必需)、Header(可选)、Body(必需)、Fault(可选)四个 xml 元素构成,其中 Envelope 须含标准 命名空间 且禁用 DTD 与处理指令,Header 须为 Envelope 首子元素并支持 mustUnderstand 属性,Body 须含业务载荷且不可混入 Header 语义内容。

什么是 SOAP 协议 SOAP 消息的 XML 结构详解

SOAP 协议是一种基于 XML 的通信协议,专为应用程序之间跨网络交换结构化信息而设计。它不依赖 操作系统 编程语言 ,靠严格的 XML 语法和约定实现互操作性。理解它的关键,就是看懂 SOAP 消息的 XML 结构——它不是随意写的 XML,而是有强制层级、命名空间和语义规则的标准化 封装

SOAP 消息的四大核心 XML 元素

每条合法的 SOAP 消息都由四个可能存在的 XML 元素组成,其中两个是必需的,两个是可选的:

  • Envelope(信封):根元素,唯一标识这是一条 SOAP 消息。没有它,就不是 SOAP。
  • Header(头部):可选,必须作为 Envelope 的第一个子元素。常用于携带认证令牌、事务 ID、路由 指令等元数据。
  • Body(主体):必需,包含实际要调用的方法名、参数,或服务返回的结果数据。
  • Fault(错误):可选,只能出现在 Body 内,且最多一个。当处理失败时,用它结构化地描述错误类型、代码和详情。

Envelope 元素的硬性要求

Envelope 不只是个标签,它承载着协议识别和解析依据:

  • 命名空间必须准确:
    SOAP 1.1 用 http://schemas.xmlsoap.org/soap/envelope/
    SOAP 1.2 用 http://www.w3.org/2003/05/soap-envelope
    错一个字符,接收方就会拒绝整条消息。
  • encodingStyle 属性是可选的,但一旦出现,就必须指向标准 编码 命名空间,如 http://www.w3.org/2001/12/soap-encoding
  • 不能包含 DTD 声明或 xml 处理 指令(比如),否则直接视为非法。

Header 与 Body 的实际写法要点

Header 和 Body 本身不带业务逻辑,但它们的位置和内容组织影响通信成败:

  • Header 若存在,必须紧接在 Envelope 开始标签之后,顺序不能颠倒。
  • Body 必须存在,且至少包含一个子元素——通常是方法调用(如<getuser></getuser>)或响应(如<getuserresponse></getuserresponse>)。
  • Header 里的子元素可以带 mustUnderstand="1" 属性,表示接收方必须理解并处理该字段,否则需返回 Fault。
  • Body 中不允许混入 Header 语义的内容,所有上下文信息(如用户身份)应提前放入 Header,保持 Body 专注业务载荷。

一个最小可用的 SOAP 请求示例

以下是一个符合 SOAP 1.2 规范、无 Header、仅含简单调用的合法消息:

<?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">   <soap:Body>     <GetStockPrice xmlns="http://example.org/stock">       <Symbol>IBM</Symbol>     </GetStockPrice>   </soap:Body> </soap:Envelope>

注意:没有 Header、没有 Fault、命名空间正确、无 DTD、无处理指令——它就能被标准 SOAP 引擎识别并转发。

站长
版权声明:本站原创文章,由 站长 2025-12-24发表,共计1469字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
1a44ec70fbfb7ca70432d56d3e5ef742
text=ZqhQzanResources