Komplexe WebServices in PHP mit dem Zend Framework aufrufen

Hallo zusammen, hier mal wieder ein kurzes Tutorial über die Verwendung von WebServices in PHP mit dem Zend Framework. Dieses Tutorial ist darauf angelegt komplexe Typen richtig als Eingabeparameter anzugeben und abstrakte Klassen über SoapVar richtig zu definieren.

In dem Tutorial erstellen wir einen kleinen WebService in Java und sprechen diesen dann über PHP an.

Ich hoffe es hilft dem ein oder anderen. Über Feedback freue ich mich wie immer!

Download (Source + Tutorial) ([downloadcounter(PHPWebServiceWithZend.zip)]x heruntergeladen)

Download (Tutorial) ([downloadcounter(PHPWebServiceWithZend.pdf)]x heruntergeladen)

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