PHP fóra: Builder | JakPsatWeb | Webtrh
Nejste přihlášen(a)
používám nativní extenzi PHP SOAP, PHP 5.2.6
prvek, který potřebuji serializovat je ve schématu služby definován s parametrem maxOccurs=„unbounded“, může se tedy vyskytovat několikrát za sebou. toho se mi bohužel nedaří docílit
v ukázce jde o element „ccc“
očekávaný výstup je takový:
<aaa>
<bbb>bbb</bbb>
<ccc>
<a>1</a>
<b>2</b>
</ccc>
<ccc>
<a>3</a>
<b>4</b>
</ccc>
<ddd>ddd</ddd>
</aaa>
zjednodušená část struktury, kterou serializuji je zde:
'aaa' => new SoapVar(array(
'bbb' => 'bbb',
'ccc' => array(
new SoapVar(array('a' => 1, 'b' => 2), SOAP_ENC_OBJECT),
new SoapVar(array('a' => 3, 'b' => 4), SOAP_ENC_OBJECT),
),
'ddd' => 'ddd',
), SOAP_ENC_OBJECT);
(ve skutečnosti jde krom pole ccc o objekty, ale to není podstatné. na výsledku to nic nemění)
skutečný výstup je takový:
<aaa>
<bbb>bbb</bbb>
<ccc>
<SOAP-ENC:Struct>
<a>1</a>
<b>2</b>
</SOAP-ENC:Struct>
<SOAP-ENC:Struct>
<a>3</a>
<b>4</b>
</SOAP-ENC:Struct>
</ccc>
<ddd>ddd</ddd>
</aaa>
mohl by někdo poradit, jak kýženého výsledku dosáhnout? (případně i v NuSOAP nebo PEAR/SOAP)
nastavení SOAP_SINGLE_ELEMENT_ARRAYS a SOAP_USE_XSI_ARRAY_TYPE na tohle nemají vliv.
pole ccc nelze definovat jako SOAP_ENC_OBJECT – má číselné indexy. při jeho definici jako SOAP_ENC_ARRAY je výsledek stejný. vyzkoušel jsem všechny možnosti SOAP_ENC_.. včetně nedokumentováných.
jak by měla serializovaná struktura či parametry vypadat, aby se požadavek serializoval správně?
Editoval paranoiq (19. 8. 2009 16:26)
Napada me prasarna: str_replace.
Jinak nevim. Nikdy jsem to neresil.
Dalsi moznost je si to XML udelat rucne.
SoapClientu nejde podstrčit změněný request k odeslání. serializuje se to samo v okamžiku kdy je odesílán požadavek.
pokud bych řešil vlastní serializaci, musel bych řešit i vlastní deserializaci odpovědi – a to už nejsme u SOAP rozšíření, to už je pěkně po staru. tohle, nebo nalezení použitelnější SOAP knihovny je až další iterace. teď hledám řešení tohoto problému. nechce se mi věřit, že by to neumělo takto obyčejnou konstrukci. stále doufám, že chyba je u mě :]
Editoval paranoiq (19. 8. 2009 18:05)
zatím problém řeším vlastní serializací a odesláním dotazu. odpověď není nutné příliš pitvat
ale pokud někdo víte jak na to, každou radu vítám