Validieren Sie eine eingehende SOAP-Anfrage an die WSDL in PHP

8

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?

    
Glenn Moss 19.09.2008, 23:33
quelle

5 Antworten

2

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

    
CodeKid 16.12.2011, 09:55
quelle
4

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.

    
joelhardi 30.09.2008 08:53
quelle
1

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:

  1. Entspricht der Hauptteil der Anfrage einem bekannten Anfragetyp und ist dieser (durch XSD) gültig?
  2. Ist die Nachricht in diesem Kontext sinnvoll und kann ich sie einer Operation / Handler zuordnen?
  3. Falls ja, fange an, es zu verarbeiten
  4. Ansonsten: Fehler
user11087 20.09.2008 15:43
quelle
-1

Ich konnte keine einfache Möglichkeit finden, die Validierung durchzuführen und hatte schließlich einen Validierungscode in der Geschäftslogik.

    
Glenn Moss 16.02.2009 21:42
quelle
-3

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.

    
Grey Panther 21.09.2008 07:03
quelle

Tags und Links