SOAP-Clients beim Verwenden von Klassenzuordnungen fehlertoleranter machen

8

Ich schreibe einen PHP-Wrapper für einen SOAP-Service und verwende die Class-Map-Option, damit ich mit Objekten statt mit Arrays arbeiten kann. Das funktioniert großartig, bis der Provider des SOAP-Dienstes beschließt, einem seiner Objekte eine neue Eigenschaft hinzuzufügen (was sie gerne tun, ohne es jemandem mitzuteilen), zu welchem ​​Zeitpunkt der SOAP-Client mit dem Fehler SOAP-ERROR: Encoding: object has no 'NewlyAddedProperty' property bricht, da es jetzt eine Eigenschaft gibt in der WSDL, die nicht in der Klasse ist.

Ich habe versucht, es zu umgehen, indem ich einen magischen Getter benutze und Dinge wie false , null usw. zurücksende, aber da sie keine gültigen Werte gemäß der WSDL sind, gibt es immer noch einen fatalen Fehler.

In einer idealen Welt würde der Client diese neue Eigenschaft nur dann auf das Objekt setzen, wenn in der Klasse keine Eigenschaft definiert ist, ist das möglich? Wenn es nicht nur wäre, den Fehler zu unterdrücken, wäre das auch in Ordnung.

    
pogo 13.10.2015, 15:34
quelle

2 Antworten

2

Sie können die Klassenzuordnung von SoapClient entfernen und eine andere verwenden, z. B. jsonmapper .

Wenn Ihre Klassen korrekt kommentiert sind, ist es so einfach wie in diesem Beispiel:

%Vor%     
Marek 13.10.2015 16:04
quelle
1

SOAP bedeutet XML über HTTP - der Besitzer des SOAP-Dienstes kann und sollte nicht alle Systeme kennen, die ihn aufrufen.

Diese Sprödigkeit ist in die SOAP-Schnittstelle integriert. Der Dienst sollte eingehende Anforderungen anhand seines Schemas überprüfen. Es wird fehlschlagen, es sei denn, sie machen diesen Pfad optional. Es ist keine "Ente tippen" eingebaut.

    
duffymo 13.10.2015 15:41
quelle

Tags und Links