Abstrakte Klassen über SOAP WebServices in PHP verwenden

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().

Leave a Reply

Your email address will not be published. Required fields are marked *