TR-069第一期第六修正版-13

3.5 使用SOAP-2

  • 关于编码RPC方法的SOAP规范(见[^12]第7节),对于附件A中定义的每个方法,方法调用中列出的每个参数代表一个[in]参数,而方法响应中列出的每个参数代表一个[out]参数。没有使用[in/out]参数。
  • 使用标准SOAP命名约定定义的RPC方法,通过在方法名称中添加“response”后缀来命名与给定方法对应的响应消息。

Kevin: 比如Reboot 和 Rebootresponse 是一对请求和方法。

  • SOAP信封必须只包含一个Body元素。

  • CPE必须能够接受总信封大小至少为32千字节(32768字节)的SOAP请求,而不会导致“Resources Exceeded(资源超出)”响应。

  • CPE必须能够生成任何所需长度的SOAP响应,而不会导致“Resources Exceeded”响应,即没有最大CPE SOAP响应长度限制。

  • ACS必须能够接受总信封大小至少为32千字节(32768字节)的SOAP请求,而不会导致“Resources Exceeded”响应。

  • ACS必须能够生成任何所需长度的SOAP响应,而不会导致“资源超出”响应,即没有最大ACS SOAP响应长度限制。

  • 故障响应必须使用以下约定的SOAP故障元素:

    • SOAP faultcode元素必须根据特定故障指示故障源,即“Client”或“Server”。在这种用法中,“Client”代表SOAP请求的发起人,“Server”代表SOAP响应者。SOAP faultcode元素的值必须是非限定的,或者使用SOAP信封名称空间前缀限定。错误响应的接收者不需要使用这个元素的值,并且可以完全忽略SOAP faultcode元素。

    Kevin:个人理解是这个标签不需要前面的限定。接收方不需要处理这个元素的值。注意这里faultcode是小的字母f。后面detail中Fault下的FaultCode是大写的F。

    • SOAP faultstring子元素必须包含字符串“CWMP fault”。
    • SOAP detail信息元素必须包含Fault结构。附件A中的RPC方法XML模式正式定义了这种结构。该结构包含以下元素:
      • 包含附件A中定义的一个数字故障代码的FaultCode元素。
      • 一个FaultString元素,包含故障的可读描述。
      • SetParameterValuesFault元素,仅在对SetParameterValues方法的错误响应中使用,它包含一个或多个结构的列表,指示与出错的每个参数相关的特定故障。
        该结构包含以下元素:
        • 包含错误参数的完整路径名的ParameterName元素。
        • 一个FaultCode元素,包含附件A中定义的一个数字故障代码,指示与特定错误参数相关的故障。
        • 一个FaultString元素,包含错误中特定Parameter的故障的可读描述。

下面是包含故障响应的示例信封:

<soap:Envelope
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:cwmp="urn:dslforum-org:cwmp-1-0">
    <soap:Header>
        <cwmp:ID soap:mustUnderstand="1">1234</cwmp:ID>
    </soap:Header>
    <soap:Body>
        <soap:Fault>
            <faultcode>Client</faultcode>
            <faultstring>CWMP fault</faultstring>
            <detail>
                <cwmp:Fault>
                    <FaultCode>9000</FaultCode>
                    <FaultString>Upload method not supported</FaultString>
                </cwmp:Fault>
            </detail>
        </soap:Fault>
    </soap:Body>
</soap:Envelope>

下面是一个示例信封,其中包含SetParameterValues方法调用的故障响应:

<soap:Envelope
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:cwmp="urn:dslforum-org:cwmp-1-0">
    <soap:Header>
        <cwmp:ID soap:mustUnderstand="1">1234</cwmp:ID>
    </soap:Header>
    <soap:Body>
        <soap:Fault>
            <faultcode>Client</faultcode>
            <faultstring>CWMP fault</faultstring>
            <detail>
                <cwmp:Fault>
                    <FaultCode>9003</FaultCode>
                    <FaultString>Invalid arguments</FaultString>
                    <SetParameterValuesFault>
                        <ParameterName>
                        Device.Time.NTPServer1
                        </ParameterName>
                        <FaultCode>9007</FaultCode>
                        <FaultString>Invalid IP Address</FaultString>
                    </SetParameterValuesFault>
                    <SetParameterValuesFault>
                        <ParameterName>
                        Device.Time.LocalTimeZoneName
                        </ParameterName>
                        <FaultCode>9007</FaultCode>
                        <FaultString>String too long</FaultString>
                    </SetParameterValuesFault>
                </cwmp:Fault>
            </detail>
        </soap:Fault>
    </soap:Body>
</soap:Envelope>

Kevin:注意这里是SetParameterValues的报错,每个参数可以有一个单独的报错。

注意-在上面的示例中,使用的XML名称空间前缀只是示例。实际的名称空间前缀值是任意的,仅用于引用名称空间声明。

注意-在上述示例中,CWMP名称空间标识符“urn:dslforum org:CWMP-1-0”只是一个示例,不一定是本规范定义的名称空间。

posted @ 2022-11-14 11:18  Kevin4X  阅读(60)  评论(0编辑  收藏  举报