VirtualBox

source: vbox/trunk/src/VBox/Main/webservice/websrv-wsdl.xsl@ 17581

Last change on this file since 17581 was 16122, checked in by vboxsync, 16 years ago

fixed webservice copyright

  • Property svn:eol-style set to native
File size: 62.8 KB
Line 
1<?xml version="1.0"?>
2
3<!--
4
5 websrv-wsdl.xsl:
6 XSLT stylesheet that generates vboxweb.wsdl from
7 VirtualBox.xidl. This WSDL file represents our
8 web service API..
9
10 Copyright (C) 2006-2007 Sun Microsystems, Inc.
11
12 This file is part of VirtualBox Open Source Edition (OSE), as
13 available from http://www.virtualbox.org. This file is free software;
14 you can redistribute it and/or modify it under the terms of the GNU
15 General Public License (GPL) as published by the Free Software
16 Foundation, in version 2 as it comes in the "COPYING" file of the
17 VirtualBox OSE distribution. VirtualBox OSE is distributed in the
18 hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
19
20 Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
21 Clara, CA 95054 USA or visit http://www.sun.com if you need
22 additional information or have any questions.
23-->
24
25<!--
26 A WSDL document describes a web service using these major elements:
27 Element Defines
28 <types> The data types used by the web service, described in XML Schema
29 syntax.
30 <message> The messages used by the web service. A message is a function call
31 and with it come "parts", which are the parameters.
32 <portType> The operations performed by the web service. A portType can be thought
33 of as a class or, in COM terms, as an interface.
34 <binding> The communication protocols used by the web service.
35
36 The root tag is <definitions>.
37
38 Representing COM interfaces is tricky in WSDL 1.1, which doesn't really have them.
39 WSDL only knows about "port types", which are an abstract representation
40 of a group of functions. So for each "interface", we need to emit
41 a "port type"; in the port type, we declare each "interface method"
42 as one "operation". Each operation in turn consists of at least one
43 message for the method invocation, which contains all the "in" and
44 "inout" arguments. An optional second message for the response contains
45 the return value, if one is present in the IDL (called "_return" to
46 avoid name clashes), together with all the "out" and "inout" arguments.
47 Each of these messages, however, need to be independently declarared
48 using the "message" element outside of the "port type" declaration.
49
50 As an example: To create this XPCOM IDL:
51
52 void createMachine (
53 in wstring baseFolder,
54 in wstring name,
55 [retval] out IMachine machine
56 );
57
58 the following exists in the XIDL:
59
60 <interface name="ifname">
61 <method name="createMachine">
62 <param name="baseFolder" type="wstring" dir="in" />
63 <param name="name" type="wstring" dir="in" />
64 <param name="machine" type="IMachine" dir="return" />
65 </method>
66 </interface>
67
68 So, we have two "in" parameters, and one "out" parameter. The
69 operation therefore requires two messages (one for the request,
70 with the two "in" parameters, and one for the result with the
71 return value). With RPC/encoded style, we end up with this:
72
73 <message name="ifname.methodname_Request">
74 <part name="baseFolder" type="xsd:string" />
75 <part name="name" type="xsd:string" />
76 </message>
77 <message name="ifname.methodname_Result">
78 <part name="_return" type="IMachine" />
79 </message>
80 <portType name="ifname">
81 <operation name="methodname"
82 <input message="ifname.methodname_Request" />
83 <output message="ifname.methodname_Result" />
84 </operation>
85 </portType>
86
87 With document/literal style, things get even more verbose, as
88 instead of listing the arguments and return values in the messages,
89 we declare a struct-like complexType in the <types> section
90 instead and then reference that type in the messages.
91-->
92
93<xsl:stylesheet
94 version="1.0"
95 targetNamespace="http://schemas.xmlsoap.org/wsdl/"
96 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
97 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
98 xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
99 xmlns:vbox="http://www.virtualbox.org/"
100 xmlns:exsl="http://exslt.org/common"
101 extension-element-prefixes="exsl">
102
103<xsl:param name="G_argDebug" />
104
105<xsl:output
106 method="xml"
107 version="1.0"
108 encoding="utf-8"
109 indent="yes"/>
110
111<xsl:strip-space
112 elements="*" />
113
114<!--**********************************************************************
115 *
116 * global XSLT variables
117 *
118 **********************************************************************-->
119
120<xsl:variable name="G_xsltFilename" select="'websrv-wsdl.xsl'" />
121
122<xsl:include href="websrv-shared.inc.xsl" />
123
124<!-- collect all interfaces with "wsmap='suppress'" in a global variable for
125 quick lookup -->
126<xsl:variable name="G_setSuppressedInterfaces"
127 select="//interface[@wsmap='suppress']" />
128
129<!-- this marker is used with WSDL document style to mark that a message
130 should have an automatic type that matches a complexType definition;
131 use a string that cannot possibly appear in an XIDL interface name -->
132<xsl:variable name="G_typeIsGlobalRequestElementMarker"
133 select="'&lt;&lt;&lt;&lt;Request'" />
134<xsl:variable name="G_typeIsGlobalResponseElementMarker"
135 select="'&lt;&lt;&lt;&lt;Response'" />
136
137<!--**********************************************************************
138 *
139 * shared helpers
140 *
141 **********************************************************************-->
142
143<!--
144 function emitConvertedType
145 -->
146<xsl:template name="emitConvertedType">
147 <xsl:param name="ifname" />
148 <xsl:param name="methodname" />
149 <xsl:param name="type" />
150 <xsl:call-template name="debugMsg"><xsl:with-param name="msg" select="concat('......emitConvertedType: type=&quot;', $type, '&quot;')" /></xsl:call-template>
151 <xsl:choose>
152 <xsl:when test="$type=$G_typeIsGlobalRequestElementMarker"><xsl:value-of select="concat('vbox:', $ifname, $G_classSeparator, $methodname, $G_requestMessageElementSuffix)" /></xsl:when>
153 <xsl:when test="$type=$G_typeIsGlobalResponseElementMarker"><xsl:value-of select="concat('vbox:', $ifname, $G_classSeparator, $methodname, $G_responseMessageElementSuffix)" /></xsl:when>
154 <xsl:when test="$type='wstring'">xsd:string</xsl:when>
155 <xsl:when test="$type='boolean'">xsd:boolean</xsl:when>
156 <xsl:when test="$type='unsigned long'">xsd:unsignedInt</xsl:when>
157 <xsl:when test="$type='double'">xsd:double</xsl:when>
158 <xsl:when test="$type='float'">xsd:float</xsl:when>
159 <!-- <xsl:when test="$type='octet'">xsd:unsignedByte</xsl:when> -->
160 <xsl:when test="$type='long'">xsd:int</xsl:when>
161 <xsl:when test="$type='long long'">xsd:long</xsl:when>
162 <xsl:when test="$type='short'">xsd:short</xsl:when>
163 <xsl:when test="$type='unsigned short'">xsd:unsignedShort</xsl:when>
164 <xsl:when test="$type='unsigned long long'">xsd:unsignedLong</xsl:when>
165 <xsl:when test="$type='result'">xsd:unsignedInt</xsl:when>
166 <xsl:when test="$type='uuid'">xsd:string</xsl:when>
167 <xsl:when test="$type='$unknown'"><xsl:value-of select="$G_typeObjectRef" /></xsl:when>
168 <xsl:when test="$type='global'"><xsl:value-of select="$G_typeObjectRef" /></xsl:when>
169 <xsl:when test="$type='managed'"><xsl:value-of select="$G_typeObjectRef" /></xsl:when>
170 <xsl:when test="$type='explicit'"><xsl:value-of select="$G_typeObjectRef" /></xsl:when>
171 <!-- enums are easy, these are defined in schema at the top of the wsdl -->
172 <xsl:when test="//enum[@name=$type]"><xsl:value-of select="concat('vbox:', $type)" /></xsl:when>
173 <!-- otherwise test for an interface with this name -->
174 <xsl:when test="//interface[@name=$type]">
175 <!-- the type is one of our own interfaces: then it must have a wsmap attr -->
176 <xsl:variable name="wsmap" select="(//interface[@name=$type]/@wsmap) | (//collection[@name=$type]/@wsmap)" />
177 <xsl:choose>
178 <xsl:when test="not($wsmap)">
179 <xsl:call-template name="fatalError">
180 <xsl:with-param name="msg" select="concat('emitConvertedType: Type &quot;', $type, '&quot; in method &quot;', $ifname, '::', $methodname, '&quot; lacks wsmap attribute value in XIDL.')" />
181 </xsl:call-template>
182 </xsl:when>
183 <xsl:when test="$wsmap='struct'"><xsl:value-of select="concat('vbox:', $type)" /></xsl:when>
184 <xsl:when test="$wsmap='global'"><xsl:value-of select="$G_typeObjectRef" /></xsl:when>
185 <xsl:when test="$wsmap='managed'"><xsl:value-of select="$G_typeObjectRef" /></xsl:when>
186 <xsl:when test="$wsmap='explicit'"><xsl:value-of select="$G_typeObjectRef" /></xsl:when>
187 <xsl:when test="$wsmap='suppress'">
188 <xsl:call-template name="fatalError">
189 <xsl:with-param name="msg" select="concat('emitConvertedType: Type &quot;', $type, '&quot; in method &quot;', $ifname, '::', $methodname, '&quot; has wsmap=&quot;suppress&quot; attribute in XIDL. This function should have been suppressed as well.')" />
190 </xsl:call-template>
191 </xsl:when>
192 <xsl:otherwise>
193 <xsl:call-template name="fatalError">
194 <xsl:with-param name="msg" select="concat('emitConvertedType: Type &quot;', $type, '&quot; used in method &quot;', $ifname, '::', $methodname, '&quot; has unsupported wsmap attribute value &quot;', $wsmap, '&quot;')" />
195 </xsl:call-template>
196 </xsl:otherwise>
197 </xsl:choose>
198 </xsl:when>
199 <xsl:when test="//collection[@name=$type]">
200 <xsl:value-of select="concat('vbox:ArrayOf', //collection[@name=$type]/@type)" />
201 </xsl:when>
202 <xsl:otherwise>
203 <xsl:call-template name="fatalError">
204 <xsl:with-param name="msg" select="concat('emitConvertedType: Unknown type &quot;', $type, '&quot; used in method &quot;', $ifname, '::', $methodname, '&quot;.')" />
205 </xsl:call-template>
206 </xsl:otherwise>
207 </xsl:choose>
208</xsl:template>
209
210<!--
211 function convertTypeAndEmitPartOrElement
212 -->
213<xsl:template name="convertTypeAndEmitPartOrElement">
214 <xsl:param name="ifname" />
215 <xsl:param name="methodname" />
216 <xsl:param name="name" />
217 <xsl:param name="type" />
218 <xsl:param name="safearray" /> <!-- "yes" if XIDL has safearray=yes -->
219 <xsl:param name="elname" /> <!-- "part" or "element" -->
220 <xsl:param name="attrname" /> <!-- attrib of part or element: <part type=...> or <part element=...> or <element type=...> -->
221
222 <xsl:call-template name="debugMsg"><xsl:with-param name="msg" select="concat('....convertTypeAndEmitPartOrElement: arg name: ', $name)" /></xsl:call-template>
223 <xsl:choose>
224 <xsl:when test="$safearray='yes'">
225 <xsl:element name="{$elname}"> <!-- <part> or <element> -->
226 <xsl:attribute name="name"><xsl:value-of select="$name" /></xsl:attribute>
227 <xsl:attribute name="minOccurs"><xsl:value-of select="'0'" /></xsl:attribute>
228 <xsl:attribute name="maxOccurs"><xsl:value-of select="'unbounded'" /></xsl:attribute>
229 <xsl:attribute name="{$attrname}">
230 <xsl:call-template name="emitConvertedType">
231 <xsl:with-param name="ifname" select="$ifname" />
232 <xsl:with-param name="methodname" select="$methodname" />
233 <xsl:with-param name="type" select="$type" />
234 </xsl:call-template>
235 </xsl:attribute>
236 </xsl:element>
237 </xsl:when>
238 <xsl:otherwise>
239 <xsl:element name="{$elname}"> <!-- <part> or <element> -->
240 <xsl:attribute name="name"><xsl:value-of select="$name" /></xsl:attribute>
241 <xsl:attribute name="{$attrname}">
242 <xsl:call-template name="emitConvertedType">
243 <xsl:with-param name="ifname" select="$ifname" />
244 <xsl:with-param name="methodname" select="$methodname" />
245 <xsl:with-param name="type" select="$type" />
246 </xsl:call-template>
247 </xsl:attribute>
248 </xsl:element>
249 </xsl:otherwise>
250 </xsl:choose>
251</xsl:template>
252
253<!--
254 function emitRequestArgs
255 -->
256<xsl:template name="emitRequestArgs">
257 <xsl:param name="_ifname" /> <!-- interface name -->
258 <xsl:param name="_wsmap" /> <!-- interface's wsmap attribute -->
259 <xsl:param name="_methodname" />
260 <xsl:param name="_params" />
261 <xsl:param name="_valuetype" /> <!-- optional, for attribute setter messages -->
262 <xsl:param name="_valuesafearray" /> <!-- optional, 'yes' if attribute of setter has safearray=yes -->
263 <xsl:param name="_elname" /> <!-- "part" or "xsd:element" -->
264 <xsl:param name="_attrname" /> <!-- attrib of part of element: <part type=...> or <part element=...> or <element type=...> -->
265
266 <!-- first parameter will be object on which method is called, depending on wsmap attribute -->
267 <xsl:choose>
268 <xsl:when test="($_wsmap='managed') or ($_wsmap='explicit')">
269 <xsl:call-template name="convertTypeAndEmitPartOrElement">
270 <xsl:with-param name="ifname" select="$_ifname" />
271 <xsl:with-param name="methodname" select="$_methodname" />
272 <xsl:with-param name="name" select="$G_nameObjectRef" />
273 <xsl:with-param name="type" select="$_wsmap" />
274 <xsl:with-param name="safearray" select="'no'" />
275 <xsl:with-param name="elname" select="$_elname" /> <!-- "part" or "element" -->
276 <xsl:with-param name="attrname" select="$_attrname" /> <!-- attrib of part of element: <part type=...> or <part element=...> or <element type=...> -->
277 </xsl:call-template>
278 </xsl:when>
279 </xsl:choose>
280 <!-- now for the real parameters, if any -->
281 <xsl:for-each select="$_params">
282 <!-- emit only parts for "in" parameters -->
283 <xsl:if test="@dir='in'">
284 <xsl:call-template name="convertTypeAndEmitPartOrElement">
285 <xsl:with-param name="ifname" select="$_ifname" />
286 <xsl:with-param name="methodname" select="$_methodname" />
287 <xsl:with-param name="name" select="@name" />
288 <xsl:with-param name="type" select="@type" />
289 <xsl:with-param name="safearray" select="@safearray" />
290 <xsl:with-param name="elname" select="$_elname" /> <!-- "part" or "element" -->
291 <xsl:with-param name="attrname" select="$_attrname" /> <!-- attrib of part of element: <part type=...> or <part element=...> or <element type=...> -->
292 </xsl:call-template>
293 </xsl:if>
294 </xsl:for-each>
295 <xsl:if test="$_valuetype">
296 <!-- <part>
297 <xsl:attribute name="name">value</xsl:attribute>
298 <xsl:attribute name="type"><xsl:value-of select='string($_valuetype)' /></xsl:attribute>
299 </part> -->
300 <xsl:call-template name="convertTypeAndEmitPartOrElement">
301 <xsl:with-param name="ifname" select="$_ifname" />
302 <xsl:with-param name="methodname" select="$_methodname" />
303 <xsl:with-param name="name" select="@name" />
304 <xsl:with-param name="type" select="@type" />
305 <xsl:with-param name="safearray" select="@safearray" />
306 <xsl:with-param name="elname" select="$_elname" /> <!-- "part" or "element" -->
307 <xsl:with-param name="attrname" select="$_attrname" /> <!-- attrib of part of element: <part type=...> or <part element=...> or <element type=...> -->
308 </xsl:call-template>
309 </xsl:if>
310</xsl:template>
311
312<!--
313 function emitResultArgs
314 -->
315<xsl:template name="emitResultArgs">
316 <xsl:param name="_ifname" />
317 <xsl:param name="_methodname" />
318 <xsl:param name="_params" /> <!-- set of parameter elements -->
319 <xsl:param name="_resulttype" /> <!-- for attribute getter methods only -->
320 <xsl:param name="_resultsafearray" /> <!-- for attribute getter methods only -->
321 <xsl:param name="_elname" /> <!-- "part" or "xsd:element" -->
322 <xsl:param name="_attrname" /> <!-- attrib of part of element: <part type=...> or <part element=...> or <element type=...> -->
323
324 <xsl:choose>
325 <xsl:when test="$_resulttype">
326 <xsl:call-template name="debugMsg"><xsl:with-param name="msg" select="concat('..', $_ifname, '::', $_methodname, ': ', 'resultmsg for attr of type ', $_resulttype)" /></xsl:call-template>
327 <xsl:call-template name="convertTypeAndEmitPartOrElement">
328 <xsl:with-param name="ifname" select="$_ifname" />
329 <xsl:with-param name="methodname" select="$_methodname" />
330 <xsl:with-param name="name" select="$G_result" />
331 <xsl:with-param name="type" select="$_resulttype" />
332 <xsl:with-param name="safearray" select="$_resultsafearray" />
333 <xsl:with-param name="elname" select="$_elname" /> <!-- "part" or "element" -->
334 <xsl:with-param name="attrname" select="$_attrname" /> <!-- attrib of part of element: <part type=...> or <part element=...> or <element type=...> -->
335 </xsl:call-template>
336 </xsl:when>
337 <xsl:otherwise>
338 <xsl:call-template name="debugMsg"><xsl:with-param name="msg" select="concat('..', 'resultmsg for method: ', $_ifname, '::', $_methodname)" /></xsl:call-template>
339 <xsl:for-each select="$_params">
340 <!-- emit only parts for "out" parameters -->
341 <xsl:if test="@dir='out'">
342 <xsl:call-template name="convertTypeAndEmitPartOrElement">
343 <xsl:with-param name="ifname" select="$_ifname" />
344 <xsl:with-param name="methodname" select="$_methodname" />
345 <xsl:with-param name="name"><xsl:value-of select="@name" /></xsl:with-param>
346 <xsl:with-param name="type"><xsl:value-of select="@type" /></xsl:with-param>
347 <xsl:with-param name="safearray" select="@safearray" />
348 <xsl:with-param name="elname" select="$_elname" /> <!-- "part" or "element" -->
349 <xsl:with-param name="attrname" select="$_attrname" /> <!-- attrib of part of element: <part type=...> or <part element=...> or <element type=...> -->
350 </xsl:call-template>
351 </xsl:if>
352 <xsl:if test="@dir='return'">
353 <xsl:call-template name="convertTypeAndEmitPartOrElement">
354 <xsl:with-param name="ifname" select="$_ifname" />
355 <xsl:with-param name="methodname" select="$_methodname" />
356 <xsl:with-param name="name"><xsl:value-of select="$G_result" /></xsl:with-param>
357 <xsl:with-param name="type"><xsl:value-of select="@type" /></xsl:with-param>
358 <xsl:with-param name="safearray" select="@safearray" />
359 <xsl:with-param name="elname" select="$_elname" /> <!-- "part" or "element" -->
360 <xsl:with-param name="attrname" select="$_attrname" /> <!-- attrib of part of element: <part type=...> or <part element=...> or <element type=...> -->
361 </xsl:call-template>
362 </xsl:if>
363 </xsl:for-each>
364 </xsl:otherwise>
365 </xsl:choose>
366</xsl:template>
367
368<!--
369 function emitRequestElements:
370 for "in" parameters
371 -->
372<xsl:template name="emitRequestElements">
373 <xsl:param name="_ifname" /> <!-- interface name -->
374 <xsl:param name="_wsmap" /> <!-- interface's wsmap attribute -->
375 <xsl:param name="_methodname" />
376 <xsl:param name="_params" />
377 <xsl:param name="_valuetype" /> <!-- optional, for attribute setter messages -->
378 <xsl:param name="_valuesafearray" /> <!-- optional, 'yes' if attribute of setter has safearray=yes -->
379
380 <xsd:element>
381 <xsl:attribute name="name"><xsl:value-of select="concat($_ifname, $G_classSeparator, $_methodname, $G_requestMessageElementSuffix)" /></xsl:attribute>
382 <xsd:complexType>
383 <xsd:sequence>
384 <xsl:call-template name="emitRequestArgs">
385 <xsl:with-param name="_ifname" select="$_ifname" /> <!-- interface name -->
386 <xsl:with-param name="_wsmap" select="$_wsmap" /> <!-- interface's wsmap attribute -->
387 <xsl:with-param name="_methodname" select="$_methodname" />
388 <xsl:with-param name="_params" select="$_params" />
389 <xsl:with-param name="_valuetype" select="$_valuetype" /> <!-- optional, for attribute setter messages -->
390 <xsl:with-param name="_valuesafearray" select="$_valuesafearray" /> <!-- optional, for attribute setter messages -->
391 <xsl:with-param name="_elname" select="'xsd:element'" /> <!-- "part" or "xsd:element" -->
392 <xsl:with-param name="_attrname" select="'type'" /> <!-- attrib of part of element: <part type=...> or <part element=...> or <element type=...> -->
393 </xsl:call-template>
394 </xsd:sequence>
395 </xsd:complexType>
396 </xsd:element>
397</xsl:template>
398
399<!--
400 function emitResultElements:
401 for "out" and "return" parameters
402 -->
403<xsl:template name="emitResultElements">
404 <xsl:param name="_ifname" />
405 <xsl:param name="_methodname" />
406 <xsl:param name="_params" /> <!-- set of parameter elements -->
407 <xsl:param name="_resulttype" /> <!-- optional, for attribute getter methods only -->
408 <xsl:param name="_resultsafearray" /> <!-- optional, 'yes' if attribute of getter has safearray=yes -->
409
410 <xsd:element>
411 <xsl:attribute name="name"><xsl:value-of select="concat($_ifname, $G_classSeparator, $_methodname, $G_responseMessageElementSuffix)" /></xsl:attribute>
412 <xsd:complexType>
413 <xsd:sequence>
414 <xsl:call-template name="emitResultArgs">
415 <xsl:with-param name="_ifname" select="$_ifname" />
416 <xsl:with-param name="_methodname" select="$_methodname" />
417 <xsl:with-param name="_params" select="$_params" /> <!-- set of parameter elements -->
418 <xsl:with-param name="_resulttype" select="$_resulttype" /> <!-- for attribute getter methods only -->
419 <xsl:with-param name="_resultsafearray" select="$_resultsafearray" /> <!-- for attribute getter methods only -->
420 <xsl:with-param name="_elname" select="'xsd:element'" /> <!-- "part" or "xsd:element" -->
421 <xsl:with-param name="_attrname" select="'type'" /> <!-- attrib of part of element: <part type=...> or <part element=...> or <element type=...> -->
422 </xsl:call-template>
423 </xsd:sequence>
424 </xsd:complexType>
425 </xsd:element>
426</xsl:template>
427
428<!--
429 function emitGetAttributeElements
430 -->
431<xsl:template name="emitGetAttributeElements">
432 <xsl:param name="ifname" />
433 <xsl:param name="wsmap" />
434 <xsl:param name="attrname" />
435 <xsl:param name="attrtype" />
436 <xsl:param name="attrsafearray" />
437
438 <xsl:variable name="attrGetter"><xsl:call-template name="makeGetterName"><xsl:with-param name="attrname" select="$attrname" /></xsl:call-template></xsl:variable>
439 <xsl:call-template name="debugMsg"><xsl:with-param name="msg" select="concat('..', $ifname, '::', $attrGetter)" /></xsl:call-template>
440 <xsl:call-template name="emitRequestElements">
441 <xsl:with-param name="_ifname" select="$ifname" />
442 <xsl:with-param name="_wsmap" select="$wsmap" />
443 <xsl:with-param name="_methodname" select="$attrGetter" />
444 <xsl:with-param name="_params" select="/.." /> <!-- empty set -->
445 </xsl:call-template>
446 <xsl:call-template name="emitResultElements">
447 <xsl:with-param name="_ifname" select="$ifname" />
448 <xsl:with-param name="_methodname" select="$attrGetter" />
449 <xsl:with-param name="_params" select="/.." /> <!-- empty set -->
450 <xsl:with-param name="_resulttype" select='$attrtype' />
451 <xsl:with-param name="_resultsafearray" select='$attrsafearray' />
452 </xsl:call-template>
453</xsl:template>
454
455<!--
456 function: emitRequestMessage
457 for "in" parameters
458-->
459<xsl:template name="emitRequestMessage">
460 <xsl:param name="_ifname" /> <!-- interface name -->
461 <xsl:param name="_wsmap" /> <!-- interface's wsmap attribute -->
462 <xsl:param name="_methodname" />
463 <xsl:param name="_params" />
464 <xsl:param name="_valuetype" /> <!-- optional, for attribute setter messages -->
465
466 <message>
467 <xsl:attribute name="name"><xsl:value-of select="concat($_ifname, $G_classSeparator, $_methodname, $G_methodRequest)" /></xsl:attribute>
468
469 <xsl:call-template name="convertTypeAndEmitPartOrElement">
470 <xsl:with-param name="ifname" select="$_ifname" />
471 <xsl:with-param name="methodname" select="$_methodname" />
472 <xsl:with-param name="name" select="'parameters'" />
473 <xsl:with-param name="type" select="$G_typeIsGlobalRequestElementMarker" />
474 <xsl:with-param name="safearray" select="'no'" />
475 <xsl:with-param name="elname" select="'part'" /> <!-- "part" or "element" -->
476 <xsl:with-param name="attrname" select="'element'" /> <!-- attrib of part of element: <part type=...> or <part element=...> or <element type=...> -->
477 </xsl:call-template>
478 </message>
479</xsl:template>
480
481<!--
482 function: emitResultMessage
483 for "out" and "return" parameters
484-->
485<xsl:template name="emitResultMessage">
486 <xsl:param name="_ifname" />
487 <xsl:param name="_methodname" />
488 <xsl:param name="_params" /> <!-- set of parameter elements -->
489 <xsl:param name="_resulttype" /> <!-- for attribute getter methods only -->
490
491 <message>
492 <xsl:attribute name="name"><xsl:copy-of select="$_ifname" /><xsl:value-of select="$G_classSeparator" /><xsl:value-of select="$_methodname" /><xsl:copy-of select="$G_methodResponse" /></xsl:attribute>
493
494 <!-- <xsl:variable name="cOutParams" select="count($_params[@dir='out']) + count($_params[@dir='return'])" /> -->
495 <xsl:call-template name="convertTypeAndEmitPartOrElement">
496 <xsl:with-param name="ifname" select="$_ifname" />
497 <xsl:with-param name="methodname" select="$_methodname" />
498 <xsl:with-param name="name" select="'parameters'" />
499 <xsl:with-param name="type" select="$G_typeIsGlobalResponseElementMarker" />
500 <xsl:with-param name="safearray" select="'no'" />
501 <xsl:with-param name="elname" select="'part'" /> <!-- "part" or "element" -->
502 <xsl:with-param name="attrname" select="'element'" /> <!-- attrib of part of element: <part type=...> or <part element=...> or <element type=...> -->
503 </xsl:call-template>
504 </message>
505</xsl:template>
506
507<!--
508 function emitGetAttributeMessages:
509-->
510<xsl:template name="emitGetAttributeMessages">
511 <xsl:param name="ifname" />
512 <xsl:param name="wsmap" />
513 <xsl:param name="attrname" />
514 <xsl:param name="attrtype" />
515
516 <xsl:variable name="attrGetter"><xsl:call-template name="makeGetterName"><xsl:with-param name="attrname" select="$attrname" /></xsl:call-template></xsl:variable>
517 <xsl:call-template name="debugMsg"><xsl:with-param name="msg" select="concat('..', $ifname, '::', $attrGetter)" /></xsl:call-template>
518 <xsl:call-template name="emitRequestMessage">
519 <xsl:with-param name="_ifname" select="$ifname" />
520 <xsl:with-param name="_wsmap" select="$wsmap" />
521 <xsl:with-param name="_methodname" select="$attrGetter" />
522 <xsl:with-param name="_params" select="/.." /> <!-- empty set -->
523 </xsl:call-template>
524 <xsl:call-template name="emitResultMessage">
525 <xsl:with-param name="_ifname" select="$ifname" />
526 <xsl:with-param name="_methodname" select="$attrGetter" />
527 <xsl:with-param name="_params" select="/.." /> <!-- empty set -->
528 <xsl:with-param name="_resulttype" select='$attrtype' />
529 </xsl:call-template>
530</xsl:template>
531
532<!--
533 function emitSetAttributeMessages
534 -->
535<xsl:template name="emitSetAttributeMessages">
536 <xsl:param name="ifname" select="$ifname" />
537 <xsl:param name="wsmap" select="$wsmap" />
538 <xsl:param name="attrname" select="$attrname" />
539 <xsl:param name="attrtype" select="$attrtype" />
540
541 <xsl:variable name="attrSetter"><xsl:call-template name="makeSetterName"><xsl:with-param name="attrname" select="$attrname" /></xsl:call-template></xsl:variable>
542 <xsl:call-template name="debugMsg"><xsl:with-param name="msg" select="concat('..', $ifname, '::', $attrSetter)" /></xsl:call-template>
543 <xsl:call-template name="emitRequestMessage">
544 <xsl:with-param name="_ifname" select="$ifname" />
545 <xsl:with-param name="_wsmap" select="$wsmap" />
546 <xsl:with-param name="_methodname" select="$attrSetter" />
547 <xsl:with-param name="_params" select="/.." /> <!-- empty set -->
548 <xsl:with-param name="_valuetype" select="$attrtype" />
549 <xsl:with-param name="elname" select="'part'" /> <!-- "part" or "element" -->
550 </xsl:call-template>
551 <xsl:call-template name="emitResultMessage">
552 <xsl:with-param name="_ifname" select="$ifname" />
553 <xsl:with-param name="_methodname" select="$attrSetter" />
554 <xsl:with-param name="_params" select="/.." /> <!-- empty set -->
555 <xsl:with-param name="elname" select="'part'" /> <!-- "part" or "element" -->
556 </xsl:call-template>
557</xsl:template>
558
559<!--
560 function emitInOutOperation:
561 referencing the messages that must have been emitted previously
562-->
563<xsl:template name="emitInOutOperation">
564 <xsl:param name="_ifname" /> <!-- interface name -->
565 <xsl:param name="_methodname" /> <!-- method name -->
566 <xsl:param name="_params" />
567 <xsl:param name="_resulttype" /> <!-- for attribute getter methods only -->
568 <xsl:param name="_fSoap" />
569
570 <xsl:call-template name="debugMsg"><xsl:with-param name="msg" select="concat('....emitInOutOperation ', $_ifname, '::', $_methodname)" /></xsl:call-template>
571
572 <operation>
573 <xsl:attribute name="name">
574 <xsl:value-of select="concat($_ifname, '_', $_methodname)" />
575 </xsl:attribute>
576 <xsl:if test="$_fSoap">
577 <soap:operation>
578 <!-- VMware has an empty attribute like this as well -->
579 <xsl:attribute name="soapAction"><xsl:value-of select="''" /></xsl:attribute>
580 <xsl:attribute name="style"><xsl:value-of select="$G_basefmt" /></xsl:attribute>
581 </soap:operation>
582 </xsl:if>
583 <input>
584 <xsl:choose>
585 <xsl:when test="$_fSoap">
586 <soap:body>
587 <xsl:attribute name="use"><xsl:value-of select="$G_parmfmt" /></xsl:attribute>
588 <!-- avoid jax-ws warning: <xsl:attribute name="namespace"><xsl:value-of select="concat($G_targetNamespace, $G_targetNamespaceSeparator)" /></xsl:attribute>-->
589 </soap:body>
590 </xsl:when>
591 <xsl:otherwise>
592 <xsl:attribute name="message">vbox:<xsl:copy-of select="$_ifname" /><xsl:value-of select="$G_classSeparator" /><xsl:value-of select="$_methodname" /><xsl:copy-of select="$G_methodRequest" /></xsl:attribute>
593 </xsl:otherwise>
594 </xsl:choose>
595 </input>
596 <xsl:choose>
597 <xsl:when test="$_resulttype">
598 <output>
599 <xsl:choose>
600 <xsl:when test="$_fSoap">
601 <soap:body>
602 <xsl:attribute name="use"><xsl:value-of select="$G_parmfmt" /></xsl:attribute>
603 <!-- avoid jax-ws warning: <xsl:attribute name="namespace"><xsl:value-of select="concat($G_targetNamespace, $G_targetNamespaceSeparator)" /></xsl:attribute> -->
604 </soap:body>
605 </xsl:when>
606 <xsl:otherwise>
607 <xsl:attribute name="message">vbox:<xsl:copy-of select="$_ifname" /><xsl:value-of select="$G_classSeparator" /><xsl:value-of select="$_methodname" /><xsl:copy-of select="$G_methodResponse" /></xsl:attribute>
608 </xsl:otherwise>
609 </xsl:choose>
610 </output>
611 </xsl:when>
612 <xsl:otherwise>
613 <!-- <xsl:if test="count($_params[@dir='out'] | $_params[@dir='return']) > 0"> -->
614 <output>
615 <xsl:choose>
616 <xsl:when test="$_fSoap">
617 <soap:body>
618 <xsl:attribute name="use"><xsl:value-of select="$G_parmfmt" /></xsl:attribute>
619 <!-- avoid jax-ws warning: <xsl:attribute name="namespace"><xsl:value-of select="concat($G_targetNamespace, $G_targetNamespaceSeparator)" /></xsl:attribute> -->
620 </soap:body>
621 </xsl:when>
622 <xsl:otherwise>
623 <xsl:attribute name="message">vbox:<xsl:copy-of select="$_ifname" /><xsl:value-of select="$G_classSeparator" /><xsl:value-of select="$_methodname" /><xsl:copy-of select="$G_methodResponse" /></xsl:attribute>
624 </xsl:otherwise>
625 </xsl:choose>
626 </output>
627 <!-- </xsl:if> -->
628 </xsl:otherwise>
629 </xsl:choose>
630 <xsl:choose>
631 <xsl:when test="not($_fSoap)">
632 <fault name="InvalidObjectFault" message="vbox:InvalidObjectFaultMsg" />
633 <fault name="RuntimeFault" message="vbox:RuntimeFaultMsg" />
634 </xsl:when>
635 <xsl:otherwise>
636 <fault name="InvalidObjectFault">
637 <soap:fault name="InvalidObjectFault">
638 <xsl:attribute name="use"><xsl:value-of select="$G_parmfmt" /></xsl:attribute>
639 </soap:fault>
640 </fault>
641 <fault name="RuntimeFault">
642 <soap:fault name="RuntimeFault">
643 <xsl:attribute name="use"><xsl:value-of select="$G_parmfmt" /></xsl:attribute>
644 </soap:fault>
645 </fault>
646 </xsl:otherwise>
647 </xsl:choose>
648 </operation>
649</xsl:template>
650
651<!--
652 function verifyInterface
653-->
654<xsl:template name="verifyInterface">
655 <xsl:param name="ifname" />
656 <xsl:param name="wsmap" />
657
658 <xsl:choose>
659 <xsl:when test="$wsmap='global'" />
660 <xsl:when test="$wsmap='managed'" />
661 <xsl:when test="$wsmap='explicit'" />
662 <xsl:when test="$wsmap='struct'" />
663 <xsl:when test="$wsmap='suppress'" />
664 <xsl:otherwise>
665 <xsl:call-template name="fatalError">
666 <xsl:with-param name="msg" select="concat(local-name(), ' template: Interface &quot;', $ifname, '&quot; has invalid wsmap attribute &quot;', $wsmap, '&quot; in XIDL.')" />
667 </xsl:call-template>
668 </xsl:otherwise>
669 </xsl:choose>
670
671 <!-- now make sure we have each interface only once -->
672 <xsl:if test="(count(//library/interface[@name=$ifname]) > 1)">
673 <xsl:call-template name="fatalError">
674 <xsl:with-param name="msg" select="concat(local-name(), ' template: There is more than one interface with a name=&quot;', $ifname, '&quot; attribute.')" />
675 </xsl:call-template>
676 </xsl:if>
677</xsl:template>
678
679<!--
680 function emitMessagesForInterface
681-->
682<xsl:template name="emitMessagesForInterface">
683 <xsl:param name="ifname" />
684 <xsl:param name="wsmap" />
685
686 <!-- 1) outside the portType, here come the in/out methods for all the "operations" we declare below;
687 a) for attributes (get/set methods)
688 b) for "real" methods
689 -->
690 <xsl:call-template name="debugMsg"><xsl:with-param name="msg" select="concat('************* messages for interface &quot;', $ifname, '&quot;')" /></xsl:call-template>
691 <!-- a) attributes first -->
692 <xsl:for-each select="attribute">
693 <xsl:variable name="attrname"><xsl:value-of select="@name" /></xsl:variable>
694 <xsl:variable name="attrtype"><xsl:value-of select="@type" /></xsl:variable>
695 <xsl:variable name="attrreadonly"><xsl:value-of select="@readonly" /></xsl:variable>
696 <xsl:call-template name="debugMsg"><xsl:with-param name="msg" select="concat('messages for ', $ifname, '::', $attrname, ': attribute of type &quot;', $attrtype, '&quot;, readonly: ', $attrreadonly)" /></xsl:call-template>
697 <!-- skip this attribute if it has parameters of a type that has wsmap="suppress" -->
698 <xsl:choose>
699 <xsl:when test="( $attrtype=($G_setSuppressedInterfaces/@name) )">
700 <xsl:comment><xsl:value-of select="concat('skipping attribute ', $attrtype, ' for it is of a suppressed type')" /></xsl:comment>
701 </xsl:when>
702 <xsl:otherwise>
703 <xsl:choose>
704 <xsl:when test="@readonly='yes'">
705 <xsl:comment> readonly attribute <xsl:copy-of select="$ifname" />::<xsl:copy-of select="$attrname" /> </xsl:comment>
706 </xsl:when>
707 <xsl:otherwise>
708 <xsl:comment> read/write attribute <xsl:copy-of select="$ifname" />::<xsl:copy-of select="$attrname" /> </xsl:comment>
709 </xsl:otherwise>
710 </xsl:choose>
711 <!-- aa) get method: emit request and result -->
712 <xsl:call-template name="emitGetAttributeMessages">
713 <xsl:with-param name="ifname" select="$ifname" />
714 <xsl:with-param name="wsmap" select="$wsmap" />
715 <xsl:with-param name="attrname" select="$attrname" />
716 <xsl:with-param name="attrtype" select="$attrtype" />
717 </xsl:call-template>
718 <!-- bb) emit a set method if the attribute is read/write -->
719 <xsl:if test="not($attrreadonly='yes')">
720 <xsl:call-template name="emitSetAttributeMessages">
721 <xsl:with-param name="ifname" select="$ifname" />
722 <xsl:with-param name="wsmap" select="$wsmap" />
723 <xsl:with-param name="attrname" select="$attrname" />
724 <xsl:with-param name="attrtype" select="$attrtype" />
725 </xsl:call-template>
726 </xsl:if>
727 </xsl:otherwise>
728 </xsl:choose>
729 </xsl:for-each> <!-- select="attribute" -->
730 <!-- b) "real" methods after the attributes -->
731 <xsl:for-each select="method">
732 <xsl:variable name="methodname"><xsl:value-of select="@name" /></xsl:variable>
733 <xsl:call-template name="debugMsg"><xsl:with-param name="msg" select="concat('messages for ', $ifname, '::', $methodname, ': method')" /></xsl:call-template>
734 <xsl:comment> method <xsl:copy-of select="$ifname" />::<xsl:copy-of select="$methodname" /> </xsl:comment>
735 <!-- skip this method if it has parameters of a type that has wsmap="suppress" -->
736 <xsl:choose>
737 <xsl:when test="param[@type=($G_setSuppressedInterfaces/@name)]">
738 <xsl:comment><xsl:value-of select="concat('skipping method ', $methodname, ' for it has parameters with suppressed types')" /></xsl:comment>
739 </xsl:when>
740 <xsl:otherwise>
741 <!-- always emit a request message -->
742 <xsl:call-template name="emitRequestMessage">
743 <xsl:with-param name="_ifname" select="$ifname" />
744 <xsl:with-param name="_wsmap" select="$wsmap" />
745 <xsl:with-param name="_methodname" select="$methodname" />
746 <xsl:with-param name="_params" select="param" />
747 <xsl:with-param name="elname" select="'part'" /> <!-- "part" or "element" -->
748 </xsl:call-template>
749 <!-- emit a second "result" message only if the method has "out" arguments or a return value -->
750 <!-- <xsl:if test="(count(param[@dir='out'] | param[@dir='return']) > 0)"> -->
751 <xsl:call-template name="emitResultMessage">
752 <xsl:with-param name="_ifname" select="$ifname" />
753 <xsl:with-param name="_wsmap" select="$wsmap" />
754 <xsl:with-param name="_methodname" select="@name" />
755 <xsl:with-param name="_params" select="param" />
756 <xsl:with-param name="elname" select="'part'" /> <!-- "part" or "element" -->
757 </xsl:call-template>
758 <!-- </xsl:if> -->
759 </xsl:otherwise>
760 </xsl:choose>
761 </xsl:for-each>
762</xsl:template>
763
764<!--
765 function emitOperationsForInterface
766 -->
767<xsl:template name="emitOperationsInPortTypeForInterface">
768 <xsl:param name="ifname" />
769 <xsl:param name="wsmap" />
770
771 <!-- a) again, first for the attributes whose messages we produced above -->
772 <xsl:call-template name="debugMsg"><xsl:with-param name="msg" select="concat('************* portType for interface &quot;', $ifname, '&quot;')" /></xsl:call-template>
773 <xsl:for-each select="attribute">
774 <xsl:variable name="attrname" select="@name" />
775 <xsl:variable name="attrtype" select="@type" />
776 <xsl:variable name="attrreadonly" select="@readonly" />
777 <xsl:call-template name="debugMsg"><xsl:with-param name="msg" select="concat('operations for ', $ifname, '::', $attrname, ': attribute of type &quot;', $attrtype, '&quot;, readonly: ', $attrreadonly)" /></xsl:call-template>
778 <xsl:choose>
779 <!-- skip this attribute if it has parameters of a type that has wsmap="suppress" -->
780 <xsl:when test="( $attrtype=($G_setSuppressedInterfaces/@name) )">
781 <xsl:comment><xsl:value-of select="concat('skipping attribute ', $attrtype, ' for it is of a suppressed type')" /></xsl:comment>
782 </xsl:when>
783 <xsl:otherwise>
784 <xsl:variable name="attrGetter"><xsl:call-template name="makeGetterName"><xsl:with-param name="attrname" select="$attrname" /></xsl:call-template></xsl:variable>
785 <xsl:call-template name="debugMsg"><xsl:with-param name="msg" select="concat('..', $G_attributeGetPrefix, $attrname)" /></xsl:call-template>
786 <xsl:call-template name="emitInOutOperation">
787 <xsl:with-param name="_ifname" select="$ifname" />
788 <xsl:with-param name="_methodname" select="$attrGetter" />
789 <xsl:with-param name="_params" select="/.." />
790 <xsl:with-param name="_resulttype" select='$attrtype' />
791 </xsl:call-template>
792 <xsl:if test="not($attrreadonly='yes')">
793 <xsl:variable name="attrSetter"><xsl:call-template name="makeSetterName"><xsl:with-param name="attrname" select="$attrname" /></xsl:call-template></xsl:variable>
794 <xsl:call-template name="debugMsg"><xsl:with-param name="msg" select="concat('..', $attrSetter)" /></xsl:call-template>
795 <xsl:call-template name="emitInOutOperation">
796 <xsl:with-param name="_ifname" select="$ifname" />
797 <xsl:with-param name="_methodname" select="$attrSetter" />
798 <xsl:with-param name="_params" select="/.." />
799 <xsl:with-param name="_resulttype" select='$attrtype' />
800 </xsl:call-template>
801 </xsl:if>
802 </xsl:otherwise>
803 </xsl:choose>
804 </xsl:for-each>
805 <!-- b) then for the "real" methods whose messages we produced above -->
806 <xsl:for-each select="method">
807 <xsl:variable name="methodname"><xsl:value-of select="@name" /></xsl:variable>
808 <xsl:call-template name="debugMsg"><xsl:with-param name="msg" select="concat('operations for ', $ifname, '::', $methodname, ': method')" /></xsl:call-template>
809 <!-- skip this method if it has parameters of a type that has wsmap="suppress" -->
810 <xsl:choose>
811 <xsl:when test="param[@type=($G_setSuppressedInterfaces/@name)]">
812 <xsl:comment><xsl:value-of select="concat('skipping method ', $methodname, ' for it has parameters with suppressed types')" /></xsl:comment>
813 </xsl:when>
814 <xsl:otherwise>
815 <xsl:call-template name="emitInOutOperation">
816 <xsl:with-param name="_ifname" select="$ifname" />
817 <xsl:with-param name="_methodname" select="$methodname" />
818 <xsl:with-param name="_params" select="param" />
819 </xsl:call-template>
820 </xsl:otherwise>
821 </xsl:choose>
822 </xsl:for-each>
823</xsl:template>
824
825<!--
826 function emitOperationsInBindingForInterface
827 -->
828<xsl:template name="emitOperationsInBindingForInterface">
829 <xsl:param name="ifname" />
830 <xsl:param name="wsmap" />
831
832 <!-- a) again, first for the attributes whose messages we produced above -->
833 <xsl:for-each select="attribute">
834 <xsl:variable name="attrname" select="@name" />
835 <xsl:variable name="attrtype" select="@type" />
836 <xsl:variable name="attrreadonly" select="@readonly" />
837 <!-- skip this attribute if it has parameters of a type that has wsmap="suppress" -->
838 <xsl:choose>
839 <xsl:when test="( $attrtype=($G_setSuppressedInterfaces/@name) )">
840 <xsl:comment><xsl:value-of select="concat('skipping attribute ', $attrtype, ' for it is of a suppressed type')" /></xsl:comment>
841 </xsl:when>
842 <xsl:otherwise>
843 <xsl:variable name="attrGetter"><xsl:call-template name="makeGetterName"><xsl:with-param name="attrname" select="$attrname" /></xsl:call-template></xsl:variable>
844 <xsl:call-template name="emitInOutOperation">
845 <xsl:with-param name="_ifname" select="$ifname" />
846 <xsl:with-param name="_methodname" select="$attrGetter" />
847 <xsl:with-param name="_params" select="/.." />
848 <xsl:with-param name="_resulttype" select='$attrtype' />
849 <xsl:with-param name="_fSoap" select="1" />
850 </xsl:call-template>
851 <xsl:if test="not($attrreadonly='yes')">
852 <xsl:variable name="attrSetter"><xsl:call-template name="makeSetterName"><xsl:with-param name="attrname" select="$attrname" /></xsl:call-template></xsl:variable>
853 <xsl:call-template name="emitInOutOperation">
854 <xsl:with-param name="_ifname" select="$ifname" />
855 <xsl:with-param name="_methodname" select="$attrSetter" />
856 <xsl:with-param name="_params" select="/.." />
857 <xsl:with-param name="_resulttype" select='$attrtype' />
858 <xsl:with-param name="_fSoap" select="1" />
859 </xsl:call-template>
860 </xsl:if>
861 </xsl:otherwise>
862 </xsl:choose>
863 </xsl:for-each>
864 <!-- b) then for the "real" methods whose messages we produced above -->
865 <xsl:for-each select="method">
866 <xsl:variable name="methodname"><xsl:value-of select="@name" /></xsl:variable>
867 <!-- skip this method if it has parameters of a type that has wsmap="suppress" -->
868 <xsl:choose>
869 <xsl:when test="param[@type=($G_setSuppressedInterfaces/@name)]">
870 <xsl:comment><xsl:value-of select="concat('skipping method ', $methodname, ' for it has parameters with suppressed types')" /></xsl:comment>
871 </xsl:when>
872 <xsl:otherwise>
873 <xsl:call-template name="emitInOutOperation">
874 <xsl:with-param name="_ifname" select="$ifname" />
875 <xsl:with-param name="_methodname" select="$methodname" />
876 <xsl:with-param name="_params" select="param" />
877 <xsl:with-param name="_fSoap" select="1" />
878 </xsl:call-template>
879 </xsl:otherwise>
880 </xsl:choose>
881 </xsl:for-each>
882</xsl:template>
883
884<!--**********************************************************************
885 *
886 * matches
887 *
888 **********************************************************************-->
889
890<!--
891 template for "idl" match; this emits the header of the target file
892 and recurses into the librarys with interfaces (which are matched below)
893 -->
894<xsl:template match="/idl">
895 <xsl:comment>
896 DO NOT EDIT! This is a generated file.
897 Generated from: src/VBox/Main/idl/VirtualBox.xidl (VirtualBox's interface definitions in XML)
898 Generator: src/VBox/Main/webservice/websrv-wsdl.xsl
899</xsl:comment>
900
901 <xsl:apply-templates />
902
903</xsl:template>
904
905<!--
906 template for "if" match: ignore all ifs except those for wsdl
907 -->
908<xsl:template match="if">
909 <xsl:if test="@target='wsdl'">
910 <xsl:apply-templates/>
911 </xsl:if>
912</xsl:template>
913
914<!--
915 template for "cpp": ignore
916 -->
917<xsl:template match="cpp">
918<!-- ignore this -->
919</xsl:template>
920
921
922<!-- - - - - - - - - - - - - - - - - - - - - - -
923 class
924 - - - - - - - - - - - - - - - - - - - - - - -->
925
926<xsl:template match="module/class">
927<!-- swallow -->
928</xsl:template>
929
930<!-- - - - - - - - - - - - - - - - - - - - - - -
931 enum
932 - - - - - - - - - - - - - - - - - - - - - - -->
933
934<xsl:template match="enum">
935</xsl:template>
936
937<!-- - - - - - - - - - - - - - - - - - - - - - -
938 desc
939 - - - - - - - - - - - - - - - - - - - - - - -->
940
941<xsl:template match="desc">
942<!-- swallow -->
943</xsl:template>
944
945<!-- - - - - - - - - - - - - - - - - - - - - - -
946 note
947 - - - - - - - - - - - - - - - - - - - - - - -->
948
949<xsl:template match="note">
950 <xsl:apply-templates />
951</xsl:template>
952
953<!--
954 "library" match: we use this to emit most of the WSDL <types> section.
955 With WSDL "document" style, this requires us to go through all interfaces
956 and emit complexTypes for all method arguments and return values.
957-->
958<xsl:template match="library">
959 <definitions
960 name="VirtualBox"
961 xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
962 <xsl:attribute name="xmlns">http://schemas.xmlsoap.org/wsdl/</xsl:attribute>
963 <xsl:attribute name="targetNamespace"><xsl:value-of select="$G_targetNamespace" /></xsl:attribute>
964 <!-- at top of WSDL file, dump a <types> section with user-defined types -->
965 <xsl:comment>
966 ******************************************************
967 *
968 * WSDL type definitions in XML Schema
969 *
970 ******************************************************
971</xsl:comment>
972 <types>
973 <xsd:schema>
974 <xsl:attribute name="targetNamespace"><xsl:value-of select='$G_targetNamespace' /></xsl:attribute>
975
976 <!-- type-define all enums -->
977 <xsl:comment>
978 ******************************************************
979 * enumerations
980 ******************************************************
981</xsl:comment>
982 <xsl:for-each select="//enum">
983 <xsl:comment> enum: <xsl:value-of select="@name" /> -
984 <xsl:for-each select="const">
985 <xsl:value-of select="@name" />: <xsl:value-of select="@value" /> -
986 </xsl:for-each>
987</xsl:comment>
988 <xsd:simpleType>
989 <xsl:attribute name="name"><xsl:value-of select="@name" /></xsl:attribute>
990 <xsd:restriction base="xsd:string">
991 <!-- XML Schema does not seem to have a C-like mapping between identifiers and numbers;
992 instead, it treats enumerations like strings that can have only specific values. -->
993 <xsl:for-each select="const">
994 <xsd:enumeration>
995 <xsl:attribute name="value"><xsl:value-of select="@name" /></xsl:attribute>
996 </xsd:enumeration>
997 </xsl:for-each>
998 </xsd:restriction>
999 </xsd:simpleType>
1000 </xsl:for-each>
1001
1002 <!-- type-define all interfaces that have wsmap=struct as structs (complexTypes) -->
1003 <xsl:comment>
1004 ******************************************************
1005 * structs
1006 ******************************************************
1007</xsl:comment>
1008 <xsl:for-each select="//interface[@wsmap='struct']">
1009 <xsl:comment> interface <xsl:value-of select="@name" /> as struct: </xsl:comment>
1010 <xsd:complexType>
1011 <xsl:attribute name="name"><xsl:value-of select="@name" /></xsl:attribute>
1012 <xsd:sequence>
1013 <xsl:for-each select="attribute">
1014 <xsd:element>
1015 <xsl:attribute name="name"><xsl:value-of select="@name" /></xsl:attribute>
1016 <xsl:attribute name="type">
1017 <xsl:call-template name="emitConvertedType">
1018 <xsl:with-param name="type" select="@type" />
1019 </xsl:call-template>
1020 </xsl:attribute>
1021 </xsd:element>
1022 </xsl:for-each>
1023 </xsd:sequence>
1024 </xsd:complexType>
1025 </xsl:for-each>
1026
1027 <!-- type-define all collections as arrays (complexTypes) -->
1028 <xsl:comment>
1029 ******************************************************
1030 * collections as arrays
1031 ******************************************************
1032</xsl:comment>
1033 <xsl:for-each select="//collection">
1034 <xsl:variable name="type" select="@type" />
1035 <xsl:variable name="ifwsmap" select="//interface[@name=$type]/@wsmap" />
1036 <xsl:comment><xsl:value-of select="concat(' collection ', @name, ' as array (wsmap: ', $ifwsmap, '): ')" /></xsl:comment>
1037 <xsd:complexType>
1038 <xsl:attribute name="name"><xsl:value-of select="concat('ArrayOf', @type)" /></xsl:attribute>
1039 <xsd:sequence>
1040 <xsl:choose>
1041 <xsl:when test="($ifwsmap='managed') or ($ifwsmap='explicit')">
1042 <xsd:element name="array" minOccurs="0" maxOccurs="unbounded">
1043 <xsl:attribute name="type"><xsl:value-of select="$G_typeObjectRef" /></xsl:attribute>
1044 </xsd:element>
1045 </xsl:when>
1046 <xsl:when test="$ifwsmap='struct'">
1047 <xsd:element name="array" minOccurs="0" maxOccurs="unbounded">
1048 <xsl:attribute name="type"><xsl:value-of select="concat('vbox:', @type)" /></xsl:attribute>
1049 </xsd:element>
1050 </xsl:when>
1051 <xsl:otherwise>
1052 <xsl:call-template name="fatalError">
1053 <xsl:with-param name="msg" select="concat('library template: collection &quot;', @name, '&quot; uses interface with unsupported wsmap attribute value &quot;', $ifwsmap, '&quot;')" />
1054 </xsl:call-template>
1055 </xsl:otherwise>
1056 </xsl:choose>
1057 </xsd:sequence>
1058 </xsd:complexType>
1059 </xsl:for-each>
1060
1061 <!-- for WSDL 'document' style, we need to emit elements since we can't
1062 refer to types in message parts as with RPC style -->
1063 <xsl:if test="$G_basefmt='document'">
1064 <xsl:comment>
1065 ******************************************************
1066 * elements for message arguments (parts); generated for WSDL 'document' style
1067 ******************************************************
1068</xsl:comment>
1069
1070 <xsl:for-each select="//interface">
1071 <xsl:variable name="ifname"><xsl:value-of select="@name" /></xsl:variable>
1072 <xsl:variable name="wsmap"><xsl:value-of select="@wsmap" /></xsl:variable>
1073
1074 <xsl:if test='not( ($wsmap="suppress") or ($wsmap="struct") )'>
1075 <xsl:comment>Interface <xsl:copy-of select="$ifname" /></xsl:comment>
1076 <xsl:call-template name="debugMsg"><xsl:with-param name="msg" select="concat('************* types: elements for interface &quot;', $ifname, '&quot;')" /></xsl:call-template>
1077 <!-- a) attributes first -->
1078 <xsl:for-each select="attribute">
1079 <xsl:variable name="attrname"><xsl:value-of select="@name" /></xsl:variable>
1080 <xsl:variable name="attrtype"><xsl:value-of select="@type" /></xsl:variable>
1081 <xsl:variable name="attrsafearray"><xsl:value-of select="@safearray" /></xsl:variable>
1082 <xsl:variable name="attrreadonly"><xsl:value-of select="@readonly" /></xsl:variable>
1083 <xsl:call-template name="debugMsg"><xsl:with-param name="msg" select="concat('elements for ', $ifname, '::', $attrname, ': attribute of type &quot;', $attrtype, '&quot;, readonly: ', $attrreadonly)" /></xsl:call-template>
1084 <!-- skip this attribute if it has parameters of a type that has wsmap="suppress" -->
1085 <xsl:choose>
1086 <xsl:when test="( $attrtype=($G_setSuppressedInterfaces/@name) )">
1087 <xsl:comment><xsl:value-of select="concat('skipping attribute ', $attrtype, ' for it is of a suppressed type')" /></xsl:comment>
1088 </xsl:when>
1089 <xsl:otherwise>
1090 <xsl:choose>
1091 <xsl:when test="@readonly='yes'">
1092 <xsl:comment> readonly attribute <xsl:copy-of select="$ifname" />::<xsl:copy-of select="$attrname" /> </xsl:comment>
1093 </xsl:when>
1094 <xsl:otherwise>
1095 <xsl:comment> read/write attribute <xsl:copy-of select="$ifname" />::<xsl:copy-of select="$attrname" /> </xsl:comment>
1096 </xsl:otherwise>
1097 </xsl:choose>
1098 <!-- aa) get method: emit request and result -->
1099 <xsl:call-template name="emitGetAttributeElements">
1100 <xsl:with-param name="ifname" select="$ifname" />
1101 <xsl:with-param name="wsmap" select="$wsmap" />
1102 <xsl:with-param name="attrname" select="$attrname" />
1103 <xsl:with-param name="attrtype" select="$attrtype" />
1104 <xsl:with-param name="attrsafearray" select="$attrsafearray" />
1105 </xsl:call-template>
1106 <!-- bb) emit a set method if the attribute is read/write -->
1107 <xsl:if test="not($attrreadonly='yes')">
1108 <xsl:variable name="attrSetter"><xsl:call-template name="makeSetterName"><xsl:with-param name="attrname" select="$attrname" /></xsl:call-template></xsl:variable>
1109 <xsl:call-template name="debugMsg"><xsl:with-param name="msg" select="concat('..', $ifname, '::', $attrSetter)" /></xsl:call-template>
1110 <xsl:call-template name="emitRequestElements">
1111 <xsl:with-param name="_ifname" select="$ifname" />
1112 <xsl:with-param name="_wsmap" select="$wsmap" />
1113 <xsl:with-param name="_methodname" select="$attrSetter" />
1114 <xsl:with-param name="_params" select="/.." />
1115 <xsl:with-param name="_valuetype" select="$attrtype" />
1116 <xsl:with-param name="_valuesafearray" select="$attrsafearray" />
1117 </xsl:call-template>
1118 <xsl:call-template name="emitResultElements">
1119 <xsl:with-param name="_ifname" select="$ifname" />
1120 <xsl:with-param name="_methodname" select="$attrSetter" />
1121 <xsl:with-param name="_params" select="/.." />
1122 </xsl:call-template>
1123 </xsl:if>
1124 </xsl:otherwise>
1125 </xsl:choose>
1126 </xsl:for-each> <!-- select="attribute" -->
1127 <!-- b) "real" methods after the attributes -->
1128 <xsl:for-each select="method">
1129 <xsl:variable name="methodname"><xsl:value-of select="@name" /></xsl:variable>
1130 <xsl:call-template name="debugMsg"><xsl:with-param name="msg" select="concat('messages for ', $ifname, '::', $methodname, ': method')" /></xsl:call-template>
1131 <xsl:comment> method <xsl:copy-of select="$ifname" />::<xsl:copy-of select="$methodname" /> </xsl:comment>
1132 <!-- skip this method if it has parameters of a type that has wsmap="suppress" -->
1133 <xsl:choose>
1134 <xsl:when test="param[@type=($G_setSuppressedInterfaces/@name)]">
1135 <xsl:comment><xsl:value-of select="concat('skipping method ', $methodname, ' for it has parameters with suppressed types')" /></xsl:comment>
1136 </xsl:when>
1137 <xsl:otherwise>
1138 <!-- always emit a request message -->
1139 <xsl:call-template name="emitRequestElements">
1140 <xsl:with-param name="_ifname" select="$ifname" />
1141 <xsl:with-param name="_wsmap" select="$wsmap" />
1142 <xsl:with-param name="_methodname" select="$methodname" />
1143 <xsl:with-param name="_params" select="param" />
1144 </xsl:call-template>
1145 <!-- emit a second "result" message only if the method has "out" arguments or a return value -->
1146 <!-- <xsl:if test="(count(param[@dir='out'] | param[@dir='return']) > 0)"> -->
1147 <xsl:call-template name="emitResultElements">
1148 <xsl:with-param name="_ifname" select="$ifname" />
1149 <xsl:with-param name="_wsmap" select="$wsmap" />
1150 <xsl:with-param name="_methodname" select="$methodname" />
1151 <xsl:with-param name="_params" select="param" />
1152 </xsl:call-template>
1153 <!-- </xsl:if> -->
1154 </xsl:otherwise>
1155 </xsl:choose>
1156 </xsl:for-each>
1157 </xsl:if> <!-- <xsl:if test='not( ($wsmap="suppress") or ($wsmap="struct") )'> -->
1158 </xsl:for-each>
1159
1160 </xsl:if> <!-- <xsl:if test="$G_basefmt='document'"> -->
1161
1162 <xsl:comment>
1163 ******************************************************
1164 * faults
1165 ******************************************************
1166</xsl:comment>
1167
1168 <xsd:element name="InvalidObjectFault">
1169 <xsd:complexType>
1170 <xsd:sequence>
1171 <xsd:element name="badObjectID">
1172 <xsl:attribute name="type">
1173 <xsl:value-of select="$G_typeObjectRef" />
1174 </xsl:attribute>
1175 </xsd:element>
1176 </xsd:sequence>
1177 </xsd:complexType>
1178 </xsd:element>
1179
1180 <xsd:element name="RuntimeFault">
1181 <xsd:complexType>
1182 <xsd:sequence>
1183 <xsd:element name="resultCode" type="xsd:int" />
1184 <xsd:element name="interfaceID" type="xsd:string" />
1185 <xsd:element name="component" type="xsd:string" />
1186 <xsd:element name="text" type="xsd:string" />
1187 </xsd:sequence>
1188 </xsd:complexType>
1189 </xsd:element>
1190
1191 <!-- done! -->
1192 </xsd:schema>
1193
1194
1195 </types>
1196
1197 <message name="InvalidObjectFaultMsg">
1198 <part name="fault" element="vbox:InvalidObjectFault" />
1199 </message>
1200 <message name="RuntimeFaultMsg">
1201 <part name="fault" element="vbox:RuntimeFault" />
1202 </message>
1203
1204 <xsl:comment>
1205 ******************************************************
1206 *
1207 * messages for all interfaces
1208 *
1209 ******************************************************
1210</xsl:comment>
1211
1212 <xsl:for-each select="//interface">
1213 <xsl:variable name="ifname"><xsl:value-of select="@name" /></xsl:variable>
1214 <xsl:variable name="wsmap"><xsl:value-of select="@wsmap" /></xsl:variable>
1215
1216 <xsl:call-template name="verifyInterface">
1217 <xsl:with-param name="ifname" select="$ifname" />
1218 <xsl:with-param name="wsmap" select="$wsmap" />
1219 </xsl:call-template>
1220
1221 <xsl:comment>
1222 *************************************
1223 messages for interface <xsl:copy-of select="$ifname" />
1224 *************************************
1225 </xsl:comment>
1226
1227 <xsl:if test='not( ($wsmap="suppress") or ($wsmap="struct") )'>
1228 <xsl:call-template name="emitMessagesForInterface">
1229 <xsl:with-param name="ifname" select="$ifname" />
1230 <xsl:with-param name="wsmap" select="$wsmap" />
1231 </xsl:call-template>
1232 </xsl:if>
1233 </xsl:for-each>
1234
1235 <xsl:comment>
1236 ******************************************************
1237 *
1238 * one portType for all interfaces
1239 *
1240 ******************************************************
1241 </xsl:comment>
1242
1243 <portType>
1244 <xsl:attribute name="name"><xsl:copy-of select="'vbox'" /><xsl:value-of select="$G_portTypeSuffix" /></xsl:attribute>
1245
1246 <xsl:for-each select="//interface">
1247 <xsl:variable name="ifname"><xsl:value-of select="@name" /></xsl:variable>
1248 <xsl:variable name="wsmap"><xsl:value-of select="@wsmap" /></xsl:variable>
1249
1250 <xsl:comment>
1251 *************************************
1252 operations in portType for interface <xsl:copy-of select="$ifname" />
1253 *************************************
1254 </xsl:comment>
1255
1256 <xsl:if test='not( ($wsmap="suppress") or ($wsmap="struct") )'>
1257 <xsl:call-template name="emitOperationsInPortTypeForInterface">
1258 <xsl:with-param name="ifname" select="$ifname" />
1259 <xsl:with-param name="wsmap" select="$wsmap" />
1260 </xsl:call-template>
1261 </xsl:if>
1262 </xsl:for-each>
1263 </portType>
1264
1265 <xsl:comment>
1266 ******************************************************
1267 *
1268 * one binding for all interfaces
1269 *
1270 ******************************************************
1271 </xsl:comment>
1272
1273 <binding>
1274 <xsl:attribute name="name"><xsl:value-of select="concat('vbox', $G_bindingSuffix)" /></xsl:attribute>
1275 <xsl:attribute name="type"><xsl:value-of select="concat('vbox:vbox', $G_portTypeSuffix)" /></xsl:attribute>
1276
1277 <soap:binding>
1278 <xsl:attribute name="style"><xsl:value-of select="$G_basefmt" /></xsl:attribute>
1279 <xsl:attribute name="transport">http://schemas.xmlsoap.org/soap/http</xsl:attribute>
1280 </soap:binding>
1281
1282 <xsl:for-each select="//interface">
1283 <xsl:variable name="ifname"><xsl:value-of select="@name" /></xsl:variable>
1284 <xsl:variable name="wsmap"><xsl:value-of select="@wsmap" /></xsl:variable>
1285
1286 <xsl:comment>
1287 *************************************
1288 operations in portType for interface <xsl:copy-of select="$ifname" />
1289 *************************************
1290 </xsl:comment>
1291
1292 <xsl:if test='not( ($wsmap="suppress") or ($wsmap="struct") )'>
1293 <xsl:call-template name="emitOperationsInBindingForInterface">
1294 <xsl:with-param name="ifname" select="$ifname" />
1295 <xsl:with-param name="wsmap" select="$wsmap" />
1296 </xsl:call-template>
1297 </xsl:if>
1298 </xsl:for-each>
1299 </binding>
1300
1301 </definitions>
1302</xsl:template>
1303
1304
1305</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette