在 SOAP(Simple Object Access Protocol)消息中,Body 元素 是 SOAP 消息的 Envelope 的直接子元素之一,它是 必须存在 的元素,用于承载实际的业务数据(即 RPC 调用信息或文档风格的消息负载)。
SOAP 消息的基本结构(SOAP 1.1 和 1.2 都类似):
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<!-- 可选的 Header 块 -->
</soap:Header>
<soap:Body>
<!-- 必须存在的 Body 内容 -->
</soap:Body>
</soap:Envelope>
在 SOAP 1.2 中命名空间略有不同:
<soap12:Envelope xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Header>...</soap12:Header>
<soap12:Body>...</soap12:Body>
</soap12:Envelope>
Body 元素的主要作用和常见内容
- RPC/编码风格(Section 5 encoding,通常被称为“SOAP RPC”)
Body 中包含方法调用和参数:
<soap:Body>
<m:GetStockPrice xmlns:m="https://example.com/stock">
<m:StockName>IBM</m:StockName>
</m:GetStockPrice>
</soap:Body>
响应示例:
<soap:Body>
<m:GetStockPriceResponse xmlns:m="https://example.com/stock">
<m:Price>83.8</m:Price>
</m:GetStockPriceResponse>
</soap:Body>
- 文档/字面量风格(Document/Literal)
Body 直接包含业务文档(通常是一个或多个符合 WSDL 中 message 定义的 XML 元素):
<soap:Body>
<PurchaseOrder xmlns="https://example.com/po">
<Item>PlayStation 5</Item>
<Quantity>1</Quantity>
</PurchaseOrder>
</soap:Body>
- SOAP Fault(错误信息)
当发生错误时,Body 中会包含一个<soap:Fault>(SOAP 1.1)或<soap12:Fault>(SOAP 1.2)元素:
SOAP 1.1 示例:
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>服务器内部错误</faultstring>
<detail>
<app:Error xmlns:app="http://example.com/app">数据库连接失败</app:Error>
</detail>
</soap:Fault>
</soap:Body>
Body 元素的规则总结
| 项目 | 要求 |
|---|---|
| 是否必须 | 必须(Envelope 的子元素中唯一必须的) |
| 出现次数 | 只能出现一次 |
| 子元素 | 任意业务元素或一个 Fault 元素 |
| 命名空间 | Body 本身不需要额外命名空间,但其子元素通常需要 |
| 是否可加密/签名 | 可以(WS-Security 等规范常对 Body 进行签名或加密) |
简单记法:SOAP Body 就是“真正要传递的有效载荷(payload)所在的地方”,无论是方法调用、业务文档,还是错误信息,都放在这里。Header 放的是元数据和路由、认证等附加信息,Body 放的是核心业务数据。
如果你需要具体的 SOAP Body 示例(比如某个 WSDL 生成的请求/响应),可以告诉我具体的操作名称或 WSDL,我可以帮你写出来。