Zend_Soap_Wsdl.xml 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15234 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.soap.wsdl">
  5. <title>WSDL Zugriffsmethoden</title>
  6. <note>
  7. <para>
  8. Die <classname>Zend_Soap_Wsdl</classname> Klasse wird von der Zend_Soap_Server Komponente intern verwendet
  9. um mit WSDL Dokumenten zu arbeiten. Trotzdem könnte man die Funktionalität die von dieser
  10. Klasse angeboten wird auch für eigene Zwecke verwendet werden. Das Zend_Soap_Wsdl Paket enthält
  11. sowohl einen Parser als auch einen Ersteller für WSDL Dokumente.
  12. </para>
  13. <para>
  14. Wenn man nicht plant das zu tun, kann dieses Kapitel der Dokumentation übersprungen werden.
  15. </para>
  16. </note>
  17. <sect2 id="zend.soap.wsdl.constructor">
  18. <title>Zend_Soap_Wsdl Konstruktor.</title>
  19. <para>
  20. Der <classname>Zend_Soap_Wsdl</classname> Konstruktor nimmt drei Parameter:
  21. <orderedlist>
  22. <listitem>
  23. <simpara><code>$name</code> - Name des Web Services der beschrieben wird.</simpara>
  24. </listitem>
  25. <listitem>
  26. <simpara>
  27. <code>$uri</code> - URI wo das WSDL vorhanden sein wird (könnte auch eine Referenz
  28. zu einer Datei auf dem Dateisystem sein.)
  29. </simpara>
  30. </listitem>
  31. <listitem>
  32. <simpara>
  33. <code>$strategy</code> - Optionales Flag das verwendet wird um die Strategie für
  34. die Erkennung von komplexen Typen (Objekte) zu identifizieren. Das war vor der
  35. Version 1.7 ein boolscher <code>$extractComplexTypes</code> und kann aus Gründen
  36. der Rückwärtskompatibilität noch immer als Boolean gesetzt werden. Standardmäßig
  37. ist das Erkennungsverhalten von 1.6 gesetzt. Um mit Strategien für komplexe
  38. Typenerkennung weiterzumachen lesen wie weiter im Kapitel:
  39. <xref linkend="zend.soap.wsdl.types.add_complex" />.
  40. </simpara>
  41. </listitem>
  42. </orderedlist>
  43. </para>
  44. </sect2>
  45. <sect2 id="zend.soap.wsdl.addmessage">
  46. <title>Die addMessage() Methode.</title>
  47. <para>
  48. Die <code>addMessage($name, $parts)</code> Methode fügt eine neue Nachrichten Beschreibung
  49. zu einem WSDL Dokumetn hinzu (/definitions/message Element).
  50. </para>
  51. <para>
  52. Jede Nachricht korrespondiert zu einer Methode im Sinne von <classname>Zend_Soap_Server</classname>
  53. und <classname>Zend_Soap_Client</classname> Funktionalität.
  54. </para>
  55. <para>
  56. Der <code>$name</code> Parameter repräsentiert den Namen der Nachricht.
  57. </para>
  58. <para>
  59. Der <code>$parts</code> Parameter ist ein Array von Nachrichten Teilen welche SOAP Aufruf
  60. Parameter beschreiben. Es ist ein assoziatives Array:
  61. 'part name' (SOAP Aufruf Parameter Name) =&gt; 'part type'.
  62. </para>
  63. <para>
  64. Das Typ Mapping Management wird durchgeführt indem die <code>addTypes()</code>,
  65. <code>addTypes()</code> und <code>addComplexType()</code> Methoden ausgeführt werden (siehe anbei).
  66. </para>
  67. <note>
  68. <para>
  69. Nachrichten Teile können entweder 'element' oder 'type' Attribute für das typisieren
  70. verwenden (siehe <ulink url="http://www.w3.org/TR/wsdl#_messages"/>).
  71. </para>
  72. <para>
  73. 'element' Attribute müssen zu einem entsprechenden Element von Daten Typ Definition referieren.
  74. 'type' zu einem entsprechenden complexType Eintrag.
  75. </para>
  76. <para>
  77. Alle standardmäßigen XSD Typen haben beide 'element' und 'complexType' Definitionen
  78. (siehe <ulink url="http://schemas.xmlsoap.org/soap/encoding/"/>).
  79. </para>
  80. <para>
  81. Alle nicht-standardmäßigen Typen, welche hinzugefügt werden können durch verwenden der
  82. <classname>Zend_Soap_Wsdl::addComplexType()</classname> Methode, sind beschrieben durch Verwendung
  83. des 'complexType' Nodes des '/definitions/types/schema/' Abschnitts des WSDL Dokuments.
  84. </para>
  85. <para>
  86. <code>addMessage()</code> Methoden verwenden also immer das 'type' Attribut um Typen zu
  87. beschreiben.
  88. </para>
  89. </note>
  90. </sect2>
  91. <sect2 id="zend.soap.wsdl.add_port_type">
  92. <title>Die addPortType() Methode.</title>
  93. <para>
  94. Die <code>addPortType($name)</code> Methode fügt neue Port Typen zu einem WSDL Dokument
  95. (/definitions/portType) mit dem spezifizierten Port Typ Namen hinzu.
  96. </para>
  97. <para>
  98. Es verbindet ein Set von Web Service Methoden die im Sinne der Zend_Soap_Server Implementation
  99. definiert sind.
  100. </para>
  101. <para>
  102. Siehe <ulink url="http://www.w3.org/TR/wsdl#_porttypes"/> für Details.
  103. </para>
  104. </sect2>
  105. <sect2 id="zend.soap.wsdl.add_port_operation">
  106. <title>Die addPortOperation() Methode.</title>
  107. <para>
  108. Die <code>addPortOperation($portType, $name, $input = false, $output = false, $fault = false)</code>
  109. Methode fügt eine neue Port Operation zum spezifizierten Port Typ des WSDL Dokuments hinzu
  110. (/definitions/portType/operation).
  111. </para>
  112. <para>
  113. Jede Port Operation korrespondiert zu einer Methode der Klasse (wenn der Web Service auf einer
  114. Klasse basiert) oder Funktion (wenn der Web Service auf einem Set von Methoden basiert) im Sinne der
  115. Zend_Soap_Server Implementation.
  116. </para>
  117. <para>
  118. Sie fügt auch eine korrespondierende Port Operations Nachricht hinzu anhängig von den spezifizierten
  119. <code>$input</code>, <code>$output</code> und <code>$fault</code> Parametern.
  120. <note>
  121. <para>
  122. Die Zend_Soap_Server Komponente erzeugt zwei Nachrichten für jede Port Operation wärend das
  123. Service das auf der <classname>Zend_Soap_Server</classname> Klasse basiert beschrieben wird:
  124. <itemizedlist>
  125. <listitem>
  126. <para>
  127. Eine Eingabe Nachricht mit dem Namen <code>$methodName . 'Request'</code>.
  128. </para>
  129. </listitem>
  130. <listitem>
  131. <para>
  132. Eine Ausgabe Nachricht mit dem Namen <code>$methodName . 'Response'</code>.
  133. </para>
  134. </listitem>
  135. </itemizedlist>
  136. </para>
  137. </note>
  138. </para>
  139. <para>
  140. Siehe <ulink url="http://www.w3.org/TR/wsdl#_request-response"/> für Details.
  141. </para>
  142. </sect2>
  143. <sect2 id="zend.soap.wsdl.add_binding">
  144. <title>Die addBinding() Methode.</title>
  145. <para>
  146. Die <code>addBinding($name, $portType)</code> Methode fügt neue Bindungen in das WSDL Dokument ein
  147. (/definitions/binding).
  148. </para>
  149. <para>
  150. Der 'binding' WSDL Dokument Knoten definiert das Nachrichtenformat und Protokolldetails für
  151. Operationen und Nachrichten die von einem speziellen portType definiert sind
  152. (siehe <ulink url="http://www.w3.org/TR/wsdl#_bindings"/>).
  153. </para>
  154. <para>
  155. Die Methode erzeugt einen Bindungsknoten und gibt diesen zurück. Dieser kann dann verwendet werden
  156. um mit aktuellen Daten gefüllt zu werden.
  157. </para>
  158. <para>
  159. Die Zend_Soap_Server Implementation verwendet den <code>$serviceName . 'Binding'</code> Namen
  160. für das 'binding' Element eines WSDL Dokuments.
  161. </para>
  162. </sect2>
  163. <sect2 id="zend.soap.wsdl.add_binding_operation">
  164. <title>Die addBindingOperation() Methode.</title>
  165. <para>
  166. Die <code>addBindingOperation($binding, $name, $input = false, $output = false, $fault = false)</code>
  167. Methode fügt eine Operation zu einem gebundenen Element mit dem spezifizierten Namen hinzu
  168. (/definitions/binding/operation).
  169. </para>
  170. <para>
  171. Sie nimmt das <code>XML_Tree_Node</code> Objekt das von <code>addBinding()</code> zurückgegeben
  172. wird als Eingabe (<code>$binding</code> Parameter) um ein 'operation' Element mit
  173. Eingabe/Ausgabe/Falsch Einträgen hinzuzufügen abhängig von den spezifizierten Parametern.
  174. </para>
  175. <para>
  176. Die Zend_Soap_Server Implementation fügt korrespondierende gebundene Einträge für jede
  177. Web Service Methode mit Eingabe und Ausgabe Einträgen hinzu die ein 'soap:body' Element als
  178. '&lt;soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/&gt; definieren.
  179. </para>
  180. <para>
  181. Siehe <ulink url="http://www.w3.org/TR/wsdl#_bindings"/> für Details.
  182. </para>
  183. </sect2>
  184. <sect2 id="zend.soap.wsdl.add_soap_binding">
  185. <title>Die addSoapBinding() Methode.</title>
  186. <para>
  187. Die <code>addSoapBinding($binding, $style = 'document', $transport = 'http://schemas.xmlsoap.org/soap/http')</code>
  188. Methode fügt einen SOAP Bindung Eintrag ('soap:binding') zum Bindung Element (welches bereits
  189. zu einigen Port Typen verbunden ist) mit dem spezifizierten Stil und Transport hinzu
  190. (Die Zend_Soap_Server Implementation verwendet RPC Stil über HTTP).
  191. </para>
  192. <para>
  193. Das '/definitions/binding/soap:binding' Element wird verwendet um zu signieren das das Bindung zum
  194. SOAP Protokoll Format gebunden ist.
  195. </para>
  196. <para>
  197. Siehe <ulink url="http://www.w3.org/TR/wsdl#_bindings"/> für Details.
  198. </para>
  199. </sect2>
  200. <sect2 id="zend.soap.wsdl.add_soap_operation">
  201. <title>Die addSoapOperation() Methode.</title>
  202. <para>
  203. Die <code>addSoapOperation($binding, $soap_action)</code> Methode fügt einen SOAP Operations Eintrag
  204. ('soap:operation') zum Bindungs Element mit den spezifizierten Aktionen hinzu. Das 'style' Attribut
  205. des 'soap:operation' Elements wird nicht verwendet seit das Programmier Modell (RPC-orientiert
  206. oder Dokument-orientiert) die <code>addSoapBinding()</code> Methode verwenden kann.
  207. </para>
  208. <para>
  209. Das 'soapAction' Attribut des '/definitions/binding/soap:operation' Elements spezifiziert den Wert
  210. des SOAPAction Headers für diese Operation. Dieses Attribut wird für SOAP über HTTP benötigt und
  211. <emphasis>darf in keinem Fall</emphasis> für andere Transporte spezifiziert werden.
  212. </para>
  213. <para>
  214. Die Zend_Soap_Server Implementation verwendet <code>$serviceUri . '#' . $methodName</code> für
  215. den SOAP Operations Action Namen.
  216. </para>
  217. <para>
  218. Siehe <ulink url="http://www.w3.org/TR/wsdl#_soap:operation"/> für Details.
  219. </para>
  220. </sect2>
  221. <sect2 id="zend.soap.wsdl.add_service">
  222. <title>Die addService() Methode.</title>
  223. <para>
  224. Die <code>addService($name, $port_name, $binding, $location)</code> Methode fügt dem WSDL Dokument
  225. ein '/definitions/service' Element mit dem spezifizierten Web Service Namen, Port Namen, Bindung
  226. und Ort hinzu.
  227. </para>
  228. <para>
  229. WSDL 1.1 erlaubt es verschiedene Port Typen pro Service zu haben (Sets von Operationen). Diese
  230. Fähigkeit wird von der Zend_Soap_Server Implementation nicht verwendet und von der
  231. <classname>Zend_Soap_Wsdl</classname> Klasse nicht unterstützt.
  232. </para>
  233. <para>
  234. Die Zend_Soap_Server Implementation verwendet:
  235. <itemizedlist>
  236. <listitem>
  237. <para>
  238. <code>$name . 'Service'</code> als Web Service Name,
  239. </para>
  240. </listitem>
  241. <listitem>
  242. <para>
  243. <code>$name . 'Port'</code> als Port Typ Name,
  244. </para>
  245. </listitem>
  246. <listitem>
  247. <para>
  248. <code>'tns:' . $name . 'Binding'</code>
  249. <footnote>
  250. <para>
  251. <code>'tns:' namespace</code> wird als Skript URI definiert
  252. (<code>'http://' .$_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME']</code>).
  253. </para>
  254. </footnote>
  255. als Bindungs Name,
  256. </para>
  257. </listitem>
  258. <listitem>
  259. <para>
  260. Die Skript URI<footnote><para><code>'http://' .$_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME']</code></para></footnote>
  261. als eine Service URI für die Web Service Definition bei Verwendung von Klassen.
  262. </para>
  263. </listitem>
  264. </itemizedlist>
  265. wobei <code>$name</code> der Klassenname für die Web Service Definition ist wenn Klassen verwendet
  266. werden und Skript Name für die Web Service Definition wenn ein Set von Funktionen verwendet wird.
  267. </para>
  268. <para>
  269. Siehe <ulink url="http://www.w3.org/TR/wsdl#_services"/> für Details.
  270. </para>
  271. </sect2>
  272. <sect2 id="zend.soap.wsdl.types">
  273. <title>Typ Entsprechung.</title>
  274. <para>
  275. Die Zend_Soap WSDL Implementation der Zugriffsmethoden verwendet die folgenden Typ Entsprechungen
  276. zwischen PHP und SOAP Typen:
  277. <itemizedlist>
  278. <listitem>
  279. <para>PHP Strings &lt;-&gt; <code>xsd:string</code>.</para>
  280. </listitem>
  281. <listitem>
  282. <para>PHP Integer &lt;-&gt; <code>xsd:int</code>.</para>
  283. </listitem>
  284. <listitem>
  285. <para>PHP Float und Double &lt;-&gt; <code>xsd:float</code>.</para>
  286. </listitem>
  287. <listitem>
  288. <para>PHP Boolean &lt;-&gt; <code>xsd:boolean</code>.</para>
  289. </listitem>
  290. <listitem>
  291. <para>PHP Arrays &lt;-&gt; <code>soap-enc:Array</code>.</para>
  292. </listitem>
  293. <listitem>
  294. <para>PHP Objekt &lt;-&gt; <code>xsd:struct</code>.</para>
  295. </listitem>
  296. <listitem>
  297. <para>
  298. PHP Klasse &lt;-&gt; basierend auf der Strategie der komplexen Typen (Siehe: <xref linkend="zend.soap.wsdl.types.add_complex" />)
  299. <footnote>
  300. <para>
  301. Standardmäßig wird <classname>Zend_Soap_Wsdl</classname> mit der Klasse
  302. <classname>Zend_Soap_Wsdl_Strategy_DefaultComplexType</classname> als Erkennungsalgorithmus
  303. für komplexe Typen erstellt. Der erste Parameter des AutoDiscover
  304. Constructors nimmt jede Strategie für komplexe Typen die
  305. <classname>Zend_Soap_Wsdl_Strategy_Interface</classname> implementiert oder einen
  306. String mit dem Namen dieser Klasse. Für Rückwärtskompatibilität mit den
  307. dem Boolean <code>$extractComplexType</code> werden Variablen auf dem
  308. folgenden Weg geparst: Bei true, wird
  309. <classname>Zend_Soap_Wsdl_Strategy_DefaultComplexType</classname> verwendet, und bei
  310. false <classname>Zend_Soap_Wsdl_Strategy_AnyType</classname>.
  311. </para>
  312. </footnote>.
  313. </para>
  314. </listitem>
  315. <listitem>
  316. <para>PHP Void &lt;-&gt; Leerer Typ.</para>
  317. </listitem>
  318. <listitem>
  319. <para>Wenn der Typ auf irgendeinem Grund zu keinem dieser Typen passt, dann wird
  320. <code>xsd:anyType</code> verwendet.</para>
  321. </listitem>
  322. </itemizedlist>
  323. Wo <code>xsd:</code> ein "http://www.w3.org/2001/XMLSchema" Namespace ist, ist
  324. <code>soap-enc:</code> ein "http://schemas.xmlsoap.org/soap/encoding/" Namespace,
  325. und <code>tns:</code> ist ein "Ziel Namespace" für das Service.
  326. </para>
  327. <sect3 id="zend.soap.wsdl.types.retrieve">
  328. <title>Empfangen von Typ Informationen.</title>
  329. <para>
  330. Die <code>getType($type)</code> Methode kann verwendet werden um ein Mapping für einen
  331. spezifizierten PHP Typ zu erhalten:
  332. <programlisting role="php"><![CDATA[
  333. ...
  334. $wsdl = new Zend_Soap_Wsdl('My_Web_Service', $myWebServiceUri);
  335. ...
  336. $soapIntType = $wsdl->getType('int');
  337. ...
  338. class MyClass {
  339. ...
  340. }
  341. ...
  342. $soapMyClassType = $wsdl->getType('MyClass');
  343. ]]></programlisting>
  344. </para>
  345. </sect3>
  346. <sect3 id="zend.soap.wsdl.types.add_complex">
  347. <title>Hinzufügen komplexer Typ Informationen.</title>
  348. <para>
  349. Die <code>addComplexType($type)</code> Methode wird verwendet um komplexe Typen
  350. (PHP Klassen) zu einem WSDL Dokument hinzuzufügen.
  351. </para>
  352. <para>
  353. Es wird automatisch von der <code>getType()</code> Methode verwendet und fügt einen
  354. korrespondierenden komplexen Typen von Methodenparametern oder Rückgabetypen hinzu.
  355. </para>
  356. <para>
  357. Der Algorithmus für das Erkennen und Aufbauen basiert auf der aktuellen Strategie für
  358. die aktive Erkennung von komplexen Typen. Man kann die Strategie für die Erkennung setzen
  359. indem entweder der Klassenname as String spezifiziert wird, oder indem eine Instanz einer
  360. <classname>Zend_Soap_Wsdl_Strategy_Interface</classname> Implementation als dritter Parameter des
  361. Konstruktors verwendet wird, oder indem die <code>setComplexTypeStrategy($strategy)</code>
  362. Funktion von Zend_Soap_Wsdl verwendet wird. Die folgenden Strategien für die Erkennung
  363. existieren aktuell:
  364. </para>
  365. <itemizedlist>
  366. <listitem>
  367. <para>Klasse <classname>Zend_Soap_Wsdl_Strategy_DefaultComplexType</classname>: Standardmäßig
  368. aktiviert (wenn dem Konstruktor kein dritter Parameter gesetzt wird). Er iteriert
  369. über die öffentlichen Attribute eines Klassentyps und registriert Sie als Untertypen
  370. des komplexen Objekttyps.</para>
  371. </listitem>
  372. <listitem>
  373. <para>Klasse <classname>Zend_Soap_Wsdl_Strategy_AnyType</classname>: Castet alle komplexen Typen
  374. in einen einfachen XSD Typ xsd:anyType. Vorsicht ist angeraten da diese Abkürzung für
  375. die Erkennung von komplexen Typen kann warscheinlich nur von lose typisierten Sprachen
  376. wie PHP erfolgreich behandelt werden.
  377. </para>
  378. </listitem>
  379. <listitem>
  380. <para>Klasse <classname>Zend_Soap_Wsdl_Strategy_ArrayOfTypeSequence</classname>: Diese Strategie
  381. erlaubt es die Rückgabeparameter mit diesen Typen zu spezifizieren: <code>int[]</code>
  382. oder <code>string[]</code>. Er kann einfache PHP Typen wie Int, String, Boolean, Float
  383. und so weiter behandeln, erlaubt aber die Spezifikation von verschachtelten Arrays oder
  384. Typen von Arrays.</para>
  385. </listitem>
  386. <listitem>
  387. <para>Klasse <classname>Zend_Soap_Wsdl_Strategy_ArrayOfTypeComplex</classname>: Diese Strategie
  388. erlaubt die Erkennung von sehr komplexen Arrays von Objekten. Objekttypen werden basierend
  389. auf <classname>Zend_Soap_Wsdl_Strategy_DefaultComplexType</classname> erkannt und ein Array wird
  390. um diese Definition gewrappt.</para>
  391. </listitem>
  392. <listitem>
  393. <para>Klasse <classname>Zend_Soap_Wsdl_Strategy_Composite</classname>: Diese Strategie kann
  394. alle Strategien kombinieren indem PHP komplexe Typen (Klassennamen) zu der gewünschten
  395. Strategie über die <code>connectTypeToStrategy($type, $strategy)</code> Methode verbunden
  396. werden. Eine komplette Typemap kann dem Contructor als Array, mit
  397. <code>$type</code> -> <code>$strategy</code> Paaren angegeben werden. Der zweite Parameter
  398. spezifiziert die Standardstrategie die verwendet wird wenn ein unbekannter Typ hinzugefügt
  399. werden soll. Diese Parameter ist standardmäßig die
  400. <classname>Zend_Soap_Wsdl_Strategy_DefaultComplexType</classname> Strategie.</para>
  401. </listitem>
  402. </itemizedlist>
  403. <para>
  404. Die <code>addComplexType()</code> Methode erstellt ein
  405. '/definitions/types/xsd:schema/xsd:complexType' Element für jeden beschriebenen komplexen
  406. Typen mit dem Namen der spezifizierten PHP Klasse.
  407. </para>
  408. <para>
  409. Die Klassen Eigenschaften <emphasis>MÜSSEN</emphasis> ein Docblock Kapitel mit den
  410. beschriebenen PHP Typen haben damit die Eigenschaft in die WSDL Beschreibung hinzugefügt wird.
  411. </para>
  412. <para>
  413. <code>addComplexType()</code> prüft ob der Typ bereits im Typ Kapitel des WSDL Dokuments
  414. beschrieben wird.
  415. </para>
  416. <para>
  417. Es verhindert Duplikate wenn diese Methode zwei oder mehrmals aufgerufen wird und auch
  418. Rekursionen im Kapitel der Typ Definitionen.
  419. </para>
  420. <para>
  421. Siehe <ulink url="http://www.w3.org/TR/wsdl#_types"/> für Details.
  422. </para>
  423. </sect3>
  424. </sect2>
  425. <sect2 id="zend.soap.wsdl.add_documentation">
  426. <title>Die addDocumentation() Methode.</title>
  427. <para>
  428. Die <code>addDocumentation($input_node, $documentation)</code> Methode fügt menschlich lesbare
  429. Dokumentation hinzu indem das optionale 'wsdl:document' Element verwendet wird.
  430. </para>
  431. <para>
  432. Das '/definitions/binding/soap:binding' Element wird verwendet um zu signieren das die Bindung
  433. zum SOAP Protokoll Format gebunden wurde.
  434. </para>
  435. <para>
  436. Siehe <ulink url="http://www.w3.org/TR/wsdl#_documentation"/> für Details.
  437. </para>
  438. </sect2>
  439. <sect2 id="zend.soap.wsdl.retrieve">
  440. <title>Das endgültige WSDL Dokument erhalten.</title>
  441. <para>
  442. Die <code>toXML()</code>, <code>toDomDocument()</code> und <code>dump($filename = false)</code>
  443. Methoden können verwendet werden um das WSDL Dokument als XML, DOM Struktur oder Datei zu erhalten.
  444. </para>
  445. </sect2>
  446. <sect2 id="zend.soap.wsdl.parser">
  447. <title>Parsen von WSDL Dokumentenrsing WSDL documents</title>
  448. <para>
  449. Zend_Soap_Wsdl enthält auch einen Parser für WSDL Dokumente der seine eigene Hauptanwendung für
  450. das Unit-Testen und die Code-Erzeugung von SOAP Webservices (Client und Server) hat. Das folgende
  451. Beispiel zeigt wie der Parser verwendet werden kann:
  452. </para>
  453. <programlisting role="php"><![CDATA[
  454. // Laden von WSDL in DOMDocument
  455. $dom = new DOMDocument();
  456. $dom->loadXML($wsdlString);
  457. // Parser erstellen
  458. $parser = Zend_Soap_Wsdl_Parser::factory($dom);
  459. $result = $parser->parse();
  460. // Name des Webservices
  461. echo $result->getName();
  462. // Auf Ports und innere Element zugreifen
  463. foreach($result->ports AS $port) {
  464. echo $port->getName();
  465. foreach($port->bindings AS $binding) {
  466. echo $binding->getName();
  467. foreach($binding->operations AS $operation) {
  468. echo $operation->getName();
  469. echo $operation->inputMessage->getName();
  470. echo $operation->outputMessage->getName();
  471. }
  472. }
  473. }
  474. // Man kann auf Bindungen, Nachrichten und Operationen und andere
  475. // Elemente direkt zugreifen
  476. foreach($result->operations AS $operation) {
  477. // mach was
  478. }
  479. foreach($result->bindings AS $binding {
  480. // mach was
  481. }
  482. foreach($result->messages AS $message) {
  483. // mach was
  484. }
  485. foreach($result->services AS $service) {
  486. // mach was
  487. }
  488. foreach($result->types AS $type) {
  489. // mach was
  490. }
  491. ]]></programlisting>
  492. <para>Alle Element implementieren das Interface <classname>Zend_Soap_Wsdl_Element_Interface</classname> das
  493. auf eine <code>getName()</code> und <code>getDocumentation()</code> Funktion mit den eindeutigen
  494. Identifikatoren des Elements und seiner Dokumentation verweist. Alle Elemente haben öffentliche
  495. Eigenschaften die Ihren Status detailierter beschreiben und auch Ihre untergeordneten Abhängigkeiten
  496. für den einfachen Zugriff über Iteration enthalten.</para>
  497. </sect2>
  498. </sect1>