Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> PHP + SOAP запрос, xml аттрибуты и значения элементов 
:(
    Опции темы
glebskvortsov
Дата 14.1.2010, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 14.1.2010

Репутация: нет
Всего: нет



Проблема вот какая:
пишется клиент на php + soap для работы с веб-сервисом.

В конечном итоге запрос должен представлять из себя следующее:

Код

<HeadlineMLRequest>
     <TimeOut>600</TimeOut>
     <MaxCount>10</MaxCount>
     <Filter>
          <MetaDataConstraint class="language">
               <Value>RU</Value>
          </MetaDataConstraint>
     </Filter>
</HeadlineMLRequest>

Хоть это и не особо важно, суть запроса - получение заголовков новостей. По данному запросу должны выводиться 10 новостей на русском языке. Об этом нам говорят ключевые парметры TimeOut, аттрибут class и элемент Value. 
В общем случае запрос корректно отрабатывает и без элемента Filter, в этом случае новости поступают на всех языках, содержащихся в базе.

Если отбросить код на подключение к сервису и отправку заголовков, то доступ к функции получения заголовков на основе WSDL выглядит следующим образом:

Код
$response2 = $client2->RetrieveHeadlineML_1(array('HeadlineMLRequest'=>array('TimeOut'=>600, 'MaxCount'=>10, 'Filter'=>array('MetaDataConstraint'=>array('class'=>'language', 'Value'=>'ru'))))));


В режиме трассировки тело запроса генерится следующим образом:

Код

<env:Body>
     <ns1:RetrieveHeadlineML_Request_1>
          <ns1:HeadlineMLRequest>
               <ns1:TimeOut>600</ns1:TimeOut>
               <ns1:MaxCount>10</ns1:MaxCount>
               <ns1:Filter>
                    <ns2:MetaDataConstraint class="language">
                         <ns2:Value/>
                    </ns2:MetaDataConstraint>
               </ns1:Filter>
           </ns1:HeadlineMLRequest>
     </ns1:RetrieveHeadlineML_Request_1>
</env:Body>


Из ответа видно, что элемент Value по какой-то причине генерится пустым и поэтому ответ приходит пустым. Есть какие-нибудь идеи на этот счет?

Спасибо.

Это сообщение отредактировал(а) glebskvortsov - 15.1.2010, 10:31
PM MAIL   Вверх
Simpliest
Дата 14.1.2010, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: нет
Всего: 3



Какой режим работы? WSDL или нет?

Попробуй обернуть Value в array() еще раз.
Или воспользуйся SoapParam/SoapVar


--------------------
user posted image
PM   Вверх
glebskvortsov
Дата 15.1.2010, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 14.1.2010

Репутация: нет
Всего: нет



Да, работает в режиме WSDL. Пробовал оборачивать еще в массивы, эффект такой же, Value пустым отправляется.
Также пробовал использовать SoapVar и Param, в этом случае вообще ругается на отсутствие Value.

Но, к примеру, с другой похожей функцией из сервиса отрабатывает корректно.

Такой запрос:
Код

<ItemRequest Scope="All">
     <Fields />
     <RequestKey Name="EUR=" Service="" NameType="RIC">
</ItemRequest>


и PHP код: 
Код

$response3 = $client3->RetrieveItem_1(array('ItemRequest'=>array('Scope'=>'All', 'Fields'=>'a', 'RequestKey'=>array('Name'=>'EUR=', 'NameType'=>'RIC'))))


отрабатывает корректно и правильно расставляет из массива значения соответствующих атрибутов и элементов:

Код

<env:Body>
     <ns2:RetrieveItem_Request_1>
          <ns2:ItemRequest Scope="All">
               <ns1:Fields>a</ns1:Fields>
               <ns1:RequestKey Name="EUR=" NameType="RIC"/>
          </ns2:ItemRequest>
     </ns2:RetrieveItem_Request_1>
</env:Body>


Принцип в обоих запросах одинаков: в одмн массив должны заворачиваться текущий элемент, его атрибуты и вложенные элементы с атрибутами следующего уровня. Во втором запрос генерится правильно, а в первом нет. Неясно короче.
PM MAIL   Вверх
Simpliest
Дата 15.1.2010, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: нет
Всего: 3



Посмотри WSDL возможно он как-то весело сформирован.

Вот такой запрос какой xml формирует?
Код

array('HeadlineMLRequest'=>array('TimeOut'=>600, 'MaxCount'=>10, 'Filter'=>array('MetaDataConstraint'=>array('class'=>'language', 'Value'=>array('value' =>'ru')))))));


Добавлено через 38 секунд
P.S. иногда помогает перейти в режим non-WSDL

Добавлено через 3 минуты и 33 секунды
Цитата(glebskvortsov @  15.1.2010,  09:08 Найти цитируемый пост)
Принцип в обоих запросах одинаков: в одмн массив должны заворачиваться текущий элемент, его атрибуты и вложенные элементы с атрибутами следующего уровня. 

В этом-то и фокус, что они не одинаковы. Во втором запросе у тебя нет нод уровнем ниже ноды с атрибутами. А именно из-за этих атрибутов и возникают проблемы.


--------------------
user posted image
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: X технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0644 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.