Bestätigen Sie eine eingehende SOAP-Anforderung an die WSDL in PHP
Frage
Die eingebaute in PHP
Erweiterung für SOAP
nicht alles in dem eingehenden SOAP
Anfrag gegen den XML Schema
im WSDL
validieren. Es überprüft die Existenz von Grundeinheiten, aber wenn man etwas kompliziert wie simpleType
Einschränkungen hat die Erweiterung so ziemlich ignoriert ihre Existenz.
Was ist der beste Weg, um die SOAP
Anfrage gegen XML Schema
im WSDL
enthaltenen zu validieren?
Lösung
gegraben um auf diesen eine Blick Stunde Angelegenheit. Weder die native nore PHP Soapserver die NuSOAP Bibliothek jede Validierung der Fall ist. PHP Soapserver macht einfach eine Typumwandlung. Wenn Sie zum Beispiel definieren
<xsd:element name="SomeParameter" type="xsd:boolean" />
und einreichen
<get:SomeParameter>dfgdfg</get:SomeParameter>
Sie werden den PHP-Typ boolean (true) erhalten
NuSOAP einfach wirft Everthing zu bespannen, obwohl es einfache Typen erkennt:
aus dem nuSOAP Debug-Log:
nusoap_xmlschema: processing typed element SomeParameter of type http://www.w3.org/2001/XMLSchema:boolean
So ist die beste Art und Weise ist joelhardi Lösung selbst zu überprüfen oder einen XML-Parser wie XERCES verwendet
Andere Tipps
Neben dem nativen PHP5 SOAP-Libs, kann ich Ihnen auch, dass sagen weder die PEAR noch Zend SOAP Libs Schema-Validierung von Nachrichten derzeit tun. (Ich weiß nicht, jede PHP SOAP-Implementierung, die tut, leider.)
Was ich tun würde, ist die XML-Nachricht in eine Last DOMDocument Objekt und DOMDocument Methoden verwenden, um gegen das Schema zu validieren.
Normalerweise muss man nicht validieren gegen die WSDL. Wenn die WSDL ausgelegt ist richtig sollte es ein zugrunde liegendes XML-Schema (XSD), um den Körper des Antrags gegen zu validieren. Ihr XML-Parser sollte dies tun kann.
Der Rest ist, wie Sie den Web-Service implementieren und Engine, die SOAP Sie verwenden. Ich bin nicht direkt vertraut mit der PHP-Engine. Für WSDL / Interface-Ebene „Validierung“ Normalerweise mache ich so etwas wie folgt aus:
- Ist der Körper des Antrags einen bekannten Anforderungstyp entsprechen und es ist gültig (von XSD)?
- Ist die Nachricht Sinn in diesem Zusammenhang machen und kann ich wo es zu einer Operation / Handler?
- Wenn ja, starten Sie es verarbeiten
- Ansonsten: Fehler
war ich nicht in der Lage jede einfache Art und Weise zu finden, die Validierung und am Ende hatte Validierungscode in der Business-Logik auszuführen.
Vor einiger Zeit habe ich erstellen ein Proof of concept Web-Service mit PHP NuSOAP . Ich weiß nicht, ob sie die Eingabe bestätigt, aber ich würde annehmen, dass es der Fall ist.