Neulich habe ich versucht einen WebService aus PHP heraus über SOAP aufzurufen. Das Problem war, dass in dem Input des WebServices abstrakte Klassen verwendet wurden die sich – wie wir alle wissen – nicht instanziieren lassen. So kann man aus der abstrakten Klasse “Verkehrsmittel” kein Objekt erstellen, aus der Klasse “TAuto” die auf “TVerkehrsmittel” aufbaut allerdings schon.
Wenn man sich eine WSDL-Datei (WebService Definition Language) anschaut, sieht man, dass in unserem Beispiel folgender Inputtyp angegeben wäre:
<nameSpace1:TVerkehrsmittel xsi:type="nameSpace2:TAuto"> |
Wir erstellen uns also ein “Verkehrsmittel” vom Typ “Auto”. Damit die Soap-Implementierung von PHP versteht, dass wir ein Auto erstellen wollen müssen wil folgendes tun:
$verkehrsmittel = array('farbe' => 'rot', 'geschwindigkeit' => 60); $auto = new SoapVar($verkehrsmittel, SOAP_ENC_OBJECT, 'TAuto', 'http://www.webservices.jofre.de/typenamespace/'); |
Wenn wir unserem WebService ‘$verkehrsmittel’ übergeben kracht’s und wir sehen einen Errorcode, dass keine Instanz von TVerkehrsmittel erstellt werden kann. Wenn wir aber eine SoapVar erstellen, funktioniert alles wunderbar.
Das Zauberwort heißt also SoapVar().