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?

War es hilfreich?

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:

  1. Ist der Körper des Antrags einen bekannten Anforderungstyp entsprechen und es ist gültig (von XSD)?
  2. Ist die Nachricht Sinn in diesem Zusammenhang machen und kann ich wo es zu einer Operation / Handler?
  3. Wenn ja, starten Sie es verarbeiten
  4. 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top