Intereting Posts

SoapVar / Param и вложенные повторяющиеся элементы в SOAP

Моя цель – создать мыльный запрос, который может содержать такие элементы:

<flexFields> <names> <names>IAG Group</names> <names>Ticket #</names> </names> </flexFields> 

Тем не менее, каждая комбинация soapvar и soapparam, которую я смог придумать, делает невозможным дублирование вложенных тегов имен. Я могу получить 1 дополнительный тег:

 $flexFields = array( 'names'=> new SoapVar( new SoapVar(array('names'=>'IAG Group'),SOAP_ENC_OBJECT), SOAP_ENC_OBJECT) ); 

Это генерирует:

 <flexFields xsi:type="ns2:SoapNamedValues"> <names xsi:type="names"> <names xsi:type="xsd:string">IAG Group</names> </names> </flexFields> 

Но любая попытка, которую я делаю для повторения тега имен, либо генерирует страшный элемент BOGUS, если я использую SOAP_ENC_OBJECT, либо обертывает каждый элемент в другом элементе элемента, если я использую SOAP_ENC_ARRAY, что также нежелательно.

Я знаю, что могу просто вручную создать то, что хочу, и загрузить его с помощью XSD_ANYXML, но это приближается к линии поражения цели использования библиотеки SOAP.

Может ли кто-нибудь представить пример того, как идеально сбалансировать mashapar / soapparam + массив, чтобы заставить это работать на самом деле? Или я пытаюсь сделать невозможное с помощью библиотеки SOAP PHP?

Я столкнулся с проблемой тегов BOGUS. Мое решение включало использование ArrayObject вместо примитивов массива. Все объекты затем преобразуются в объекты SoapVar. Кажется, что мыльная библиотека действительно хочет иметь дело с объектами повсюду. У меня есть более полная запись здесь:

http://www.fischco.org/blog/2011/3/26/php-soapserver-objects-arrays-and-encoding.html

У меня есть аналогичная проблема, попробуйте следующее:

 $Names=array(); $Names[]=new SoapVar("IAG Group",XSD_STRING,null,null,'names'); $Names[]=new SoapVar("Ticket #",XSD_STRING,null,null,'names'); $BigNames=new SoapVar($Names,SOAP_ENC_OBJECT,null,null,'Names'); 

Это создает и массив объектов SoapVar ($ Names) и помещает их в объект BigNames, создавая такой вывод:

 <Names> <names>IAG Group</names> <names>Ticket #</names> </Names> 

Затем вы можете создать другой объект SoapVar для FlexFields, но по какой-то причине вы не можете разместить объект SoapVar непосредственно в другой, его нужно сохранить в массиве …

Я хочу сделать это:

 $FlexFields=new SoapVar($BigNames,SOAP_ENC_OBJECT,null,null,'FlexFields'); 

Это работает:

 $FF=array($BigNames); $FlexFields=new SoapVar($FF,SOAP_ENC_OBJECT,null,null,'FlexFields');