3.5 使用SOAP
CPE WAN管理协议将SOAP 1.1[^12]定义为传输附件A中定义的RPC方法调用和响应的编码语法。
下面描述了RPC方法到SOAP编码的映射关系:
-
编码必须使用标准的SOAP 1.1信封envelope和序列化命名空间namespaces:
- 信封名称空间标识符“
http://schemas.xmlsoap.org/soap/envelope/
" - 序列化命名空间标识符“
http://schemas.xmlsoap.org/soap/encoding/
"
- 信封名称空间标识符“
-
附件A中使用的数据类型直接对应于SOAP 1.1序列化命名空间中定义的数据类型。(通常,附件A中使用的类型是相应SOAP类型的限制子集。)
-
根据SOAP规范[^12],指定为“anySimpleType”类型的元素必须包含一个类型属性,以指示元素的实际类型。
Kevin:“anySimpleType”应该是类似一个自定义的参数类型,这个类型需要有一个类型属性。比如定义一个类型test,可以定义类型属性是string,表示它是基于string类型的。
-
“anySimpleType”以外类型的元素可以包含类型属性,当且仅当该元素是使用附件a中RPC方法XML模式中的命名数据类型定义的。如果包含类型属性,则类型属性的值必须与模式中指定的命名数据类型完全匹配。
-
对于数组参数,定义数组的表中指定的参数名称必须用作整个数组元素的名称。数组成员元素的名称必须是定义该数组的表中指定的数组的数据类型(不包括括号和括号中给出的任何长度限制),并且不能限定为命名空间。例如,名为ParameterList的参数是ParameterValueStruct结构的数组,其编码如下:
<ParameterList soap-enc:arrayType="cwmp:ParameterValueStruct[2]"> <ParameterValueStruct> <name>Parameter1</name> <value xsi:type="someType">1234</value> </ParameterValueStruct> <ParameterValueStruct> <name>Parameter2</name> <value xsi:type="someType">5678</value> </ParameterValueStruct> </ParameterList>
作为第二个示例,GetRPCMethodsResponse中的MethodList数组将被编码为:
<MethodList soap-enc:arrayType="xsd:string[3]"> <string>GetRPCMethods</string> <string>Inform</string> <string>TransferComplete</string> </MethodList>
注意-在上述示例中,使用的XML名称空间前缀只是示例。实际的名称空间前缀值是任意的,仅用于引用名称空间声明。
注意-始终需要为arrayType属性指定XML名称空间前缀。对于CWMP特定类型的数组,它将始终是CWMP名称空间前缀,对于其他类型的数组,它将始终是XML架构名称空间前缀或SOAP编码名称空间前缀。