Zend_Soap_Wsdl.xml 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15341 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.soap.wsdl">
  5. <title>WSDL</title>
  6. <note>
  7. <para>
  8. La classe <classname>Zend_Soap_Wsdl</classname> est utilisée par le composant
  9. Zend_Soap_Server pour manipuler des documents WSDL. Néanmoins, vous pouvez vous-même
  10. utiliser les services fournis par cette classe pour vos propres besoins. La classe
  11. Zend_Soap_Wsdl contient à la fois un analyseur et un constructeur de documents
  12. WSDL.
  13. </para>
  14. <para>
  15. Si vous ne voulez pas l'utiliser pour vos propres besoins, vous pouvez alors
  16. passer cette section de la documentation.
  17. </para>
  18. </note>
  19. <sect2 id="zend.soap.wsdl.constructor">
  20. <title>Constructeur <classname>Zend_Soap_Wsdl</classname></title>
  21. <para>
  22. Le constructeur de <classname>Zend_Soap_Wsdl</classname> prend 3 paramètres :
  23. <orderedlist>
  24. <listitem>
  25. <simpara><code>$name</code> - nom du service Web décrit.</simpara>
  26. </listitem>
  27. <listitem>
  28. <simpara><code>$uri</code> - URI d'accès au fichier WSDL. (Une référence
  29. dans le système de fichier local est possible.)</simpara>
  30. </listitem>
  31. <listitem>
  32. <simpara><code>$strategy</code> - identifiant optionnel pour identifier la
  33. détection de stratégie des types complexes. Ceci est un booléen
  34. <code>$extractComplexTypes</code> avant la version 1.7 et peut toujours être
  35. paramétrer via un booléen pour la compatibilité ascendante. Par défaut le
  36. comportement de détection de la 1.6 est activé. Pour avoir de plus amples
  37. informations concernant les stratégies de détection des types complexes,
  38. lisez : <xref linkend="zend.soap.wsdl.types.add_complex" />.</simpara>
  39. </listitem>
  40. </orderedlist>
  41. </para>
  42. </sect2>
  43. <sect2 id="zend.soap.wsdl.addmessage">
  44. <title><code>addMessage()</code></title>
  45. <para>
  46. <code>addMessage($name, $parts)</code> ajoute un message de description au
  47. document WSDL (/definitions/message de l'élément).
  48. </para>
  49. <para>
  50. Chaque message correspond à une méthode en terme de fonctionnalité de
  51. <classname>Zend_Soap_Server</classname> et
  52. <classname>Zend_Soap_Client</classname>.
  53. </para>
  54. <para>Le paramètre <code>$name</code> représente le nom du message.</para>
  55. <para>
  56. Le paramètre <code>$parts</code> est un tableau de paramètre des messages
  57. décrivant les paramètres d'appel SOAP. Le tableau est associatif: 'nom du paramètre'
  58. (nom du paramètre d'appel SOAP) =&gt; 'type du paramètre'.
  59. </para>
  60. <para>
  61. La correspondance de types est effectuée grâce à <code>addTypes()</code> et
  62. <code>addComplexType()</code>(voyez après).
  63. </para>
  64. <note>
  65. <para>
  66. Les paramètres de messages peuvent être soit "element", soit "type" (voyez
  67. <ulink url="http://www.w3.org/TR/wsdl#_messages"></ulink>).
  68. </para>
  69. <para>
  70. "element" doit correspondre à un élément de définition de type. "type"
  71. correspond à une entrée complexType.
  72. </para>
  73. <para>
  74. Tous les types standards XSD possèdent une définition "element" et
  75. "complexType" (Voyez <ulink
  76. url="http://schemas.xmlsoap.org/soap/encoding/"></ulink>).
  77. </para>
  78. <para>
  79. Tous les éléments non standards, qui doivent être ajoutés avec la méthode
  80. <classname>Zend_Soap_Wsdl::addComplexType()</classname>, sont décrits en utilisant
  81. un noeud "complexType" décrits dans la section "/definitions/types/schema/" du
  82. document WSDL.
  83. </para>
  84. <para>
  85. Ainsi, la méthode <code>addMessage()</code> utilise toujours un attribut
  86. "type" pour décrire des types.
  87. </para>
  88. </note>
  89. </sect2>
  90. <sect2 id="zend.soap.wsdl.add_port_type">
  91. <title><code>addPortType()</code></title>
  92. <para>
  93. <code>addPortType($name)</code> ajoute un nouveau type de portage au document WSDL
  94. (/definitions/portType).
  95. </para>
  96. <para>
  97. Ceci fait la jointure entre des méthodes du service décrites en tant
  98. qu'implémentations de Zend_Soap_Server.
  99. </para>
  100. <para>
  101. Voyez <ulink url="http://www.w3.org/TR/wsdl#_porttypes"></ulink> pour plus de
  102. détails.
  103. </para>
  104. </sect2>
  105. <sect2 id="zend.soap.wsdl.add_port_operation">
  106. <title><code>addPortOperation()</code></title>
  107. <para>
  108. <code>addPortOperation($portType, $name, $input = false, $output = false, $fault =
  109. false)</code> ajoute des définitions de portage au portage défini dans le document WSDL
  110. (/definitions/portType/operation).
  111. </para>
  112. <para>
  113. Chaque opération de portage correspond à une méthode de classe (si le Web Service
  114. est basé sur une classe) ou à une fonction (si le Web Service est basé sur des
  115. fonctions), ceci en terme d'implémentation de Zend_Soap_Server.
  116. </para>
  117. <para>
  118. Cette méthode ajoute aussi les messages d'opération correspondants aux portages,
  119. ceci dépend des paramètres <code>$input</code>, <code>$output</code> and
  120. <code>$fault</code>. <note>
  121. <para>
  122. Zend_Soap_Server génère 2 messages pour chaque opération de portage
  123. lorsque le service est décrit au travers de la classe
  124. <classname>Zend_Soap_Server</classname>: <itemizedlist>
  125. <listitem>
  126. <para>
  127. Le message d'entrée nommé <code>$methodName .
  128. 'Request'</code>.
  129. </para>
  130. </listitem>
  131. <listitem>
  132. <para>
  133. Les message de sortie nommé <code>$methodName .
  134. 'Response'</code>.
  135. </para>
  136. </listitem>
  137. </itemizedlist>
  138. </para>
  139. </note>
  140. </para>
  141. <para>
  142. Voyez <ulink url="http://www.w3.org/TR/wsdl#_request-response"></ulink> pour les
  143. détails.
  144. </para>
  145. </sect2>
  146. <sect2 id="zend.soap.wsdl.add_binding">
  147. <title><code>addBinding()</code></title>
  148. <para>
  149. <code>addBinding($name, $portType)</code> ajoute de nouvelles correspondances
  150. (bindings) au document WSDL (/definitions/binding).
  151. </para>
  152. <para>
  153. Le noeud du document WSDL "binding" définit le format du message et les détails du
  154. protocole pour les opérations et messages définis par un portage "portType" particulier
  155. (voyez <ulink url="http://www.w3.org/TR/wsdl#_bindings"></ulink>).
  156. </para>
  157. <para>
  158. La méthode crée le noeud de correspondance et le retourne. Il peut alors être
  159. utilisé.
  160. </para>
  161. <para>
  162. L'implémentation de Zend_Soap_Server utilise le nom <code>$serviceName .
  163. "Binding"</code> pour la correspondance ("binding") de l'élément du document
  164. WSDL.
  165. </para>
  166. </sect2>
  167. <sect2 id="zend.soap.wsdl.add_binding_operation">
  168. <title><code>addBindingOperation()</code></title>
  169. <para>
  170. <code>addBindingOperation($binding, $name, $input = false, $output = false, $fault
  171. = false)</code> ajoute une opération à l'élément de correspondance avec le nom spécifié
  172. (/definitions/binding/operation).
  173. </para>
  174. <para>
  175. Cette méthode prend un objet <code>XML_Tree_Node</code> tel que retourné par
  176. <code>addBinding()</code>, en paramètre (<code>$binding</code>) pour ajouter un élément
  177. "operation" avec des entrées input/output/false dépendantes des paramètres
  178. spécifiés.
  179. </para>
  180. <para>
  181. <classname>Zend_Soap_Server</classname> ajoute les correspondances pour chaque
  182. méthode du Web Service avec des entrées et sorties, définissant l'élément "soap:body"
  183. comme <code>&lt;soap:body use="encoded"
  184. encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/&gt;</code>
  185. </para>
  186. <para>
  187. Voyez les détails à <ulink
  188. url="http://www.w3.org/TR/wsdl#_bindings"></ulink>.
  189. </para>
  190. </sect2>
  191. <sect2 id="zend.soap.wsdl.add_soap_binding">
  192. <title><code>addSoapBinding()</code></title>
  193. <para>
  194. <code>addSoapBinding($binding, $style = 'document', $transport =
  195. 'http://schemas.xmlsoap.org/soap/http')</code> ajoute des correspondances (bindings)
  196. SOAP ("soap:binding") à l'élément (déjà lié à un portage de type) avec le style et le
  197. transport spécifié (<classname>Zend_Soap_Server</classname> utilise le style RPC sur
  198. HTTP).
  199. </para>
  200. <para>
  201. L'élément "/definitions/binding/soap:binding" est alors utilisé pour spécifier que
  202. la correspondance est relative au format du protocole SOAP.
  203. </para>
  204. <para>
  205. Voyez <ulink url="http://www.w3.org/TR/wsdl#_bindings"></ulink> pour les
  206. détails.
  207. </para>
  208. </sect2>
  209. <sect2 id="zend.soap.wsdl.add_soap_operation">
  210. <title><code>addSoapOperation()</code></title>
  211. <para>
  212. <code>addSoapOperation($binding, $soap_action)</code> ajoute une opération SOAP
  213. ("soap:operation") à l'élément de correspondance avec l'action spécifiée. L'attribut
  214. "style" de l'élément "soap:operation" n'est pas utilisé alors que le modèle de
  215. programmation (RPC-oriented ou document-oriented) devrait utiliser la méthode
  216. <code>addSoapBinding()</code>
  217. </para>
  218. <para>
  219. L'attribut "soapAction" de l'élément "/definitions/binding/soap:operation"
  220. spécifie la valeur de l'en-tête SOAPAction pour l'opération. Cet attribut est requis
  221. pour SOAP sur HTTP et <emphasis>ne doit pas</emphasis> être renseigné pour les autres
  222. modes de transports.
  223. </para>
  224. <para>
  225. <classname>Zend_Soap_Server</classname> utilise <code>$serviceUri . '#' .
  226. $methodName</code> pour le nom de l'action SOAP.
  227. </para>
  228. <para>
  229. Voyez <ulink url="http://www.w3.org/TR/wsdl#_soap:operation"></ulink> pour plus de
  230. détails.
  231. </para>
  232. </sect2>
  233. <sect2 id="zend.soap.wsdl.add_service">
  234. <title><code>addService()</code></title>
  235. <para>
  236. <code>addService($name, $port_name, $binding, $location)</code> ajoute un élément
  237. "/definitions/service" au document WSDL avec le nom du Web Service spécifié, le nom du
  238. portage, la correspondance, et l'adresse.
  239. </para>
  240. <para>
  241. WSDL 1.1 autorise d'avoir plusieurs types de portage par service. Cette
  242. particularité n'est pas utilisée dans <classname>Zend_Soap_Server</classname> et est non
  243. supportée par la classe <classname>Zend_Soap_Wsdl</classname>.
  244. </para>
  245. <para>
  246. Utilisations de <classname>Zend_Soap_Server</classname> : <itemizedlist>
  247. <listitem>
  248. <para><code>$name . 'Service'</code> comme nom du Web Service,</para>
  249. </listitem>
  250. <listitem>
  251. <para><code>$name . 'Port'</code> comme nom de portage des types,</para>
  252. </listitem>
  253. <listitem>
  254. <para>
  255. <code>'tns:' . $name . 'Binding'</code> <footnote>
  256. <para>
  257. <code>'tns:' namespace</code> est l'URI du script
  258. (<code>'http://' .$_SERVER['HTTP_HOST'] .
  259. $_SERVER['SCRIPT_NAME']</code>).
  260. </para>
  261. </footnote> comme nom de la correspondance,
  262. </para>
  263. </listitem>
  264. <listitem>
  265. <para>
  266. l'URI du script<footnote>
  267. <para>
  268. <code>'http://' .$_SERVER['HTTP_HOST'] .
  269. $_SERVER['SCRIPT_NAME']</code>
  270. </para>
  271. </footnote> en tant qu'URI du service pour les Web Service utilisant des
  272. classes.
  273. </para>
  274. </listitem>
  275. </itemizedlist> où <code>$name</code> est un nom de classe pour le Web Service
  276. utilisant des classes, ou un nom de script pour le Web Service qui utilise des
  277. fonctions.
  278. </para>
  279. <para>
  280. Voyez <ulink url="http://www.w3.org/TR/wsdl#_services"></ulink> pour les
  281. détails.
  282. </para>
  283. </sect2>
  284. <sect2 id="zend.soap.wsdl.types">
  285. <title>Correspondance de type</title>
  286. <para>
  287. Le WSDL de Zend_Soap utilise les correspondances suivantes pour faire correspondre
  288. les type SOAP à des types PHP : <itemizedlist>
  289. <listitem>
  290. <para>chaînes PHP &lt;-&gt; <code>xsd:string</code>.</para>
  291. </listitem>
  292. <listitem>
  293. <para>entiers PHP &lt;-&gt; <code>xsd:int</code>.</para>
  294. </listitem>
  295. <listitem>
  296. <para>flottants PHP &lt;-&gt; <code>xsd:float</code>.</para>
  297. </listitem>
  298. <listitem>
  299. <para>booléens PHP &lt;-&gt; <code>xsd:boolean</code>.</para>
  300. </listitem>
  301. <listitem>
  302. <para>tableaux PHP &lt;-&gt; <code>soap-enc:Array</code>.</para>
  303. </listitem>
  304. <listitem>
  305. <para>objets PHP &lt;-&gt; <code>xsd:struct</code>.</para>
  306. </listitem>
  307. <listitem>
  308. <para>
  309. Classe PHP &lt;-&gt; basé sur la stratégie des types complexes (Voir :
  310. <xref linkend="zend.soap.wsdl.types.add_complex" />)<footnote>
  311. <para>
  312. <classname>Zend_Soap_AutoDiscover</classname> sera créé avec
  313. la classe
  314. <classname>Zend_Soap_Wsdl_Strategy_DefaultComplexType</classname> en
  315. tant qu'algorithme de détection pour les types complexes. Le premier
  316. paramètre du constructeur AutoDiscover accepte toute stratégie de
  317. types complexes implémentant
  318. <classname>Zend_Soap_Wsdl_Strategy_Interface</classname> ou une
  319. chaîne correspondant au nom de la classe. Pour une compatibilité
  320. ascendante, avec <code>$extractComplexType</code> les variables
  321. booléennes sont analysées comme avec Zend_Soap_Wsdl. Regardez le
  322. manuel <link
  323. linkend="zend.soap.wsdl.types.add_complex">Zend_Soap_Wsdl sur
  324. l'ajout des types complexes</link> pour plus d'informations.
  325. </para>
  326. </footnote>.
  327. </para>
  328. </listitem>
  329. <listitem>
  330. <para>Type PHP vide &lt;-&gt; void.</para>
  331. </listitem>
  332. <listitem>
  333. <para>
  334. Si le type na aucune correspondance avec les valeurs ci-dessus, alors
  335. <code>xsd:anyType</code> est utilisé.
  336. </para>
  337. </listitem>
  338. </itemizedlist> Où <code>xsd:</code> est l'espace de noms
  339. "http://www.w3.org/2001/XMLSchema", <code>soap-enc:</code> est l'espace de noms
  340. "http://schemas.xmlsoap.org/soap/encoding/", <code>tns:</code> est un "espace de noms
  341. cible" pour le service.
  342. </para>
  343. <sect3 id="zend.soap.wsdl.types.retrieve">
  344. <title>Récupérer des infos sur les types</title>
  345. <para>
  346. <code>getType($type)</code> peut être utilisée pour récupérer la
  347. correspondance d'un type PHP spécifié : <programlisting language="php"><![CDATA[
  348. ...
  349. $wsdl = new Zend_Soap_Wsdl('My_Web_Service', $myWebServiceUri);
  350. ...
  351. $soapIntType = $wsdl->getType('int');
  352. ...
  353. class MyClass {
  354. ...
  355. }
  356. ...
  357. $soapMyClassType = $wsdl->getType('MyClass');
  358. ]]></programlisting></para>
  359. </sect3>
  360. <sect3 id="zend.soap.wsdl.types.add_complex">
  361. <title>Ajouter des infos sur les types complexes</title>
  362. <para>
  363. <code>addComplexType($type)</code> est utilisée pour ajouter des types
  364. complexes (classes PHP) à un document WSDL.
  365. </para>
  366. <para>
  367. C'est automatiquement utilisé par la méthode <code>getType()</code> pour
  368. ajouter les types complexes des paramètres de méthodes ou des types
  369. retournés.
  370. </para>
  371. <para>
  372. Sa détection et son algorithme de construction est basé sur la détection de
  373. stratégie des types complexes couramment active. Vous pouvez paramétrer la stratégie
  374. de détection soit en spécifiant le nom de classe sous la forme d'une chaîne de
  375. caractères ou une instance implémentant
  376. <classname>Zend_Soap_Wsdl_Strategy_Interface</classname> en tant que troisième
  377. paramètre du constructeur ou en utilisant la fonction
  378. <code>setComplexTypeStrategy($strategy)</code> de
  379. <classname>Zend_Soap_Wsdl</classname>. Les stratégies de détection suivantes
  380. existent couramment :
  381. </para>
  382. <itemizedlist>
  383. <listitem>
  384. <para>
  385. la classe
  386. <classname>Zend_Soap_Wsdl_Strategy_DefaultComplexType</classname> : activé
  387. par défaut (quand aucun troisième paramètre n'est fourni). Itère parmi les
  388. attributs publics d'un type de classe et les enregistre en tant que
  389. sous-types d'un type d'objet complexe.
  390. </para>
  391. </listitem>
  392. <listitem>
  393. <para>
  394. la classe <classname>Zend_Soap_Wsdl_Strategy_AnyType</classname> :
  395. caste tous les types complexes en un type XSD simple xsd:anyType. Attention
  396. ce raccourci pour la détection des types complexes peut probablement
  397. seulement être géré avec des langages faiblement typés comme le PHP.
  398. </para>
  399. </listitem>
  400. <listitem>
  401. <para>
  402. la classe
  403. <classname>Zend_Soap_Wsdl_Strategy_ArrayOfTypeSequence</classname> : cette
  404. stratégie permet de spécifier les paramètres de retour de type :
  405. <code>int[]</code> ou <code>string[]</code>. Il peut seulement gérer les
  406. types PHP simples comme int, string, boolean, float et ainsi de suite, mais
  407. permet de spécifier des tableaux imbriqués de tableaux de type.
  408. </para>
  409. </listitem>
  410. <listitem>
  411. <para>
  412. la classe
  413. <classname>Zend_Soap_Wsdl_Strategy_ArrayOfTypeComplex</classname> : cette
  414. stratégie permet de détecter des tableaux complexes d'objets. Les types
  415. d'objets sont détectés sur la base de
  416. <classname>Zend_Soap_Wsdl_Strategy_DefaultComplexType</classname> et un
  417. tableau enveloppe cette définition.
  418. </para>
  419. </listitem>
  420. <listitem>
  421. <para>
  422. la classe <classname>Zend_Soap_Wsdl_Strategy_Composite</classname> :
  423. cette stratégie peut combiner toutes les stratégies en connectant les types
  424. complexes PHP (nom de classe) à la stratégie désirée grâce à la méthode
  425. <code>connectTypeToStrategy($type, $strategy)</code>. Une carte de
  426. correspondance complète de types peut être fourni au constructeur sous la
  427. forme d'un tableau de paires <code>$type</code> -&gt;
  428. <code>$strategy</code>. Le second paramètre spécifie la stratégie par défaut
  429. si un type inconnu est ajouté. La valeur par défaut de ce paramètre est la
  430. stratégie
  431. <classname>Zend_Soap_Wsdl_Strategy_DefaultComplexType</classname>.
  432. </para>
  433. </listitem>
  434. </itemizedlist>
  435. <para>
  436. la méthode <code>addComplexType()</code> crée un élément
  437. "<code>/definitions/types/xsd:schema/xsd:complexType</code>" pour chaque type
  438. complexe décrit avec le nom d'une classe PHP spécifiée.
  439. </para>
  440. <para>
  441. Les propriétés des classes <emphasis>doivent</emphasis> posséder un bloc de
  442. documentation avec le type PHP en question, afin que la propriété soit incluse dans
  443. la description WSDL.
  444. </para>
  445. <para>
  446. <code>addComplexType()</code> vérifie sur le type est déjà décrit dans la
  447. section des types du document WSDL.
  448. </para>
  449. <para>
  450. Ceci évite les duplications et récursions si cette méthode est appelée plus
  451. d'une fois.
  452. </para>
  453. <para>
  454. Voyez <ulink url="http://www.w3.org/TR/wsdl#_types"></ulink> pour plus de
  455. détails.
  456. </para>
  457. </sect3>
  458. </sect2>
  459. <sect2 id="zend.soap.wsdl.add_documentation">
  460. <title><code>addDocumentation()</code></title>
  461. <para>
  462. <code>addDocumentation($input_node, $documentation)</code> ajoute de la
  463. documentation lisible ("human readable") grâce à l'élément optionnel
  464. "wsdl:document".
  465. </para>
  466. <para>
  467. L'élément "/definitions/binding/soap:binding" est utilisé pour dire que la
  468. correspondance est liée au format du protocole SOAP.
  469. </para>
  470. <para>
  471. Voyez <ulink url="http://www.w3.org/TR/wsdl#_documentation"></ulink> pour les
  472. détails.
  473. </para>
  474. </sect2>
  475. <sect2 id="zend.soap.wsdl.retrieve">
  476. <title>Récupérer un document WSDL finalisé</title>
  477. <para>
  478. <code>toXML()</code>, <code>toDomDocument()</code> et <code>dump($filename =
  479. false)</code> peuvent être utilisées pour récupérer un document WSDL sous forme de XML,
  480. de structure DOM, ou de fichier.
  481. </para>
  482. </sect2>
  483. <sect2 id="zend.soap.wsdl.parser">
  484. <title>Analyse des documents WSDL</title>
  485. <para>
  486. Zend_Soap_Wsdl contient aussi un analyseur de documents WSDL qui a son application
  487. la plus importante dans les tests unitaires et dans la génération de code pour les
  488. services Web SOAP (client et serveur). L'exemple suivant vous montre comment l'analyseur
  489. peut être utilisé :
  490. </para>
  491. <programlisting language="php"><![CDATA[
  492. // Chargement du WSDL dans un DOMDocument
  493. $dom = new DOMDocument();
  494. $dom->loadXML($wsdlString);
  495. // Création de l'analyseur
  496. $parser = Zend_Soap_Wsdl_Parser::factory($dom);
  497. $result = $parser->parse();
  498. // Nom du service Web
  499. echo $result->getName();
  500. // Ports d'accès et éléments internes
  501. foreach($result->ports AS $port) {
  502. echo $port->getName();
  503. foreach($port->bindings AS $binding) {
  504. echo $binding->getName();
  505. foreach($binding->operations AS $operation) {
  506. echo $operation->getName();
  507. echo $operation->inputMessage->getName();
  508. echo $operation->outputMessage->getName();
  509. }
  510. }
  511. }
  512. // Vous pouvez accéder aux liaisons (bindings), aux messages, aux opérations
  513. // et tout autre éléments directement
  514. foreach($result->operations AS $operation) {
  515. // faire qqch
  516. }
  517. foreach($result->bindings AS $binding {
  518. // faire qqch
  519. }
  520. foreach($result->messages AS $message) {
  521. // faire qqch
  522. }
  523. foreach($result->services AS $service) {
  524. // faire qqch
  525. }
  526. foreach($result->types AS $type) {
  527. // faire qqch
  528. }
  529. ]]></programlisting>
  530. <para>
  531. Tous les éléments implémentent l'interface
  532. <classname>Zend_Soap_Wsdl_Element_Interface</classname> qui déclare les fonctions
  533. <code>getName()</code> et <code>getDocumentation()</code> fournissant respectivement un
  534. identifiant unique de l'élément et sa documentation. Tous les éléments possèdent des
  535. propriétés publiques qui décrivent son état avec plus de détails et qui contient aussi
  536. ses dépendances imbriquées pour un accès itérable facile.
  537. </para>
  538. </sect2>
  539. </sect1>