У меня проблемы с пониманием того, как передавать пользовательские типы в вызовах PHP SOAP. Может ли кто-нибудь дать мне подсказку (или ссылку на руководство), пожалуйста?
Пример:
В моем файле WSDL я определяю тип:
<types>
<schema targetNamespace="http://example.com/CustData"
xmlns="http://www.w3.org/2000/10/XMLSchema">
<element name="personalInformation">
<complexType>
<all>
<element name="name" type="xsd:string"/>
<element name="title" type="xsd:string"/>
<element name="lang" type="xsd:string"/>
</all>
</complexType>
</element>
</schema>
Я определяю ответное сообщение службы следующим образом:
<message name='getCustDataResponse'>
<part name='Result' type='xsd:personalInformation'/>
<part name='Result1' type='xsd:string'/>
</message>
Отсутствует часть - как инициализировать ответ на стороне сервера SOAP?
Я пытался написать:
$arrRes['Result']['name'] = 'xxx';
$arrRes['Result']['title'] = 'yyy';
$arrRes['Result']['lang'] = 'zzz';
$arrRes['Result']['hehehehe1'] = 'test1';
$arrRes['Result']['hehehehe2'] = 'test2';
$arrRes['Result']['hehehehe3'] = 'test3';
$arrRes['Result']['hehehehe4'] = 'test4';
$arrRes['Result1'] = 'result1';
$arrRes['blablabla'] = 'hahaha';
return $arrRes;
Клиент получает ответ обратно, и когда я его var_dump, он показывает arrRes:
array(2) { ["Result"]=> array(7) { ["name"]=> string(3) "xxx" ["title"]=> string(3) "yyy" ["lang"]=> string(3) "zzz" ["hehehehe1"]=> string(5) "test1" ["hehehehe2"]=> string(5) "test2" ["hehehehe3"]=> string(5) "test3" ["hehehehe4"]=> string(5) "test4" } ["Result1"]=> string(7) "result1" }
Я ожидал получить ошибку, поскольку инициализированный массив не соответствует определенному ответному сообщению.
Так что я предполагаю, что тип, который я определил в wsdl, вообще не используется - поэтому это должна быть ошибка либо в wsdl, либо в коде клиента или сервера.
Заранее спасибо за совет !!
Nikola