SOAP 语法

SOAP(Simple Object Access Protocol,简单对象访问协议)是一种基于 XML 的协议,用于在分布式系统中交换结构化信息,通常用于 Web Services。它最初由 Microsoft 在 1998 年提出,后来发展为 W3C 标准(最新正式版本是 SOAP 1.2,2003 年发布)。

SOAP 消息的完整语法结构是严格的 XML 文档,必须符合以下规范:

1. SOAP 消息基本结构(SOAP Envelope)

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope 
    xmlns:soap="http://www.w3.org/2003/05/soap-envelope"   <!-- SOAP 1.2 -->
    <!-- 或 xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" SOAP 1.1 -->
    soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">  <!-- 可选 -->

    <!-- 可选的 Header -->
    <soap:Header>
        <!-- Header blocks -->
    </soap:Header>

    <!-- 必须的 Body -->
    <soap:Body>
        <!-- 实际的业务数据或 Fault -->
    </soap:Body>
</soap:Envelope>

2. 主要组成部分详解

部分是否必须说明
Envelope必须根元素,标识这是 SOAP 消息
Header可选存放元数据(如认证、安全、事务等)
Body必须存放实际的调用信息或错误信息
Fault在出错时放在 Body 中,用于描述错误

3. 典型 SOAP 请求示例(SOAP 1.2)

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope
    xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
    soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

    <soap:Header>
        <!-- 示例:添加 WS-Security 认证头 -->
        <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
            <wsse:UsernameToken>
                <wsse:Username>alice</wsse:Username>
                <wsse:Password>secret123</wsse:Password>
            </wsse:UsernameToken>
        </wsse:Security>
    </soap:Header>

    <soap:Body>
        <m:GetStockPrice xmlns:m="https://example.com/stock">
            <m:StockName>ALIBABA</m:StockName>
        </m:GetStockPrice>
    </soap:Body>
</soap:Envelope>

4. SOAP 响应示例

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope
    xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
    soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

    <soap:Body>
        <m:GetStockPriceResponse xmlns:m="https://example.com/stock">
            <m:Price>128.50</m:Price>
        </m:GetStockPriceResponse>
    </soap:Body>
</soap:Envelope>

5. SOAP Fault(错误)示例(SOAP 1.2)

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
    <soap:Body>
        <soap:Fault>
            <soap:Code>
                <soap:Value>soap:Sender</soap:Value>   <!-- 或 Receiver -->
            </soap:Code>
            <soap:Reason>
                <soap:Text xml:lang="en">Invalid stock name</soap:Text>
            </soap:Reason>
            <soap:Detail>
                <m:Error xmlns:m="https://example.com/stock">
                    <m:Code>1001</m:Code>
                    <m:Message>Stock symbol not found</m:Message>
                </m:Error>
            </soap:Detail>
        </soap:Fault>
    </soap:Body>
</soap:Envelope>

6. SOAP 1.1 与 SOAP 1.2 的主要差异

项目SOAP 1.1SOAP 1.2
Envelope 命名空间http://schemas.xmlsoap.org/soap/envelope/http://www.w3.org/2003/05/soap-envelope
encodingStyle 属性常用仍支持,但不推荐使用
Fault 结构较简单(faultcode、faultstring 等)更规范(Code、Reason、Node、Role、Detail)
HTTP 绑定简单更严格,支持更多协议

7. 常用工具生成 SOAP 消息

  • Java: Apache CXF, Axis2, JAX-WS
  • .NET: WCF
  • Python: zeep, pysimplesoap
  • Node.js: soap, easy-soap

虽然现在 REST/JSON 更流行,但在银行、电信、政府等企业级系统里,SOAP 仍然被广泛使用(特别是配合 WS-Security、WS-Addressing 等标准时安全性更高)。

如果你有具体的 WSDL 或想生成某个接口的 SOAP 示例,可以把 WSDL 发给我,我可以帮你写出准确的请求/响应模板。

文章已创建 2965

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部