WSDL file的一段
< element name='funcA' >
< complexType >
< sequence >
< element name='param1' type='abc:elementA' >
< element name='param2' type='abc:elementB' >
< /sequence >
< /complexType >
< /element >
< complexType name='
elementA' >
< sequence >
< element name='AA' type='xsd:string'>
< /sequence >
< /complexType >
< complexType name=' elementB' >
< sequence >
< element name='abc:elementBB' type='abc:BB' >
< /sequence >
< /complexType >
< complexType name=' elementBB' >
< sequence >
< element name='BBB' type='xsd:int' >
< /sequence >
< /complexType >
如上為一段WSDL中一段function call內容的定義,funcA有一個Complex Type的 input 參數,包著一個 sequence,裡面有兩個elements。此兩個 elements皆為自定義 variable。必須指定其所給的NameSpace (abc)。
所以就會成為以下設定
$params = array('param1'=>new SoapVar(array("AA"=>'test'), SOAP_ENC_OBJECT, null, null, 'elementA', 'abc'), 'param2'=>new SoapVar(array( "elementBB"=>new SoapVar(array("BBB"=>'test'), SOAP_ENC_OBJECT, null, null, 'elementBB', 'abc') ), SOAP_ENC_OBJECT, null, null, 'elementA', 'abc'));
首先,先分開來看,先看怎麼定義第一個element 'param1'
new SoapVar(array("AA"=>'test'), SOAP_ENC_OBJECT, null, null, 'elementA', 'abc')
再來是第二個element 'param2'
new SoapVar(array( "elementBB"=>new SoapVar(array("BBB"=>'test'), SOAP_ENC_OBJECT, null, null, 'elementBB', 'abc') ), SOAP_ENC_OBJECT, null, null, 'elementA', 'abc')
上面黃色部分是BB底下又包了一層complex type 'elementBBB',先不看這部分的話 其實是跟 'param1'是一樣的
最後把上面兩個elements用Array合起來,並給予name index,即完成!
如果有name沒設,或NameSpace沒設,有些server會認不出來而產生error。
沒有留言:
張貼留言