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响应者。SOAPfaultcode
元素的值必须是非限定的,或者使用SOAP信封名称空间前缀限定。错误响应的接收者不需要使用这个元素的值,并且可以完全忽略SOAPfaultcode
元素。
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的故障的可读描述。
- 包含错误参数的完整路径名的
- 包含附件A中定义的一个数字故障代码的
- SOAP
下面是包含故障响应的示例信封:
<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”只是一个示例,不一定是本规范定义的名称空间。