Список вопросов
Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Как при помощи Zend_Soap_Client выполнить запрос при известной WSDL-схеме?
Просмотров: 333
 
Ответов: 2
Имеется объект Zend_Soap_Client. Подключаюсь и выполняю запрос так:
$client = new Zend_Soap_Client($uri,<br>
array(<br>
'login' => $login,<br>
'password' => $password,<br>
'soapVersion' => SOAP_1_1)<br>
);<br><br>
/*<br>
* GetIdentityInfo<br>
*<br>
*/<br><br>
$params = array('Profile' => $profile);<br>
$result = $client->GetIdentityInfo($params);<br>
print($result->GetIdentityInfoResult->any);<br>
print($client->getLastRequest());<br><br>
/*<br>
* SubmitXml<br>
* <br>
*/<br><br>
$request = simplexml_load_file('./request.xml');<br>
$filter = simplexml_load_file('./filter.xml');<br><br>
$request = xml2array($request);<br>
$filter = xml2array($filter);<br><br>
$params = array(<br>
'Profile' => $profile,<br>
'Request' => $request,<br>
'Filter' => $filter);<br><br>
$result1 = $client->SubmitXml($params);<br><br>
function xml2array($xml) {<br>
$arXML=array();<br>
$arXML['name']=trim($xml->getName());<br>
$arXML['value']=trim((string)$xml);<br>
$t=array();<br>
foreach($xml->attributes() as $name => $value) $t[$name]=trim($value);<br>
$arXML['attr']=$t;<br>
$t=array();<br>
foreach($xml->children() as $name => $xmlchild) $t[$name]=xml2array($xmlchild);<br>
$arXML['children']=$t;<br>
return($arXML);<br>
}<br><br>
где $request, $filter — XML-данные (сначала как объект, затем преобразуется в массив).
Имеется WSDL-схема. Существенный кусок привожу ниже:
<s:element name="SubmitXml"><br>
<s:complexType><br>
<s:sequence><br>
<s:element maxOccurs="1" minOccurs="0" name="Profile" type="s:string"/><br>
<s:element maxOccurs="1" minOccurs="0" name="Request"><br>
<s:complexType><br>
<s:sequence><br>
<s:any/><br>
</s:sequence><br>
</s:complexType><br>
</s:element><br>
<s:element maxOccurs="1" minOccurs="0" name="Filter"><br>
<s:complexType><br>
<s:sequence><br>
<s:any/><br>
</s:sequence><br>
</s:complexType><br>
</s:element><br>
</s:sequence><br>
</s:complexType><br>
</s:element>
В первом запросе GetIdentityInfo параметр Profile проходит отлично, получаю нормальный ответ.
Во втором запросе SubmitXml параметр Profile также кушает нормально, ибо это type=«s:string». Ругается на Request и Filter ибо это XML в виде массива (или объекта?).
Отвечает:
PHP Fatal error: SOAP-ERROR: Encoding: object hasn't 'any' property in /usr/share/php/libzend-framework-php/Zend/Soap/Client.php on line 1113<br/>
PHP Fatal error: Uncaught SoapFault exception: [Client] SOAP-ERROR: Encoding: object hasn't 'any' property in /usr/share/php/libzend-framework-php/Zend/Soap/Client.php:1113
Вопрос: как быть с параметрами Request и Filter? Как мне их корректно передать? Если объект, то в каком виде?
Я вот вижу этот «any» и близок к разгадке…
В каком виде отдать параметр, соответствующий этому описанию?
<s:complexType><br>
<s:sequence><br>
<s:any/><br>
</s:sequence><br>
</s:complexType>
$client = new Zend_Soap_Client($uri,<br>
array(<br>
'login' => $login,<br>
'password' => $password,<br>
'soapVersion' => SOAP_1_1)<br>
);<br><br>
/*<br>
* GetIdentityInfo<br>
*<br>
*/<br><br>
$params = array('Profile' => $profile);<br>
$result = $client->GetIdentityInfo($params);<br>
print($result->GetIdentityInfoResult->any);<br>
print($client->getLastRequest());<br><br>
/*<br>
* SubmitXml<br>
* <br>
*/<br><br>
$request = simplexml_load_file('./request.xml');<br>
$filter = simplexml_load_file('./filter.xml');<br><br>
$request = xml2array($request);<br>
$filter = xml2array($filter);<br><br>
$params = array(<br>
'Profile' => $profile,<br>
'Request' => $request,<br>
'Filter' => $filter);<br><br>
$result1 = $client->SubmitXml($params);<br><br>
function xml2array($xml) {<br>
$arXML=array();<br>
$arXML['name']=trim($xml->getName());<br>
$arXML['value']=trim((string)$xml);<br>
$t=array();<br>
foreach($xml->attributes() as $name => $value) $t[$name]=trim($value);<br>
$arXML['attr']=$t;<br>
$t=array();<br>
foreach($xml->children() as $name => $xmlchild) $t[$name]=xml2array($xmlchild);<br>
$arXML['children']=$t;<br>
return($arXML);<br>
}<br><br><s:element name="SubmitXml"><br>
<s:complexType><br>
<s:sequence><br>
<s:element maxOccurs="1" minOccurs="0" name="Profile" type="s:string"/><br>
<s:element maxOccurs="1" minOccurs="0" name="Request"><br>
<s:complexType><br>
<s:sequence><br>
<s:any/><br>
</s:sequence><br>
</s:complexType><br>
</s:element><br>
<s:element maxOccurs="1" minOccurs="0" name="Filter"><br>
<s:complexType><br>
<s:sequence><br>
<s:any/><br>
</s:sequence><br>
</s:complexType><br>
</s:element><br>
</s:sequence><br>
</s:complexType><br>
</s:element>PHP Fatal error: SOAP-ERROR: Encoding: object hasn't 'any' property in /usr/share/php/libzend-framework-php/Zend/Soap/Client.php on line 1113<br/>
PHP Fatal error: Uncaught SoapFault exception: [Client] SOAP-ERROR: Encoding: object hasn't 'any' property in /usr/share/php/libzend-framework-php/Zend/Soap/Client.php:1113<s:complexType><br>
<s:sequence><br>
<s:any/><br>
</s:sequence><br>
</s:complexType>
Правильный ответ, если кто-то искал похожее:
$client = new Zend_Soap_Client($uri,
array(
'login' => $login,
'password' => $password,
'soapVersion' => SOAP_1_1)
);
$r_xml = simplexml_load_file('./request.xml');
$f_xml = simplexml_load_file('./filter.xml');
$p_obj = new SoapVar($profile, XSD_STRING);
$r_obj = new SoapVar($r_xml, SOAP_ENC_OBJECT);
$f_obj = new SoapVar($f_xml, SOAP_ENC_OBJECT);
$params = array(
'Profile' => $p_obj,
'Request' => $r_obj,
'Filter' => $f_obj
);
$result = $client->SubmitXml($params);
Содержимое request.xml и filter.xml должно быть обрамлено в и тэги соответственно.
$client = new Zend_Soap_Client($uri,
array(
'login' => $login,
'password' => $password,
'soapVersion' => SOAP_1_1)
);
$r_xml = simplexml_load_file('./request.xml');
$f_xml = simplexml_load_file('./filter.xml');
$p_obj = new SoapVar($profile, XSD_STRING);
$r_obj = new SoapVar($r_xml, SOAP_ENC_OBJECT);
$f_obj = new SoapVar($f_xml, SOAP_ENC_OBJECT);
$params = array(
'Profile' => $p_obj,
'Request' => $r_obj,
'Filter' => $f_obj
);
$result = $client->SubmitXml($params);
Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться