VirtualBox

source: vbox/trunk/src/VBox/Main/webservice/websrv-shared.inc.xsl@ 37952

Last change on this file since 37952 was 32728, checked in by vboxsync, 14 years ago

backed out accidental changes

  • Property svn:eol-style set to native
File size: 13.6 KB
Line 
1<!--
2 websrv-shared.inc.xsl:
3 this gets included from the other websrv-*.xsl XSLT stylesheets
4 so we can share some definitions that must be the same for
5 all of them (like method prefixes/suffices).
6 See webservice/Makefile.kmk for an overview of all the things
7 generated for the webservice.
8
9 Copyright (C) 2006-2010 Oracle Corporation
10
11 This file is part of VirtualBox Open Source Edition (OSE), as
12 available from http://www.virtualbox.org. This file is free software;
13 you can redistribute it and/or modify it under the terms of the GNU
14 General Public License (GPL) as published by the Free Software
15 Foundation, in version 2 as it comes in the "COPYING" file of the
16 VirtualBox OSE distribution. VirtualBox OSE is distributed in the
17 hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
18-->
19
20
21<xsl:stylesheet
22 version="1.0"
23 targetNamespace="http://schemas.xmlsoap.org/wsdl/"
24 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
25 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
26 xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
27 xmlns:vbox="http://www.virtualbox.org/">
28
29<xsl:variable name="G_xsltIncludeFilename" select="'websrv-shared.inc.xsl'" />
30
31<!-- target namespace; this must match the xmlns:vbox in stylesheet opening tags! -->
32<xsl:variable name="G_targetNamespace"
33 select='"http://www.virtualbox.org/"' />
34<xsl:variable name="G_targetNamespaceSeparator"
35 select='""' />
36
37<!-- ENCODING SCHEME
38
39 See: http://www-128.ibm.com/developerworks/webservices/library/ws-whichwsdl/
40
41 Essentially "document" style means that each SOAP message is a complete and
42 self-explanatory document that does not rely on outside information for
43 validation.
44
45 By contrast, the (older) "RPC" style allows for much shorter SOAP messages
46 that do not contain validation info like all types that are used, but then
47 again, caller and receiver must have agreed on a valid format in some other way.
48 With RPC, WSDL typically looks like this:
49
50 <message name="myMethodRequest">
51 <part name="x" type="xsd:int"/>
52 <part name="y" type="xsd:float"/>
53 </message>
54
55 This is why today "document" style is preferred. However, with document style,
56 one _cannot_ use "type" in <part> elements. Instead, one must use "element"
57 attributes that refer to <element> items in the type section. Like this:
58
59 <types>
60 <schema>
61 <element name="xElement" type="xsd:int"/>
62 <element name="yElement" type="xsd:float"/>
63 </schema>
64 </types>
65
66 <message name="myMethodRequest">
67 <part name="x" element="xElement"/>
68 <part name="y" element="yElement"/>
69 </message>
70
71 The "encoded" and "literal" sub-styles then only determine whether the
72 individual types in the soap messages carry additional information in
73 attributes. "Encoded" was only used with RPC styles, really, and even that
74 is not widely supported any more.
75
76-->
77<!-- These are the settings: all the other XSLTs react on this and are supposed
78 to be able to generate both valid RPC and document-style code. The only
79 allowed values are 'rpc' or 'document'. -->
80<xsl:variable name="G_basefmt"
81 select='"document"' />
82<xsl:variable name="G_parmfmt"
83 select='"literal"' />
84<!-- <xsl:variable name="G_basefmt"
85 select='"rpc"' />
86<xsl:variable name="G_parmfmt"
87 select='"encoded"' /> -->
88
89<!-- with document style, this is how we name the request and return element structures -->
90<xsl:variable name="G_requestElementVarName"
91 select='"req"' />
92<xsl:variable name="G_responseElementVarName"
93 select='"resp"' />
94<!-- this is how we name the result parameter in messages -->
95<xsl:variable name="G_result"
96 select='"returnval"' />
97
98<!-- we represent interface attributes by creating "get" and "set" methods; these
99 are the prefixes we use for that -->
100<xsl:variable name="G_attributeGetPrefix"
101 select='"get"' />
102<xsl:variable name="G_attributeSetPrefix"
103 select='"set"' />
104<!-- separator between class name and method/attribute name; would be "::" in C++
105 but i'm unsure whether WSDL appreciates that (WSDL only) -->
106<xsl:variable name="G_classSeparator"
107 select='"_"' />
108<!-- for each interface method, we need to create both a "request" and a "response"
109 message; these are the suffixes we append to the method names for that -->
110<xsl:variable name="G_methodRequest"
111 select='"RequestMsg"' />
112<xsl:variable name="G_methodResponse"
113 select='"ResultMsg"' />
114<!-- suffix for element declarations that describe request message parameters (WSDL only) -->
115<xsl:variable name="G_requestMessageElementSuffix"
116 select='""' />
117<!-- suffix for element declarations that describe request message parameters (WSDL only) -->
118<xsl:variable name="G_responseMessageElementSuffix"
119 select='"Response"' />
120<!-- suffix for portType names (WSDL only) -->
121<xsl:variable name="G_portTypeSuffix"
122 select='"PortType"' />
123<!-- suffix for binding names (WSDL only) -->
124<xsl:variable name="G_bindingSuffix"
125 select='"Binding"' />
126<!-- schema type to use for object references; while it is theoretically
127 possible to use a self-defined type (e.g. some vboxObjRef type that's
128 really an int), gSOAP gets a bit nasty and creates complicated structs
129 for function parameters when these types are used as output parameters.
130 So we just use "int" even though it's not as lucid.
131 One setting is for the WSDL emitter, one for the C++ emitter -->
132<!--
133<xsl:variable name="G_typeObjectRef"
134 select='"xsd:unsignedLong"' />
135<xsl:variable name="G_typeObjectRef_gsoapH"
136 select='"ULONG64"' />
137<xsl:variable name="G_typeObjectRef_CPP"
138 select='"WSDLT_ID"' />
139-->
140<xsl:variable name="G_typeObjectRef"
141 select='"xsd:string"' />
142<xsl:variable name="G_typeObjectRef_gsoapH"
143 select='"std::string"' />
144<xsl:variable name="G_typeObjectRef_CPP"
145 select='"std::string"' />
146<!-- and what to call first the object parameter -->
147<xsl:variable name="G_nameObjectRef"
148 select='"_this"' />
149<!-- gSOAP encodes underscores with USCORE so this is used in our C++ code -->
150<xsl:variable name="G_nameObjectRefEncoded"
151 select='"_USCOREthis"' />
152
153<!-- type to represent enums with in C++ COM callers -->
154<xsl:variable name="G_funcPrefixInputEnumConverter"
155 select='"EnumSoap2Com_"' />
156<xsl:variable name="G_funcPrefixOutputEnumConverter"
157 select='"EnumCom2Soap_"' />
158
159<xsl:variable name="G_aSharedTypes">
160 <type idlname="octet" xmlname="unsignedByte" cname="unsigned char" gluename="BYTE" javaname="byte" />
161 <type idlname="boolean" xmlname="boolean" cname="bool" gluename="BOOL" javaname="Boolean" />
162 <type idlname="short" xmlname="short" cname="short" gluename="SHORT" javaname="Short" />
163 <type idlname="unsigned short" xmlname="unsignedShort" cname="unsigned short" gluename="USHORT" javaname="Integer" />
164 <type idlname="long" xmlname="int" cname="int" gluename="LONG" javaname="Integer" />
165 <type idlname="unsigned long" xmlname="unsignedInt" cname="unsigned int" gluename="ULONG" javaname="Long" />
166 <type idlname="long long" xmlname="long" cname="LONG64" gluename="LONG64" javaname="Long" />
167 <type idlname="unsigned long long" xmlname="unsignedLong" cname="ULONG64" gluename="ULONG64" javaname="BigInteger" />
168 <type idlname="double" xmlname="double" cname="double" gluename="" javaname="Double" />
169 <type idlname="float" xmlname="float" cname="float" gluename="" javaname="Float" />
170 <type idlname="wstring" xmlname="string" cname="std::string" gluename="" javaname="String" />
171 <type idlname="uuid" xmlname="string" cname="std::string" gluename="" javaname="String" />
172 <type idlname="result" xmlname="unsignedInt" cname="unsigned int" gluename="HRESULT" javaname="Long" />
173</xsl:variable>
174
175<!--
176 warning:
177 -->
178
179<xsl:template name="warning">
180 <xsl:param name="msg" />
181
182 <xsl:message terminate="no">
183 <xsl:value-of select="concat('[', $G_xsltFilename, '] Warning in ', $msg)" />
184 </xsl:message>
185</xsl:template>
186
187<!--
188 fatalError:
189 -->
190
191<xsl:template name="fatalError">
192 <xsl:param name="msg" />
193
194 <xsl:message terminate="yes">
195 <xsl:value-of select="concat('[', $G_xsltFilename, '] Error in ', $msg)" />
196 </xsl:message>
197</xsl:template>
198
199<!--
200 debugMsg
201 -->
202
203<xsl:template name="debugMsg">
204 <xsl:param name="msg" />
205
206 <xsl:if test="$G_argDebug">
207 <xsl:message terminate="no">
208 <xsl:value-of select="concat('[', $G_xsltFilename, '] ', $msg)" />
209 </xsl:message>
210 </xsl:if>
211</xsl:template>
212
213<!--
214 uncapitalize
215 -->
216
217<xsl:template name="uncapitalize">
218 <xsl:param name="str" select="."/>
219 <xsl:value-of select="
220 concat(
221 translate(substring($str,1,1),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),
222 substring($str,2)
223 )
224 "/>
225</xsl:template>
226<!--
227 uncapitalize in the way JAX-WS understands, see #2910
228 -->
229
230<xsl:template name="uncapitalize2">
231 <xsl:param name="str" select="."/>
232 <xsl:variable name="strlen">
233 <xsl:value-of select="string-length($str)"/>
234 </xsl:variable>
235 <xsl:choose>
236 <xsl:when test="$strlen>1">
237 <xsl:choose>
238 <xsl:when test="contains('ABCDEFGHIJKLMNOPQRSTUVWXYZ',substring($str,1,1))
239 and
240 contains('ABCDEFGHIJKLMNOPQRSTUVWXYZ',substring($str,2,1))">
241 <xsl:variable name="cdr">
242 <xsl:call-template name="uncapitalize2">
243 <xsl:with-param name="str" select="substring($str,2)"/>
244 </xsl:call-template>
245 </xsl:variable>
246 <xsl:value-of select="
247 concat(
248 translate(substring($str,1,1),
249 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
250 'abcdefghijklmnopqrstuvwxyz'),
251 $cdr
252 )
253 "/>
254 </xsl:when>
255 <xsl:otherwise>
256 <!--<xsl:value-of select="concat(substring($str,1,1),$cdr)"/>-->
257 <xsl:value-of select="$str"/>
258 </xsl:otherwise>
259 </xsl:choose>
260 </xsl:when>
261 <xsl:when test="$strlen=1">
262 <xsl:value-of select="
263 translate($str,
264 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
265 'abcdefghijklmnopqrstuvwxyz')
266 "/>
267 </xsl:when>
268 <xsl:otherwise>
269 </xsl:otherwise>
270 </xsl:choose>
271</xsl:template>
272<!--
273 capitalize
274 -->
275
276<xsl:template name="capitalize">
277 <xsl:param name="str" select="."/>
278 <xsl:value-of select="
279 concat(
280 translate(substring($str,1,1),'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ'),
281 substring($str,2)
282 )
283 "/>
284</xsl:template>
285
286<!--
287 makeGetterName:
288 -->
289<xsl:template name="makeGetterName">
290 <xsl:param name="attrname" />
291 <xsl:variable name="capsname"><xsl:call-template name="capitalize"><xsl:with-param name="str" select="$attrname" /></xsl:call-template></xsl:variable>
292 <xsl:value-of select="concat($G_attributeGetPrefix, $capsname)" />
293</xsl:template>
294
295<!--
296 makeSetterName:
297 -->
298<xsl:template name="makeSetterName">
299 <xsl:param name="attrname" />
300 <xsl:variable name="capsname"><xsl:call-template name="capitalize"><xsl:with-param name="str" select="$attrname" /></xsl:call-template></xsl:variable>
301 <xsl:value-of select="concat($G_attributeSetPrefix, $capsname)" />
302</xsl:template>
303
304<!--
305 makeJaxwsMethod: compose idevInterfaceMethod out of IDEVInterface::method
306 -->
307<xsl:template name="makeJaxwsMethod">
308 <xsl:param name="ifname" />
309 <xsl:param name="methodname" />
310 <xsl:variable name="uncapsif"><xsl:call-template name="uncapitalize2"><xsl:with-param name="str" select="$ifname" /></xsl:call-template></xsl:variable>
311 <xsl:variable name="capsmethod"><xsl:call-template name="capitalize"><xsl:with-param name="str" select="$methodname" /></xsl:call-template></xsl:variable>
312 <xsl:value-of select="concat($uncapsif, $capsmethod)" />
313</xsl:template>
314
315
316<!--
317 makeJaxwsMethod2: compose iInterfaceMethod out of IInterface::method
318 -->
319<xsl:template name="makeJaxwsMethod2">
320 <xsl:param name="ifname" />
321 <xsl:param name="methodname" />
322 <xsl:variable name="uncapsif"><xsl:call-template name="uncapitalize"><xsl:with-param name="str" select="$ifname" /></xsl:call-template></xsl:variable>
323 <xsl:variable name="capsmethod"><xsl:call-template name="capitalize"><xsl:with-param name="str" select="$methodname" /></xsl:call-template></xsl:variable>
324 <xsl:value-of select="concat($uncapsif, $capsmethod)" />
325</xsl:template>
326
327<!--
328 emitNewline:
329 -->
330<xsl:template name="emitNewline">
331 <xsl:text>
332</xsl:text>
333</xsl:template>
334
335<!--
336 emitNewlineIndent8:
337 -->
338<xsl:template name="emitNewlineIndent8">
339 <xsl:text>
340 </xsl:text>
341</xsl:template>
342
343<!--
344 escapeUnderscores
345 -->
346<xsl:template name="escapeUnderscores">
347 <xsl:param name="string" />
348 <xsl:if test="contains($string, '_')">
349 <xsl:value-of select="substring-before($string, '_')" />_USCORE<xsl:call-template name="escapeUnderscores"><xsl:with-param name="string"><xsl:value-of select="substring-after($string, '_')" /></xsl:with-param></xsl:call-template>
350 </xsl:if>
351 <xsl:if test="not(contains($string, '_'))"><xsl:value-of select="$string" />
352 </xsl:if>
353</xsl:template>
354
355</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