Autor Zpráva
quatzael
Profil
Jde prosím nějak v PHP vytvořit výpis obsahu XML požadavku ze SoapClienta?

Když tam mám např:
$soapClient = new SoapClient("/file.wsdl");
$ws_result = $soapClient->function($parameter);
abych si mohl vypsat obsah zasílaného požadavku ($soapClient->function($parameter);) bez toho, abych ho nějak posílal (hází mi to fatal error)
juriad
Profil
Nejde to před odesláním, ale těsně po odeslání.
Viz stackoverflow.com/a/3572445/4052811
quatzael
Profil
juriad:
A jde aspoň nějak nastavit, aby se script neukončil po týhle fatal error a běžel dál na ten výpis?
juriad_
Profil *
Co je to za fatal error? Mel bys jej opravit a nikoli skryt a ignorovat.
quatzael
Profil
juriad:
No právě v tom Soap requestu. Potřebuju vidět co se tam posílá, abych zjistil kde je chyba..


juriad:
Konkrétně je to:
Fatal error: Uncaught SoapFault exception: [Client] SOAP-ERROR: Encoding: object has no 'Data' property 
juriad
Profil
Tak prostě tomu klientovi předáváš špatná data nebo data ve špatném formátu.

Co je $parameter? Nejlépe to var_dumpni.
Jak vypadá předpis té funkce?
quatzael
Profil
juriad:
Zkoušel jsem tu metodu __getLastRequest testovat na requestu, který je v pořádku, ale žádný XML mi to teda nevyplivlo.. Jenom hodnoty parametrů jeden za druhým nijak neoddělený bez mezer..

Já potřebuju přímo to XML, který ten PHP SoapClient generuje, tzn.:
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ver="http://adresa.cz">
   <soapenv:Header/>
   <soapenv:Body>
   
   ... atd. ...

Tak prostě tomu klientovi předáváš špatná data nebo data ve špatném formátu.
O to právě jde. A já potřebuju zjistit co tam fakticky jde..

Ve skutečnosti jsou tam dva parametry oddělený čárkou, tedy:
$ws_result = $soapClient->function($login,$xml);

První parametr jsem vyřešil. Jedná se o nějaký strukturovaný objekt.
Druhý parametr je v dokumentaci popsán jako "obsah souboru xml"
Ale ať to tam cpu jak chci tak to nic nebere. Ten soubor xml je testovací ukázka, takže by měl být správně.
Zkoušel jsem s tím různý psí kusy, např:
$xml = simplexml_load_file( 'test.xml');
$xml = simplexml_load_string($xml_string);
Nebo to různě cpát do objektu jako vlastnost a vkládat ten parametr podobně jako ten první login, ale prostě nic nefunguje,,
juriad
Profil
quatzael:
ale žádný XML mi to teda nevyplivlo
A vytvořil jsi SOAP klienta se zapnutým trace?

V případě chyby to XML nejspíš ani nesestaví.
quatzael
Profil
juriad:
Já jsem to zkoušel na requestu, který mi funguje. Trace jsem tam zadal. když tam zadaný není tak to nevypíše vůbec nic.
Ale když ho tam zadám tak to udělá něco takovýho:

$array = array ('jmeno'=>'Kyblicek','kamarad'=>'Lopatka','cislo'=>8);
 $request = $soap_client->__call('Function',$array);  
echo "REQUEST: " . $soap_client->__getLastRequest() . "\n";  //napíše: "REQUEST: KyblicekLopatka8
juriad
Profil
A zkusil jsi i přečíst i první komentář v dokumentaci?
quatzael
Profil
juriad:
Teď už jo:o)
Supr, to je to co jsem chtěl!! Díky moc!!

A šlo by to i nějak obráceně? Jako že bych z toho celýho XML Stringu to zase vrátil do klasickýho requestu?

Teď se dívám do dokumentace.. Asi na to bude metoda __doRequest , že?
quatzael
Profil
juriad:
Tak údajně má ten čistej XML request vypadat nějak takto:

 <xml_data>
 <![CDATA[
 <content xmlns="http://www.adresa.cz/path" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" schemaVersion="1.0" id="101010">
 ...
 </content>
 ]]>
</xml_data>

A v tom druhým parametru, který představuje element <xml_data> má být obsah souboru test.xml, který ale začíná tou XML deklarací:

<?xml version="1.0" encoding="WINDOWS-1250"?>
<content xmlns="http://www.adresa.cz/path" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" schemaVersion="1.0" id="101010">
 ...

Jak tedy sestavit ten parametr do toho SOAP requestu, aby se načetl ten soubor, odstranil se ten první řádek s XML deklarací (je-li to opravdu potřeba) a ještě se to hodilo do toho <![CDATA[ ... ]]>?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0