Question

L'extension PHP intégrée pour SOAP ne valide pas tout le contenu de la demande SOAP entrante par rapport au XML Schema dans le WSDL . Il vérifie l'existence d'entités de base, mais lorsque vous avez quelque chose de compliqué comme les restrictions simpleType , l'extension ignore assez leur existence.

Quel est le meilleur moyen de valider la requête SOAP par rapport au schéma XML contenu dans le WSDL ?

Était-ce utile?

La solution

creusé sur cette question une vue heures. Le serveur SoapServer PHP natif et la bibliothèque NuSOAP ne font aucune validation. PHP SoapServer fait simplement une conversion de type. Par exemple si vous définissez

<xsd:element name="SomeParameter" type="xsd:boolean" />

et soumettre

<get:SomeParameter>dfgdfg</get:SomeParameter>

vous obtiendrez le type php boolean (true)

NuSOAP convertit simplement tout en chaîne, même s'il reconnaît les types simples:

à partir du journal de débogage nuSOAP:

nusoap_xmlschema: processing typed element SomeParameter of type http://www.w3.org/2001/XMLSchema:boolean

Le meilleur moyen est donc la solution joelhardi de vous valider ou d’utiliser un analyseur XML comme XERCES

Autres conseils

Outre les bibliothèques PHP5 SOAP natives, je peux également vous dire que ni les bibliothèques PEAR, ni Zend SOAP ne procéderont actuellement à la validation du schéma des messages. (Malheureusement, je ne connais aucune implémentation PHP SOAP.)

Ce que je voudrais faire est de charger le message XML dans un DOMDocument object et utilise les méthodes de DOMDocument pour valider par rapport au schéma.

Généralement, on ne valide pas avec le WSDL. Si le WSDL est conçu correctement, un schéma xml sous-jacent (XSD) doit être utilisé pour valider le corps de la demande. Votre analyseur XML devrait pouvoir le faire.

Le reste dépend de la manière dont vous implémentez le service Web et du moteur SOAP que vous utilisez. Je ne suis pas directement familiarisé avec le moteur PHP. Pour la validation " pour le niveau WSDL / interface Je fais habituellement quelque chose comme ça:

  1. Le corps de la requête correspond-il à un type de requête connu et est-il valide (par XSD)?
  2. Le message a-t-il un sens dans ce contexte et puis-je le mapper sur une opération / un gestionnaire?
  3. Si tel est le cas, commencez à le traiter
  4. Sinon: erreur

Je n'ai pas réussi à trouver un moyen simple d'effectuer la validation et j'ai finalement eu un code de validation dans la logique applicative.

Il y a quelque temps, j'ai créé un service Web de validation de principe avec PHP utilisant NuSOAP . Je ne sais pas s'il valide l'entrée, mais je suppose que c'est le cas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top