За последние 24 часа нас посетили 16810 программистов и 1702 робота. Сейчас ищут 958 программистов ...

работа c SOAP в PHP

Тема в разделе "Прочие вопросы по PHP", создана пользователем pveselov, 6 май 2014.

  1. pveselov

    pveselov Активный пользователь

    С нами с:
    26 сен 2012
    Сообщения:
    3
    Симпатии:
    0
    Здравствуйте!

    Вопрос нестандартный сразу скажу, т.к. в после недели поисков в гугле и яндексе была найдена лишь одна статься и то, не раскрывающая полностью решение моей проблемы:
    http://stackoverflow.com/questions/13266890/classmap-option ... soapclient

    Если по-русски, то суть следующая:
    1) Есть SOAP-сервер, есть WSDL, есть клиент
    2) Клиент стучится на сервер запрашивая метод, который возвращает, допустим такой объект:

    Код (Text):
    1.  
    2. class Peoples {
    3.  /**
    4.    * Массив объектов People
    5.    */
    6.  public $list;
    7. }
    8.  
    9. ...
    10. class People {
    11.  public $Name;
    12.  public $Phone;
    13.  public $Info;
    14. }
    В структуру класса вдаваться не надо (он был придуман только что в качестве примера).

    Т.е. примерно такой или любой другой объект будет возвращать метод.

    Но SOAP клиент получая такой объект переиначивает его и возвращает как

    Код (Text):
    1.  
    2. stdClass Object ( // а должно быть Peoples Object
    3.  [list] => Array (
    4.     [0] => stdClass Object (   // а должно быть People Object
    5.          [Name] => 'Какое-то имя'
    6.          [Phone] => '888-888-888'
    7.          [Info] => 'Какая-то информация'
    8.        )
    9.     [1] => ..
    10.    )
    11. )
    Я использую Zend Framework 1.11.11, в частности библиотеки Zend_Soap_Autodiscover для генерации WSDL,
    Zend_Soap_Server в качестве сервера и Zend_Soap_Client - в качестве клиента.

    Прочитал, что есть некий ClassMap (protected $_classmap, пару методов getClassMap(), setClassMap()) в классе Zend_Soap_Server, но они не используются.

    Может у кого-то получилось побороть SOAP чтобы он возвращал именно те объекты которые к нему приходят а не сборище stdClass-ов.

    Заранее спасибо!
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Не всё ли равно?
     
  3. Ke1eth

    Ke1eth Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    1.073
    Симпатии:
    11
    Адрес:
    заблудилса
    Начнем с того, что SOAP возвращает xml, а не экземпляры объектов, это раз.
    xml демаршалиться в экземпляры безошибочно только в строго типизированых языках и в случае если может подчитать внешние классы, чтобы понять что вообще там такое, во всех остальных случаях неизбежны оговорки и костыли, поэтому даже и не пытайся переложить свою головную боль на php.
    "парси xml блеа".
    Или пиши клиента на том, что может демаршалиться автоматом и точно в нужную структуру.