1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- EN-Revision: 21829 -->
4 <sect1 id="zend.soap.wsdl">
9 La classe <classname>Zend_Soap_Wsdl</classname> est utilisée par le composant
10 Zend_Soap_Server pour manipuler des documents WSDL. Néanmoins, vous pouvez vous-même
11 utiliser les services fournis par cette classe pour vos propres besoins. La classe
12 Zend_Soap_Wsdl contient à la fois un analyseur et un constructeur de documents
17 Si vous ne voulez pas l'utiliser pour vos propres besoins, vous pouvez alors
18 passer cette section de la documentation.
22 <sect2 id="zend.soap.wsdl.constructor">
23 <title>Constructeur Zend_Soap_Wsdl</title>
26 Le constructeur de <classname>Zend_Soap_Wsdl</classname> prend 3 paramètres :
29 <simpara><varname>$name</varname> - nom du service Web décrit.</simpara>
33 <simpara><varname>$uri</varname> - <acronym>URI</acronym> d'accès au fichier WSDL. (Une référence
34 dans le système de fichier local est possible.)</simpara>
38 <simpara><varname>$strategy</varname> - identifiant optionnel pour identifier la
39 détection de stratégie des types complexes. Ceci est un booléen
40 <varname>$extractComplexTypes</varname> avant la version 1.7 et peut toujours être
41 paramétrer via un booléen pour la compatibilité ascendante. Par défaut le
42 comportement de détection de la 1.6 est activé. Pour avoir de plus amples
43 informations concernant les stratégies de détection des types complexes,
44 lisez : <xref linkend="zend.soap.wsdl.types.add_complex" />.</simpara>
50 <sect2 id="zend.soap.wsdl.addmessage">
51 <title>addMessage()</title>
54 <methodname>addMessage($name, $parts)</methodname> ajoute un message de description au
55 document WSDL (/definitions/message de l'élément).
59 Chaque message correspond à une méthode en terme de fonctionnalité de
60 <classname>Zend_Soap_Server</classname> et
61 <classname>Zend_Soap_Client</classname>.
64 <para>Le paramètre <varname>$name</varname> représente le nom du message.</para>
67 Le paramètre <varname>$parts</varname> est un tableau de paramètre des messages
68 décrivant les paramètres d'appel <acronym>SOAP</acronym>. Le tableau est associatif: 'nom du paramètre'
69 (nom du paramètre d'appel <acronym>SOAP</acronym>) => 'type du paramètre'.
73 La correspondance de types est effectuée grâce à <methodname>addTypes()</methodname> et
74 <methodname>addComplexType()</methodname>(voyez après).
79 Les paramètres de messages peuvent être soit "element", soit "type" (voyez
80 <ulink url="http://www.w3.org/TR/wsdl#_messages"></ulink>).
84 "element" doit correspondre à un élément de définition de type. "type"
85 correspond à une entrée complexType.
89 Tous les types standards XSD possèdent une définition "element" et
90 "complexType" (Voyez <ulink
91 url="http://schemas.xmlsoap.org/soap/encoding/"></ulink>).
95 Tous les éléments non standards, qui doivent être ajoutés avec la méthode
96 <methodname>Zend_Soap_Wsdl::addComplexType()</methodname>, sont décrits en utilisant
97 un noeud "complexType" décrits dans la section "/definitions/types/schema/" du
102 Ainsi, la méthode <methodname>addMessage()</methodname> utilise toujours un attribut
103 "type" pour décrire des types.
108 <sect2 id="zend.soap.wsdl.add_port_type">
109 <title><methodname>addPortType()</methodname></title>
112 <methodname>addPortType($name)</methodname> ajoute un nouveau type de portage au document WSDL
113 (/definitions/portType).
117 Ceci fait la jointure entre des méthodes du service décrites en tant
118 qu'implémentations de Zend_Soap_Server.
122 Voyez <ulink url="http://www.w3.org/TR/wsdl#_porttypes"></ulink> pour plus de
127 <sect2 id="zend.soap.wsdl.add_port_operation">
128 <title><methodname>addPortOperation()</methodname></title>
131 <code>addPortOperation($portType, $name, $input = false, $output = false, $fault =
132 false)</code> ajoute des définitions de portage au portage défini dans le document WSDL
133 (/definitions/portType/operation).
137 Chaque opération de portage correspond à une méthode de classe (si le Web Service
138 est basé sur une classe) ou à une fonction (si le Web Service est basé sur des
139 fonctions), ceci en terme d'implémentation de Zend_Soap_Server.
143 Cette méthode ajoute aussi les messages d'opération correspondants aux portages,
144 ceci dépend des paramètres <varname>$input</varname>, <varname>$output</varname> and
145 <varname>$fault</varname>. <note>
147 Zend_Soap_Server génère 2 messages pour chaque opération de portage
148 lorsque le service est décrit au travers de la classe
149 <classname>Zend_Soap_Server</classname>: <itemizedlist>
152 Le message d'entrée nommé <code>$methodName .
159 Les message de sortie nommé <code>$methodName .
169 Voyez <ulink url="http://www.w3.org/TR/wsdl#_request-response"></ulink> pour les
174 <sect2 id="zend.soap.wsdl.add_binding">
175 <title><methodname>addBinding()</methodname></title>
178 <methodname>addBinding($name, $portType)</methodname> ajoute de nouvelles correspondances
179 (bindings) au document WSDL (/definitions/binding).
183 Le noeud du document WSDL "binding" définit le format du message et les détails du
184 protocole pour les opérations et messages définis par un portage "portType" particulier
185 (voyez <ulink url="http://www.w3.org/TR/wsdl#_bindings"></ulink>).
189 La méthode crée le noeud de correspondance et le retourne. Il peut alors être
194 L'implémentation de Zend_Soap_Server utilise le nom <code>$serviceName .
195 "Binding"</code> pour la correspondance ("binding") de l'élément du document
200 <sect2 id="zend.soap.wsdl.add_binding_operation">
201 <title><methodname>addBindingOperation()</methodname></title>
204 <code>addBindingOperation($binding, $name, $input = false, $output = false, $fault
205 = false)</code> ajoute une opération à l'élément de correspondance avec le nom spécifié
206 (/definitions/binding/operation).
210 Cette méthode prend un objet <code>XML_Tree_Node</code> tel que retourné par
211 <methodname>addBinding()</methodname>, en paramètre (<varname>$binding</varname>) pour ajouter un élément
212 "operation" avec des entrées input/output/false dépendantes des paramètres
217 <classname>Zend_Soap_Server</classname> ajoute les correspondances pour chaque
218 méthode du Web Service avec des entrées et sorties, définissant l'élément "soap:body"
219 comme <code><soap:body use="encoded"
220 encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/></code>
224 Voyez les détails à <ulink
225 url="http://www.w3.org/TR/wsdl#_bindings"></ulink>.
229 <sect2 id="zend.soap.wsdl.add_soap_binding">
230 <title><methodname>addSoapBinding()</methodname></title>
233 <code>addSoapBinding($binding, $style = 'document', $transport =
234 'http://schemas.xmlsoap.org/soap/http')</code> ajoute des correspondances (bindings)
235 <acronym>SOAP</acronym> ("soap:binding") à l'élément (déjà lié à un portage de type) avec le style et le
236 transport spécifié (<classname>Zend_Soap_Server</classname> utilise le style RPC sur
237 <acronym>HTTP</acronym>).
241 L'élément "/definitions/binding/soap:binding" est alors utilisé pour spécifier que
242 la correspondance est relative au format du protocole <acronym>SOAP</acronym>.
246 Voyez <ulink url="http://www.w3.org/TR/wsdl#_bindings"></ulink> pour les
251 <sect2 id="zend.soap.wsdl.add_soap_operation">
252 <title><methodname>addSoapOperation()</methodname></title>
255 <methodname>addSoapOperation($binding, $soap_action)</methodname> ajoute une opération <acronym>SOAP</acronym>
256 ("soap:operation") à l'élément de correspondance avec l'action spécifiée. L'attribut
257 "style" de l'élément "soap:operation" n'est pas utilisé alors que le modèle de
258 programmation (RPC-oriented ou document-oriented) devrait utiliser la méthode
259 <methodname>addSoapBinding()</methodname>
263 L'attribut "soapAction" de l'élément "/definitions/binding/soap:operation"
264 spécifie la valeur de l'en-tête <acronym>SOAP</acronym>Action pour l'opération. Cet attribut est requis
265 pour <acronym>SOAP</acronym> sur <acronym>HTTP</acronym> et <emphasis>ne doit pas</emphasis> être renseigné pour les autres
270 <classname>Zend_Soap_Server</classname> utilise <code>$serviceUri . '#' .
271 $methodName</code> pour le nom de l'action <acronym>SOAP</acronym>.
275 Voyez <ulink url="http://www.w3.org/TR/wsdl#_soap:operation"></ulink> pour plus de
280 <sect2 id="zend.soap.wsdl.add_service">
281 <title><methodname>addService()</methodname></title>
284 <methodname>addService($name, $port_name, $binding, $location)</methodname> ajoute un élément
285 "/definitions/service" au document WSDL avec le nom du Web Service spécifié, le nom du
286 portage, la correspondance, et l'adresse.
290 WSDL 1.1 autorise d'avoir plusieurs types de portage par service. Cette
291 particularité n'est pas utilisée dans <classname>Zend_Soap_Server</classname> et est non
292 supportée par la classe <classname>Zend_Soap_Wsdl</classname>.
296 Utilisations de <classname>Zend_Soap_Server</classname> : <itemizedlist>
298 <para><code>$name . 'Service'</code> comme nom du Web Service,</para>
302 <para><code>$name . 'Port'</code> comme nom de portage des types,</para>
307 <code>'tns:' . $name . 'Binding'</code> <footnote>
309 <code>'tns:' namespace</code> est l'URI du script
310 (<code>'http://' .$_SERVER['HTTP_HOST'] .
311 $_SERVER['SCRIPT_NAME']</code>).
313 </footnote> comme nom de la correspondance,
319 l'URI du script<footnote>
321 <code>'http://' .$_SERVER['HTTP_HOST'] .
322 $_SERVER['SCRIPT_NAME']</code>
324 </footnote> en tant qu'URI du service pour les Web Service utilisant des
328 </itemizedlist> où <varname>$name</varname> est un nom de classe pour le Web Service
329 utilisant des classes, ou un nom de script pour le Web Service qui utilise des
334 Voyez <ulink url="http://www.w3.org/TR/wsdl#_services"></ulink> pour les
339 <sect2 id="zend.soap.wsdl.types">
340 <title>Correspondance de type</title>
343 Le WSDL de Zend_Soap utilise les correspondances suivantes pour faire correspondre
344 les type <acronym>SOAP</acronym> à des types <acronym>PHP</acronym> : <itemizedlist>
346 <para>chaînes <acronym>PHP</acronym> <-> <code>xsd:string</code>.</para>
350 <para>entiers <acronym>PHP</acronym> <-> <code>xsd:int</code>.</para>
354 <para>flottants <acronym>PHP</acronym> <-> <code>xsd:float</code>.</para>
358 <para>booléens <acronym>PHP</acronym> <-> <code>xsd:boolean</code>.</para>
362 <para>tableaux <acronym>PHP</acronym> <-> <code>soap-enc:Array</code>.</para>
366 <para>objets <acronym>PHP</acronym> <-> <code>xsd:struct</code>.</para>
371 Classe <acronym>PHP</acronym> <-> basé sur la stratégie des types complexes (Voir :
372 <xref linkend="zend.soap.wsdl.types.add_complex" />)<footnote>
374 <classname>Zend_Soap_AutoDiscover</classname> sera créé avec
376 <classname>Zend_Soap_Wsdl_Strategy_DefaultComplexType</classname> en
377 tant qu'algorithme de détection pour les types complexes. Le premier
378 paramètre du constructeur AutoDiscover accepte toute stratégie de
379 types complexes implémentant
380 <classname>Zend_Soap_Wsdl_Strategy_Interface</classname> ou une
381 chaîne correspondant au nom de la classe. Pour une compatibilité
382 ascendante, avec <varname>$extractComplexType</varname> les variables
383 booléennes sont analysées comme avec Zend_Soap_Wsdl. Regardez le
385 linkend="zend.soap.wsdl.types.add_complex">Zend_Soap_Wsdl sur
386 l'ajout des types complexes</link> pour plus d'informations.
393 <para>Type <acronym>PHP</acronym> vide <-> void.</para>
398 Si le type na aucune correspondance avec les valeurs ci-dessus, alors
399 <code>xsd:anyType</code> est utilisé.
402 </itemizedlist> Où <code>xsd:</code> est l'espace de noms
403 "http://www.w3.org/2001/XMLSchema", <code>soap-enc:</code> est l'espace de noms
404 "http://schemas.xmlsoap.org/soap/encoding/", <code>tns:</code> est un "espace de noms
405 cible" pour le service.
408 <sect3 id="zend.soap.wsdl.types.retrieve">
409 <title>Récupérer des infos sur les types</title>
412 <methodname>getType($type)</methodname> peut être utilisée pour récupérer la
413 correspondance d'un type PHP spécifié : <programlisting language="php"><![CDATA[
415 $wsdl = new Zend_Soap_Wsdl('My_Web_Service', $myWebServiceUri);
418 $soapIntType = $wsdl->getType('int');
425 $soapMyClassType = $wsdl->getType('MyClass');
426 ]]></programlisting></para>
429 <sect3 id="zend.soap.wsdl.types.add_complex">
430 <title>Ajouter des infos sur les types complexes</title>
433 <methodname>addComplexType($type)</methodname> est utilisée pour ajouter des types
434 complexes (classes <acronym>PHP</acronym>) à un document WSDL.
438 C'est automatiquement utilisé par la méthode <methodname>getType()</methodname> pour
439 ajouter les types complexes des paramètres de méthodes ou des types
444 Sa détection et son algorithme de construction est basé sur la détection de
445 stratégie des types complexes couramment active. Vous pouvez paramétrer la stratégie
446 de détection soit en spécifiant le nom de classe sous la forme d'une chaîne de
447 caractères ou une instance implémentant
448 <classname>Zend_Soap_Wsdl_Strategy_Interface</classname> en tant que troisième
449 paramètre du constructeur ou en utilisant la fonction
450 <methodname>setComplexTypeStrategy($strategy)</methodname> de
451 <classname>Zend_Soap_Wsdl</classname>. Les stratégies de détection suivantes
452 existent couramment :
459 <classname>Zend_Soap_Wsdl_Strategy_DefaultComplexType</classname> : activé
460 par défaut (quand aucun troisième paramètre n'est fourni). Itère parmi les
461 attributs publics d'un type de classe et les enregistre en tant que
462 sous-types d'un type d'objet complexe.
468 la classe <classname>Zend_Soap_Wsdl_Strategy_AnyType</classname> :
469 caste tous les types complexes en un type XSD simple xsd:anyType. Attention
470 ce raccourci pour la détection des types complexes peut probablement
471 seulement être géré avec des langages faiblement typés comme le <acronym>PHP</acronym>.
478 <classname>Zend_Soap_Wsdl_Strategy_ArrayOfTypeSequence</classname> : cette
479 stratégie permet de spécifier les paramètres de retour de type :
480 <code>int[]</code> ou <code>string[]</code>. A partir de Zend Framework 1.9,
481 il peut gérer des types <acronym>PHP</acronym> simples comme int, string, boolean, float ainsi
482 que des objets ou des tableaux d'objets.
489 <classname>Zend_Soap_Wsdl_Strategy_ArrayOfTypeComplex</classname> : cette
490 stratégie permet de détecter des tableaux complexes d'objets. Les types
491 d'objets sont détectés sur la base de
492 <classname>Zend_Soap_Wsdl_Strategy_DefaultComplexType</classname> et un
493 tableau enveloppe cette définition.
499 la classe <classname>Zend_Soap_Wsdl_Strategy_Composite</classname> :
500 cette stratégie peut combiner toutes les stratégies en connectant les types
501 complexes <acronym>PHP</acronym> (nom de classe) à la stratégie désirée grâce à la méthode
502 <methodname>connectTypeToStrategy($type, $strategy)</methodname>. Une carte de
503 correspondance complète de types peut être fourni au constructeur sous la
504 forme d'un tableau de paires <varname>$type</varname> ->
505 <varname>$strategy</varname>. Le second paramètre spécifie la stratégie par défaut
506 si un type inconnu est ajouté. La valeur par défaut de ce paramètre est la
508 <classname>Zend_Soap_Wsdl_Strategy_DefaultComplexType</classname>.
514 la méthode <methodname>addComplexType()</methodname> crée un élément
515 "<code>/definitions/types/xsd:schema/xsd:complexType</code>" pour chaque type
516 complexe décrit avec le nom d'une classe <acronym>PHP</acronym> spécifiée.
520 Les propriétés des classes <emphasis>doivent</emphasis> posséder un bloc de
521 documentation avec le type <acronym>PHP</acronym> en question, afin que la propriété soit incluse dans
526 <methodname>addComplexType()</methodname> vérifie sur le type est déjà décrit dans la
527 section des types du document WSDL.
531 Ceci évite les duplications et récursions si cette méthode est appelée plus
536 Voyez <ulink url="http://www.w3.org/TR/wsdl#_types"></ulink> pour plus de
542 <sect2 id="zend.soap.wsdl.add_documentation">
543 <title><methodname>addDocumentation()</methodname></title>
546 <methodname>addDocumentation($input_node, $documentation)</methodname> ajoute de la
547 documentation lisible ("human readable") grâce à l'élément optionnel
552 L'élément "/definitions/binding/soap:binding" est utilisé pour dire que la
553 correspondance est liée au format du protocole <acronym>SOAP</acronym>.
557 Voyez <ulink url="http://www.w3.org/TR/wsdl#_documentation"></ulink> pour les
562 <sect2 id="zend.soap.wsdl.retrieve">
563 <title>Récupérer un document WSDL finalisé</title>
566 <methodname>toXML()</methodname>, <methodname>toDomDocument()</methodname> et <code>dump($filename =
567 false)</code> peuvent être utilisées pour récupérer un document WSDL sous forme de <acronym>XML</acronym>,
568 de structure DOM, ou de fichier.