Die integrierte PHP
Erweiterung für SOAP
validiert nicht alles in der eingehenden SOAP
Anfrage gegen die XML Schema
in WSDL
. Es überprüft zwar die Existenz von Basis-Entitäten, aber wenn Sie etwas kompliziertes wie simpleType
restrictions haben, ignoriert die Erweiterung ihre Existenz ziemlich genau.
Was ist der beste Weg, um die SOAP
Anfrage gegen XML Schema
in WSDL
zu validieren?
Wir haben in dieser Angelegenheit einen Blick auf Stunden geworfen. Weder der native PHP SoapServer noch die NuSOAP Library führt eine Validierung durch. PHP SoapServer macht einfach einen Typcast. Zum Beispiel, wenn Sie
definieren %Vor%und senden
%Vor%Sie erhalten den PHP-Typ boolean (true)
NuSOAP wandelt einfach alles in eine Zeichenfolge um, obwohl es einfache Typen erkennt:
aus dem Debug-Protokoll von nuSOAP:
%Vor%Also ist der beste Weg, Joelhardi-Lösung, um sich selbst zu validieren oder verwenden Sie einige XML-Parser wie XERCES
Neben den nativen PHP5 SOAP-Bibliotheken kann ich Ihnen auch sagen, dass weder die PEAR- noch die Zend SOAP-Bibliotheken die Schema-Validierung von Nachrichten derzeit durchführen. (Ich kenne leider keine PHP SOAP-Implementierung, die das leider tut.)
Ich würde die XML-Nachricht in ein DOMDocument -Objekt laden und die Methoden von DOMDocument verwenden gegen das Schema zu validieren.
Normalerweise validiert man nicht gegen die WSDL. Wenn die WSDL ordnungsgemäß erstellt wird, sollte ein zugrunde liegendes XML-Schema (XSD) vorhanden sein, um den Hauptteil der Anforderung zu validieren. Ihr XML-Parser sollte dazu in der Lage sein.
Der Rest hängt davon ab, wie Sie den Web-Service implementieren und welche SOAP-Engine Sie verwenden. Ich bin nicht direkt mit der PHP-Engine vertraut. Für WSDL / Interface Level "Validierung" mache ich normalerweise so etwas:
Ich konnte keine einfache Möglichkeit finden, die Validierung durchzuführen und hatte schließlich einen Validierungscode in der Geschäftslogik.
Vor einiger Zeit habe ich einen Proof of Concept Webservice mit PHP mit NuSOAP . Ich weiß nicht, ob es die Eingabe validiert, aber ich würde annehmen, dass es tut.