Programmer's Reference Guide

Zend_Soap_Client

WSDL

Note: La classe Zend_Soap_Wsdl est utilisée par le composant Zend_Soap_Server pour manipuler des documents WSDL. Néanmoins, vous pouvez vous-même utiliser les services fournis par cette classe pour vos propres besoins.
Si vous ne voulez pas l'utiliser pour vos propres besoins, vous pouvez alors passer cette section de la documentation.

Constructeur Zend_Soap_Wsdl

Le constructeur de Zend_Soap_Wsdl prend 3 paramètres:

  1. $name - nom du service Web décrit.
  2. $uri - URI d'accès au fichier WSDL. (Une référence dans le système de fichier local est possible.)
  3. $extractComplexTypes - drapeau optionnel pour spécifier si les types complexes doivent être extraits.

addMessage()

addMessage($name, $parts) ajoute un message de description au document WSDL (/definitions/message de l'élément).

Chaque message correspond à une méthode en terme de fonctionnalité de Zend_Soap_Server et Zend_Soap_Client.

Le paramètre $name représente le nom du message.

Le paramètre $parts est un tableau de paramètre des messages décrivant les paramètres d'appel SOAP. Le tableau est associatif: 'nom du paramètre' (nom du paramètre d'appel SOAP) => 'type du paramètre'.

La correspondance de types est effectuée grâce à addTypes() et addComplexType()(voyez après).

Note: Les paramètres de messages peuvent être soit "element", soit "type" (voyez http://www.w3.org/TR/wsdl#_messages).
"element" doit correspondre à un élément de définition de type. "type" correspond à une entrée complexType.
Tous les types standards XSD possèdent une définition "element" et "complexType" (Voyez http://schemas.xmlsoap.org/soap/encoding/).
Tous les éléments non standards, qui doivent être ajoutés avec la méthode Zend_Soap_Wsdl::addComplexType(), sont décrits en utilisant un noeud "complexType" décrits dans la section "/definitions/types/schema/" du document WSDL.
Ainsi, la méthode addMessage() utilise toujours un attribut "type" pour décrire des types.

addPortType()

addPortType($name) ajoute un nouveau type de portage au document WSDL (/definitions/portType).

Ceci fait la jointure entre des méthodes du service décrites en tant qu'implémentations de Zend_Soap_Server.

Voyez http://www.w3.org/TR/wsdl#_porttypes pour plus de détails.

addPortOperation()

addPortOperation($portType, $name, $input = false, $output = false, $fault = false) ajoute des définitions de portage au portage défini dans le document WSDL (/definitions/portType/operation).

Chaque opération de portage correspond à une méthode de classe (si le Web Service est basé sur une classe) ou à une fonction (si le Web Service est basé sur des fonctions), ceci en terme d'implémentation de Zend_Soap_Server.

Cette méthode ajoute aussi les messages d'opération correspondants aux portages, ceci dépend des paramètres $input, $output and $fault.

Note: Zend_Soap_Server génère 2 messages pour chaque opération de portage lorsque le service est décrit au travers de la classe Zend_Soap_Server:

  • Le message d'entrée nommé $methodName . 'Request'.

  • Les message de sortie nommé $methodName . 'Response'.


Voyez http://www.w3.org/TR/wsdl#_request-response pour les détails.

addBinding()

addBinding($name, $portType) ajoute de nouvelles correspondances (bindings) au document WSDL (/definitions/binding).

Le noeud du document WSDL "binding" définit le format du message et les détails du protocole pour les opérations et messages définis par un portage "portType" particulier (voyez http://www.w3.org/TR/wsdl#_bindings).

La méthode crée le noeud de correspondance et le retourne. Il peut alors être utilisé.

L'implémentation de Zend_Soap_Server utilise le nom $serviceName . "Binding" pour la correspondance ("binding") de l'élément du document WSDL.

addBindingOperation()

addBindingOperation($binding, $name, $input = false, $output = false, $fault = false) ajoute une opération à l'élément de correspondance avec le nom spécifié (/definitions/binding/operation).

Cette méthode prend un objet XML_Tree_Node tel que retourné par addBinding(), en paramètre ($binding) pour ajouter un élément "operation" avec des entrées input/output/false dépendantes des paramètres spécifiés.

Zend_Soap_Server ajoute les correspondances pour chaque méthode du Web Service avec des entrées et sorties, définissant l'élément "soap:body" comme <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>

Voyez les détails à http://www.w3.org/TR/wsdl#_bindings.

addSoapBinding()

addSoapBinding($binding, $style = 'document', $transport = 'http://schemas.xmlsoap.org/soap/http') ajoute des correspondances (bindings) SOAP ("soap:binding") à l'élément (déjà lié à un portage de type) avec le style et le transport spécifié (Zend_Soap_Server utilise le style RPC sur HTTP).

L'élément "/definitions/binding/soap:binding" est alors utilisé pour spécifier que la correspondance est relative au format du protocole SOAP.

Voyez http://www.w3.org/TR/wsdl#_bindings pour les détails.

addSoapOperation()

addSoapOperation($binding, $soap_action) ajoute une opération SOAP ("soap:operation") à l'élément de correspondance avec l'action spécifiée. L'attribut "style" de l'élément "soap:operation" n'est pas utilisé alors que le modèle de programmation (RPC-oriented ou document-oriented) devrait utiliser la méthode addSoapBinding()

L'attribut "soapAction" de l'élément "/definitions/binding/soap:operation" spécifie la valeur de l'en-tête SOAPAction pour l'opération. Cet attribut est requis pour SOAP sur HTTP et ne doit pas être renseigné pour les autres modes de transports.

Zend_Soap_Server utilise $serviceUri . '#' . $methodName pour le nom de l'action SOAP.

Voyez http://www.w3.org/TR/wsdl#_soap:operation pour plus de détails.

addService()

addService($name, $port_name, $binding, $location) ajoute un élément "/definitions/service" au document WSDL avec le nom du Web Service spécifié, le nom du portage, la correspondance, et l'adresse.

WSDL 1.1 autorise d'avoir plusieurs types de portage par service. Cette particularité n'est pas utilisée dans Zend_Soap_Server et est non supportée par la classe Zend_Soap_Wsdl.

Utilisations de Zend_Soap_Server :

  • $name . 'Service' comme nom du Web Service,

  • $name . 'Port' comme nom de portage des types,

  • 'tns:' . $name . 'Binding' [1] 'tns:' namespace'http://' .$_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME'] comme nom de la correspondance,

  • l'URI du script[2] 'http://' .$_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME'] en tant qu'URI du service pour les Web Service utilisant des classes.

$name est un nom de classe pour le Web Service utilisant des classes, ou un nom de script pour le Web Service qui utilise des fonctions.

Voyez http://www.w3.org/TR/wsdl#_services pour les détails.

Correspondance de type.

Le WSDL de Zend_Soap utilise les correspondances suivantes pour mapper les type SOAP sur des types PHP:

  • chaînes PHP <-> xsd:string.

  • entiers PHP <-> xsd:int.

  • flottants PHP <-> xsd:float.

  • booléens PHP <-> xsd:boolean.

  • tableaux PHP <-> soap-enc:Array.

  • objets PHP <-> xsd:struct.

  • classes PHP <-> tns:$className [3] Zend_Soap_Wsdl$extractComplexTypesxsd:anyType tns:$className .

  • Type PHP vide <-> void.

  • Si le type na aucune correspondance avec les valeurs ci-dessus, alors xsd:anyType est utilisé.

xsd: est l'espace de noms "http://www.w3.org/2001/XMLSchema", soap-enc: est l'espace de noms "http://schemas.xmlsoap.org/soap/encoding/", tns: est un "espace de noms cible" pour le service.

Récupérer des infos sur les types.

getType($type) peut être utilisée pour récupérer la correspondance d'un type PHP spécifié :

...
$wsdl = new Zend_Soap_Wsdl('My_Web_Service', $myWebServiceUri);

...
$soapIntType = $wsdl->getType('int');

...
class MyClass {
    ...
}
...
$soapMyClassType = $wsdl->getType('MyClass');

Récupérer des infos sur les types complexes.

addComplexType($type) est utilisée pour ajouter des types complexes (classes PHP) à un document WSDL.

Cette méthode est utilisée automatiquement par getType() pour ajouter une correspondance de type complexe si $extractComplexTypes est mis à la valeur true (sinon les classes sont mappées vers le type SOAP "xsd:anyType").

addComplexType() crée un élément "/definitions/types/xsd:schema/xsd:complexType" pour chaque type complexe décrit avec le nom de la classe PHP spécifiée.

Toutes les propriétés publiques de la classe sont décrites comme des éléments du noeud "xsd:all" attaché à "xsd:complexType".

Les propriétés des classes doivent posséder un bloc de documentation avec le type PHP en question, afin que la propriété soit incluse dans la description WSDL.

addComplexType() vérifie sur le type est déjà décrit dans la section des types du document WSDL.

Ceci évite les duplications et récursions si cette méthode est appelée plus d'une fois.

Voyez http://www.w3.org/TR/wsdl#_types pour plus de détails.

addDocumentation()

addDocumentation($input_node, $documentation) ajoute de la documentation lisible (human readable) grâce à l'élément optionnel "wsdl:document".

L'élément "/definitions/binding/soap:binding" est utilisé pour dire que la correspondance est liée au format du protocole SOAP.

Voyez http://www.w3.org/TR/wsdl#_documentation pour les détails.

Récupérer un document WSDL finalisé.

toXML(), toDomDocument() et dump($filename = false) peuvent être utilisées pour récupérer un document WSDL sous forme de XML, de structure DOM, ou de fichier.

[1] est l'URI du script ().
[3]Si l'objet est crée avec désactivé, alors les classes sont comprises comme des .Sinon, est utilisé et le type est décrit en détails dans la section WSDL .

Zend_Soap_Client
blog comments powered by Disqus

Select a Version

Languages Available

Components

Search the Manual