VirtualBox

source: vbox/trunk/src/VBox/Main/webservice/glue-jaxws.xsl@ 33458

Last change on this file since 33458 was 29835, checked in by vboxsync, 14 years ago

Webservice: change license of generated files to LGPL

  • Property svn:eol-style set to native
File size: 54.6 KB
Line 
1<?xml version="1.0"?>
2
3<!--
4 websrv-jax-ws.xsl:
5 XSLT stylesheet that generates virtualbox.java from
6 VirtualBox.xidl. This generated Java code contains
7 a Java wrapper that allows client code to use the
8 webservice in an object-oriented way.
9
10 Copyright (C) 2008-2010 Oracle Corporation
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
21<xsl:stylesheet
22 version="1.0"
23 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
24 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
25 xmlns:exsl="http://exslt.org/common"
26 extension-element-prefixes="exsl">
27
28 <xsl:output method="text"/>
29
30 <xsl:strip-space elements="*"/>
31
32<!-- - - - - - - - - - - - - - - - - - - - - - -
33 global XSLT variables
34 - - - - - - - - - - - - - - - - - - - - - - -->
35
36<xsl:variable name="G_xsltFilename" select="'glue-jaxws.xsl'" />
37<!-- Keep in sync with VBOX_JAVA_PACKAGE in webservices/Makefile.kmk -->
38<xsl:variable name="G_virtualBoxPackage" select="concat('org.virtualbox',$G_vboxApiSuffix)" />
39<xsl:variable name="G_virtualBoxPackage2" select="concat('com.sun.xml.ws.commons.virtualbox',$G_vboxApiSuffix)" />
40<xsl:variable name="G_virtualBoxWsdl" select="concat(concat('&quot;vboxwebService',$G_vboxApiSuffix), '.wsdl&quot;')" />
41
42<xsl:include href="websrv-shared.inc.xsl" />
43
44<!-- collect all interfaces with "wsmap='suppress'" in a global variable for
45 quick lookup -->
46<xsl:variable name="G_setSuppressedInterfaces"
47 select="//interface[@wsmap='suppress']" />
48
49
50<xsl:template name="fileheader">
51 <xsl:param name="name" />
52 <xsl:text>/**
53 * Copyright (C) 2008-2010 Oracle Corporation
54 *
55 * This file is part of a free software library; you can redistribute
56 * it and/or modify it under the terms of the GNU Lesser General
57 * Public License version 2.1 as published by the Free Software
58 * Foundation and shipped in the "COPYING.LIB" file with this library.
59 * The library is distributed in the hope that it will be useful,
60 * but WITHOUT ANY WARRANTY of any kind.
61 *
62 * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if
63 * any license choice other than GPL or LGPL is available it will
64 * apply instead, Oracle elects to use only the Lesser General Public
65 * License version 2.1 (LGPLv2) at this time for any software where
66 * a choice of LGPL license versions is made available with the
67 * language indicating that LGPLv2 or any later version may be used,
68 * or where a choice of which version of the LGPL is applied is
69 * otherwise unspecified.
70 *
71</xsl:text>
72 <xsl:value-of select="concat(' * ',$name)"/>
73<xsl:text>
74 *
75 * DO NOT EDIT! This is a generated file.
76 * Generated from: src/VBox/Main/idl/VirtualBox.xidl (VirtualBox's interface definitions in XML)
77 * Generator: src/VBox/Main/webservice/glue-jaxws.xsl
78 */
79
80</xsl:text>
81</xsl:template>
82
83<!-- Emits the fully prefixed class name, if necessary, of the given type. This dies
84 if $name is not defined in XIDL; in other words, do not call this for built-in types. -->
85<xsl:template name="fullClassName">
86 <xsl:param name="name" />
87 <xsl:param name="origname" />
88 <xsl:param name="collPrefix" />
89 <xsl:variable name="coll" select="//collection[@name=$name]" />
90 <xsl:choose>
91 <xsl:when test="//collection[@name=$name]">
92 <!-- for collections and safearrays we return element type -->
93 <xsl:call-template name="fullClassName">
94 <xsl:with-param name="name" select="concat($collPrefix,//collection[@name=$name]/@type)" />
95 <xsl:with-param name="origname" select="//collection[@name=$name]/@type" />
96 <xsl:with-param name="collPrefix" select="$collPrefix" />
97 </xsl:call-template>
98 <!-- <xsl:value-of select="concat('org.virtualbox.', concat($collPrefix,//collection[@name=$name]/@type))" /> -->
99 </xsl:when>
100 <xsl:when test="//enum[@name=$name] or //enum[@name=$origname]">
101 <xsl:value-of select="concat($G_virtualBoxPackage, concat('.', $name))" />
102 </xsl:when>
103 <xsl:when test="$collPrefix and //interface[@name=$origname]/@wsmap='managed'">
104 <xsl:value-of select="concat($G_virtualBoxPackage, concat('.', $name))" />
105 </xsl:when>
106 <xsl:when test="//interface[@name=$name]">
107 <xsl:value-of select="concat($G_virtualBoxPackage2, concat('.', $name))" />
108 </xsl:when>
109 <xsl:otherwise>
110 <xsl:call-template name="fatalError">
111 <xsl:with-param name="msg" select="concat('fullClassName: Type &quot;', $name, '&quot; is not supported.')" />
112 </xsl:call-template>
113 </xsl:otherwise>
114 </xsl:choose>
115</xsl:template>
116
117<!--
118 typeIdl2Glue: converts $type into a type as used by the java glue code.
119 For example, for an XIDL IMachineCollection, this will return
120 "List<com.sun.xml.ws.commons.virtualbox.IMachine>".
121 -->
122<xsl:template name="typeIdl2Glue">
123 <xsl:param name="ifname" />
124 <xsl:param name="method" />
125 <xsl:param name="name" />
126 <xsl:param name="type" />
127 <xsl:param name="safearray" />
128 <xsl:param name="forceelem" />
129
130 <xsl:variable name="needarray" select="($safearray='yes' or //collection[@name=$type]) and not($forceelem='yes')" />
131
132 <xsl:if test="$needarray">
133 <xsl:value-of select="'List&lt;'" />
134 </xsl:if>
135
136 <!-- look up Java type from IDL type from table array in websrv-shared.inc.xsl -->
137 <xsl:variable name="javatypefield" select="exsl:node-set($G_aSharedTypes)/type[@idlname=$type]/@javaname" />
138
139 <xsl:choose>
140 <xsl:when test="string-length($javatypefield)">
141 <xsl:value-of select="$javatypefield" />
142 </xsl:when>
143 <!-- not a standard type: then it better be one of the types defined in the XIDL -->
144 <xsl:when test="$type='$unknown'">IUnknown</xsl:when>
145 <xsl:otherwise>
146 <xsl:call-template name="fullClassName">
147 <xsl:with-param name="name" select="$type" />
148 <xsl:with-param name="collPrefix" select="''"/>
149 </xsl:call-template>
150 </xsl:otherwise>
151 </xsl:choose>
152
153 <xsl:if test="$needarray">
154 <xsl:value-of select="'&gt;'" />
155 </xsl:if>
156</xsl:template>
157
158<!--
159 typeIdl2Java: converts $type into a type as used by the JAX-WS backend.
160 For example, for an XIDL IMachineCollection, this will return
161 "ArrayOfIMachine".
162 -->
163<xsl:template name="typeIdl2Java">
164 <xsl:param name="ifname" />
165 <xsl:param name="method" />
166 <xsl:param name="name" />
167 <xsl:param name="type" />
168 <xsl:param name="safearray" />
169 <xsl:param name="forceelem" />
170
171 <xsl:variable name="needarray" select="($safearray='yes') and not($forceelem='yes')" />
172
173 <xsl:if test="$needarray">
174 <xsl:value-of select="'List&lt;'" />
175 </xsl:if>
176
177 <!-- look up Java type from IDL type from table array in websrv-shared.inc.xsl -->
178 <xsl:variable name="javatypefield" select="exsl:node-set($G_aSharedTypes)/type[@idlname=$type]/@javaname" />
179
180 <xsl:choose>
181 <xsl:when test="string-length($javatypefield)">
182 <xsl:value-of select="$javatypefield" />
183 </xsl:when>
184 <xsl:when test="$type='$unknown'">String</xsl:when>
185 <xsl:when test="//interface[@name=$type]/@wsmap='struct'">
186 <xsl:value-of select="concat($G_virtualBoxPackage, '.', $type)" />
187 </xsl:when>
188 <xsl:when test="//interface[@name=$type]/@wsmap='managed'">String</xsl:when>
189 <xsl:otherwise>
190 <xsl:call-template name="fullClassName">
191 <xsl:with-param name="name" select="$type" />
192 <xsl:with-param name="collPrefix" select="'ArrayOf'"/>
193 </xsl:call-template>
194 </xsl:otherwise>
195 </xsl:choose>
196 <xsl:if test="$needarray">
197 <xsl:value-of select="'&gt;'" />
198 </xsl:if>
199</xsl:template>
200
201<xsl:template name="cookOutParam">
202 <xsl:param name="ifname"/>
203 <xsl:param name="methodname"/>
204 <xsl:param name="value"/>
205 <xsl:param name="idltype"/>
206 <xsl:param name="safearray"/>
207 <xsl:variable name="isstruct"
208 select="//interface[@name=$idltype]/@wsmap='struct'" />
209 <xsl:choose>
210 <xsl:when test="//collection[@name=$idltype]">
211 <xsl:variable name="elemtype">
212 <xsl:call-template name="typeIdl2Glue">
213 <xsl:with-param name="ifname" select="$ifname" />
214 <xsl:with-param name="method" select="$methodname" />
215 <xsl:with-param name="name" select="$value" />
216 <xsl:with-param name="type" select="$idltype" />
217 <xsl:with-param name="forceelem" select="'yes'" />
218 </xsl:call-template>
219 </xsl:variable>
220 <xsl:choose>
221 <xsl:when test="contains($elemtype, $G_virtualBoxPackage)">
222 <xsl:value-of select="concat($value,'.getArray()')" />
223 </xsl:when>
224 <xsl:otherwise>
225 <xsl:value-of select="concat('Helper.wrap(', $elemtype, '.class, port, ((',
226 $value,' == null)? null : ',$value,'.getArray()))')" />
227 </xsl:otherwise>
228 </xsl:choose>
229 </xsl:when>
230 <xsl:when test="//interface[@name=$idltype] or $idltype='$unknown'">
231 <xsl:choose>
232 <xsl:when test="$safearray='yes'">
233 <xsl:variable name="elemtype">
234 <xsl:call-template name="typeIdl2Glue">
235 <xsl:with-param name="ifname" select="$ifname" />
236 <xsl:with-param name="method" select="$methodname" />
237 <xsl:with-param name="name" select="$value" />
238 <xsl:with-param name="type" select="$idltype" />
239 <xsl:with-param name="safearray" select="'no'" />
240 <xsl:with-param name="forceelem" select="'yes'" />
241 </xsl:call-template>
242 </xsl:variable>
243 <xsl:choose>
244 <xsl:when test="$isstruct">
245 <xsl:variable name="javagettertype">
246 <xsl:call-template name="typeIdl2Java">
247 <xsl:with-param name="method" select="$methodname" />
248 <xsl:with-param name="name" select="$value" />
249 <xsl:with-param name="type" select="$idltype" />
250 <xsl:with-param name="safearray" select="$safearray" />
251 <xsl:with-param name="forceelem" select="'yes'" />
252 </xsl:call-template>
253 </xsl:variable>
254 <xsl:value-of select="concat('Helper.wrap2(',$elemtype, '.class, ', $javagettertype, '.class, port, ', $value,')')"/>
255 </xsl:when>
256 <xsl:otherwise>
257 <xsl:value-of select="concat('Helper.wrap(',$elemtype, '.class, port, ', $value,')')"/>
258 </xsl:otherwise>
259 </xsl:choose>
260 </xsl:when>
261 <xsl:otherwise>
262 <xsl:variable name="gluetype">
263 <xsl:call-template name="typeIdl2Glue">
264 <xsl:with-param name="ifname" select="$ifname" />
265 <xsl:with-param name="method" select="$methodname" />
266 <xsl:with-param name="name" select="$value" />
267 <xsl:with-param name="type" select="$idltype" />
268 <xsl:with-param name="safearray" select="$safearray" />
269 </xsl:call-template>
270 </xsl:variable>
271 <xsl:choose>
272 <xsl:when test="$isstruct">
273 <xsl:value-of select="concat('(', $value, ' != null) ? new ', $gluetype, '(', $value,', port) : null')" />
274 </xsl:when>
275 <xsl:otherwise>
276 <!-- if the MOR string is empty, that means NULL, so return NULL instead of an object then -->
277 <xsl:value-of select="concat('(', $value, '.length() > 0) ? new ', $gluetype, '(', $value,', port) : null')" />
278 </xsl:otherwise>
279 </xsl:choose>
280 </xsl:otherwise>
281 </xsl:choose>
282 </xsl:when>
283 <xsl:otherwise>
284 <xsl:value-of select="$value"/>
285 </xsl:otherwise>
286 </xsl:choose>
287</xsl:template>
288
289<xsl:template name="genStructWrapper">
290 <xsl:param name="ifname" select="@name" />
291
292 <xsl:value-of select="concat(' private ', $G_virtualBoxPackage,'.',$ifname, ' real;&#10;')"/>
293 <xsl:value-of select="' private VboxPortType port;&#10;&#10;'"/>
294
295 <xsl:value-of select="concat(' public ', $ifname, '(', $G_virtualBoxPackage,'.',$ifname,' real, VboxPortType port) {&#10; this.real = real; &#10; this.port = port; &#10; }&#10;')"/>
296 <xsl:for-each select="attribute">
297 <xsl:variable name="attrname"><xsl:value-of select="@name" /></xsl:variable>
298 <xsl:variable name="attrtype"><xsl:value-of select="@type" /></xsl:variable>
299 <xsl:variable name="attrreadonly"><xsl:value-of select="@readonly" /></xsl:variable>
300 <xsl:variable name="attrsafearray"><xsl:value-of select="@safearray" /></xsl:variable>
301 <xsl:choose>
302 <xsl:when test="$attrreadonly='yes'">
303 <xsl:value-of select="concat('&#10; // read-only attribute ', $ifname, '::', $attrname, ' of type ', $attrtype, '&#10;')" />
304
305 </xsl:when>
306 <xsl:otherwise>
307 <xsl:value-of select="concat('&#10; // read/write attribute ', $ifname, '::', $attrname, ' of type ', $attrtype, '&#10;')" />
308 </xsl:otherwise>
309 </xsl:choose>
310
311 <!-- emit getter method -->
312 <xsl:variable name="gettername">
313 <xsl:choose>
314 <!-- Stupid, but boolean getters called isFoo(), not getFoo() -->
315 <xsl:when test="$attrtype = 'boolean'">
316 <xsl:variable name="capsname">
317 <xsl:call-template name="capitalize">
318 <xsl:with-param name="str" select="$attrname" />
319 </xsl:call-template>
320 </xsl:variable>
321 <xsl:value-of select="concat('is', $capsname)" />
322 </xsl:when>
323 <xsl:otherwise>
324 <xsl:call-template name="makeGetterName">
325 <xsl:with-param name="attrname" select="$attrname" />
326 </xsl:call-template>
327 </xsl:otherwise>
328 </xsl:choose>
329 </xsl:variable>
330 <xsl:variable name="gluegettertype">
331 <xsl:call-template name="typeIdl2Glue">
332 <xsl:with-param name="ifname" select="$ifname" />
333 <xsl:with-param name="method" select="$gettername" />
334 <xsl:with-param name="name" select="$attrname" />
335 <xsl:with-param name="type" select="$attrtype" />
336 <xsl:with-param name="safearray" select="@safearray" />
337 </xsl:call-template>
338 </xsl:variable>
339 <xsl:variable name="javagettertype">
340 <xsl:call-template name="typeIdl2Java">
341 <xsl:with-param name="ifname" select="$ifname" />
342 <xsl:with-param name="method" select="$gettername" />
343 <xsl:with-param name="name" select="$attrname" />
344 <xsl:with-param name="type" select="$attrtype" />
345 <xsl:with-param name="safearray" select="@safearray" />
346 </xsl:call-template>
347 </xsl:variable>
348 <xsl:value-of select="concat(' public ', $gluegettertype, ' ', $gettername, '() {&#10;')" />
349 <xsl:value-of select="concat(' ', $javagettertype, ' retVal = real.', $gettername, '();&#10;')" />
350 <xsl:variable name="wrapped">
351 <xsl:call-template name="cookOutParam">
352 <xsl:with-param name="ifname" select="$ifname" />
353 <xsl:with-param name="method" select="$gettername" />
354 <xsl:with-param name="value" select="'retVal'" />
355 <xsl:with-param name="idltype" select="$attrtype" />
356 <xsl:with-param name="safearray" select="@safearray" />
357 </xsl:call-template>
358 </xsl:variable>
359 <xsl:value-of select="concat(' return ', $wrapped, ';&#10;')" />
360 <xsl:text> }&#10;</xsl:text>
361
362 </xsl:for-each>
363
364</xsl:template>
365
366
367<xsl:template name="emitArgInMethodImpl">
368 <xsl:param name="paramname" select="@name" />
369 <xsl:param name="paramtype" select="@type" />
370 <!-- per-argument special type handling -->
371 <xsl:choose>
372 <xsl:when test="//interface[@name=$paramtype] or $paramtype='$unknown'">
373 <xsl:choose>
374 <xsl:when test="@dir='out'">
375 <xsl:value-of select="concat('tmp', $paramname)" />
376 </xsl:when>
377 <xsl:otherwise>
378 <xsl:choose>
379 <xsl:when test="@safearray='yes'">
380 <xsl:value-of select="concat('Helper.unwrap(',$paramname,')')"/>
381 </xsl:when>
382 <xsl:otherwise>
383 <xsl:value-of select="concat('((', $paramname, ' == null)?null:', $paramname, '.getRef())')" />
384 </xsl:otherwise>
385 </xsl:choose>
386 </xsl:otherwise>
387 </xsl:choose>
388 </xsl:when>
389 <xsl:otherwise>
390 <xsl:value-of select="$paramname" />
391 </xsl:otherwise>
392 </xsl:choose>
393 <xsl:if test="not(position()=last())">
394 <xsl:text>, </xsl:text>
395 </xsl:if>
396</xsl:template>
397
398<xsl:template name="startFile">
399 <xsl:param name="file" />
400
401 <xsl:value-of select="concat('&#10;// ##### BEGINFILE &quot;', $file, '&quot;&#10;&#10;')" />
402 <xsl:call-template name="fileheader">
403 <xsl:with-param name="name" select="$file" />
404 </xsl:call-template>
405package <xsl:value-of select="$G_virtualBoxPackage2" />;
406
407import <xsl:value-of select="$G_virtualBoxPackage" />.VboxPortType;
408import <xsl:value-of select="$G_virtualBoxPackage" />.VboxService;
409import <xsl:value-of select="$G_virtualBoxPackage" />.InvalidObjectFaultMsg;
410import <xsl:value-of select="$G_virtualBoxPackage" />.RuntimeFaultMsg;
411import javax.xml.ws.WebServiceException;
412</xsl:template>
413
414<xsl:template name="endFile">
415 <xsl:param name="file" />
416 <xsl:value-of select="concat('&#10;// ##### ENDFILE &quot;', $file, '&quot;&#10;&#10;')" />
417</xsl:template>
418
419<!-- - - - - - - - - - - - - - - - - - - - - - -
420 root match
421 - - - - - - - - - - - - - - - - - - - - - - -->
422
423<xsl:template match="/idl">
424 <xsl:if test="not($G_vboxApiSuffix)">
425 <xsl:call-template name="fatalError">
426 <xsl:with-param name="msg" select="'G_vboxApiSuffix must be given'" />
427 </xsl:call-template>
428 </xsl:if>
429 <xsl:call-template name="startFile">
430 <xsl:with-param name="file" select="'IUnknown.java'" />
431 </xsl:call-template>
432
433 <xsl:text><![CDATA[
434public class IUnknown
435{
436 protected String _this; /* almost final, could only be set in finalizer */
437 protected final VboxPortType port;
438
439 public IUnknown(String _this, VboxPortType port)
440 {
441 this._this = _this;
442 this.port = port;
443 }
444
445 public final String getRef()
446 {
447 return _this;
448 }
449
450 public final VboxPortType getRemoteWSPort()
451 {
452 return port;
453 }
454
455 public synchronized void releaseRemote() throws WebServiceException
456 {
457 if (_this == null) {
458 return;
459 }
460 try {
461 port.iManagedObjectRefRelease(_this);
462 _this = null;
463 } catch (InvalidObjectFaultMsg e) {
464 throw new WebServiceException(e);
465 } catch (RuntimeFaultMsg e) {
466 throw new WebServiceException(e);
467 }
468 }
469
470 /*
471 protected void finalize()
472 {
473 try {
474 releaseRemote();
475 } catch (WebServiceException e) {
476 }
477 } */
478
479 // may need to support some sort of QueryInterface, to make this class useable
480 // not only as common baseclass
481}
482]]></xsl:text>
483
484 <xsl:call-template name="endFile">
485 <xsl:with-param name="file" select="'IUnknown.java'" />
486 </xsl:call-template>
487
488 <xsl:call-template name="startFile">
489 <xsl:with-param name="file" select="'Helper.java'" />
490 </xsl:call-template>
491
492<xsl:text><![CDATA[
493
494import java.util.List;
495import java.util.ArrayList;
496import java.util.Collections;
497import java.lang.reflect.Constructor;
498import java.lang.reflect.InvocationTargetException;
499
500class Helper {
501 public static <T> List<T> wrap(Class<T> wrapperClass, VboxPortType pt, List<String> thisPtrs) {
502 try {
503 if(thisPtrs==null) return Collections.emptyList();
504
505 Constructor<T> c = wrapperClass.getConstructor(String.class, VboxPortType.class);
506 List<T> ret = new ArrayList<T>(thisPtrs.size());
507 for (String thisPtr : thisPtrs) {
508 ret.add(c.newInstance(thisPtr,pt));
509 }
510 return ret;
511 } catch (NoSuchMethodException e) {
512 throw new AssertionError(e);
513 } catch (InstantiationException e) {
514 throw new AssertionError(e);
515 } catch (IllegalAccessException e) {
516 throw new AssertionError(e);
517 } catch (InvocationTargetException e) {
518 throw new AssertionError(e);
519 }
520 }
521
522 public static <T1, T2> List<T1> wrap2(Class<T1> wrapperClass1, Class<T2> wrapperClass2, VboxPortType pt, List<T2> thisPtrs) {
523 try {
524 if(thisPtrs==null) return Collections.emptyList();
525
526 Constructor<T1> c = wrapperClass1.getConstructor(wrapperClass2, VboxPortType.class);
527 List<T1> ret = new ArrayList<T1>(thisPtrs.size());
528 for (T2 thisPtr : thisPtrs) {
529 ret.add(c.newInstance(thisPtr,pt));
530 }
531 return ret;
532 } catch (NoSuchMethodException e) {
533 throw new AssertionError(e);
534 } catch (InstantiationException e) {
535 throw new AssertionError(e);
536 } catch (IllegalAccessException e) {
537 throw new AssertionError(e);
538 } catch (InvocationTargetException e) {
539 throw new AssertionError(e);
540 }
541 }
542
543 public static <T extends IUnknown> List<String> unwrap(List<T> thisPtrs) {
544 if (thisPtrs==null) return Collections.emptyList();
545
546 List<String> ret = new ArrayList<String>();
547 for (T obj : thisPtrs) {
548 ret.add(obj.getRef());
549 }
550 return ret;
551 }
552}
553]]></xsl:text>
554
555 <xsl:call-template name="endFile">
556 <xsl:with-param name="file" select="'Helper.java'" />
557 </xsl:call-template>
558
559 <xsl:call-template name="startFile">
560 <xsl:with-param name="file" select="'IWebsessionManager.java'" />
561 </xsl:call-template>
562
563
564import java.net.URL;
565import java.math.BigInteger;
566import java.util.List;
567import java.util.Map;
568import java.util.HashMap;
569import javax.xml.namespace.QName;
570import javax.xml.ws.BindingProvider;
571import javax.xml.ws.Holder;
572import javax.xml.ws.WebServiceException;
573
574class PortPool
575{
576 private final static String wsdlFile = <xsl:value-of select="$G_virtualBoxWsdl" />;
577
578 <xsl:text><![CDATA[
579 private Map<VboxPortType, Integer> known;
580 private boolean initStarted;
581 private VboxService svc;
582
583 PortPool(boolean usePreinit)
584 {
585 known = new HashMap<VboxPortType, Integer>();
586
587 if (usePreinit)
588 {
589 new Thread(new Runnable()
590 {
591 public void run()
592 {
593 // need to sync on something else but 'this'
594 synchronized (known)
595 {
596 initStarted = true;
597 known.notify();
598 }
599
600 preinit();
601 }
602 }).start();
603
604 synchronized (known)
605 {
606 while (!initStarted)
607 {
608 try {
609 known.wait();
610 } catch (InterruptedException e) {
611 break;
612 }
613 }
614 }
615 }
616 }
617
618 private synchronized void preinit()
619 {
620 VboxPortType port = getPort();
621 releasePort(port);
622 }
623
624 synchronized VboxPortType getPort()
625 {
626 VboxPortType port = null;
627 int ttl = 0;
628
629 for (VboxPortType cur: known.keySet())
630 {
631 int value = known.get(cur);
632 if ((value & 0x10000) == 0)
633 {
634 port = cur;
635 ttl = value & 0xffff;
636 break;
637 }
638 }
639
640 if (port == null)
641 {
642 if (svc == null) {
643 URL wsdl = PortPool.class.getClassLoader().getResource(wsdlFile);
644 if (wsdl == null)
645 throw new LinkageError(wsdlFile+" not found, but it should have been in the jar");
646 svc = new VboxService(wsdl,
647 new QName("http://www.virtualbox.org/Service",
648 "vboxService"));
649 }
650 port = svc.getVboxServicePort();
651 // reuse this object 0x10 times
652 ttl = 0x10;
653 }
654 // mark as used
655 known.put(port, new Integer(0x10000 | ttl));
656 return port;
657 }
658
659 synchronized void releasePort(VboxPortType port)
660 {
661 Integer val = known.get(port);
662 if (val == null || val == 0)
663 {
664 // know you not
665 return;
666 }
667
668 int v = val;
669 int ttl = v & 0xffff;
670 // decrement TTL, and throw away port if used too much times
671 if (--ttl <= 0)
672 {
673 known.remove(port);
674 }
675 else
676 {
677 v = ttl; // set new TTL and clear busy bit
678 known.put(port, v);
679 }
680 }
681}
682
683public class IWebsessionManager {
684
685 private static PortPool pool = new PortPool(true);
686 protected VboxPortType port;
687
688 public IWebsessionManager(URL url)
689 {
690 connect(url);
691 }
692
693 public IWebsessionManager(String url)
694 {
695 connect(url);
696 }
697
698 public IWebsessionManager(URL url, Map<String, Object> requestContext, Map<String, Object> responseContext)
699 {
700 connect(url.toExternalForm(), requestContext, responseContext);
701 }
702
703 public IWebsessionManager(String url, Map<String, Object> requestContext, Map<String, Object> responseContext)
704 {
705 connect(url, requestContext, responseContext);
706 }
707
708 public void connect(URL url)
709 {
710 connect(url.toExternalForm());
711 }
712
713 public void connect(String url)
714 {
715 this.port = pool.getPort();
716
717 try {
718 ((BindingProvider)port).getRequestContext().
719 put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url);
720 } catch (Throwable t) {
721 if (this.port != null)
722 pool.releasePort(this.port);
723 // we have to throw smth derived from RuntimeException
724 throw new WebServiceException(t);
725 }
726 }
727
728 public void connect(String url, Map<String, Object> requestContext, Map<String, Object> responseContext)
729 {
730 this.port = pool.getPort();
731
732 try {
733 ((BindingProvider)port).getRequestContext();
734 if (requestContext != null)
735 ((BindingProvider)port).getRequestContext().putAll(requestContext);
736
737 if (responseContext != null)
738 ((BindingProvider)port).getResponseContext().putAll(responseContext);
739
740 ((BindingProvider)port).getRequestContext().
741 put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url);
742 } catch (Throwable t) {
743 if (this.port != null)
744 pool.releasePort(port);
745 // we have to throw smth derived from RuntimeException
746 throw new WebServiceException(t);
747 }
748 }
749
750
751 public void disconnect(IVirtualBox refIVirtualBox)
752 {
753 try {
754 logoff(refIVirtualBox);
755 } finally {
756 if (this.port != null) {
757 pool.releasePort(this.port);
758 this.port = null;
759 }
760 }
761 }
762
763 public void cleanupUnused()
764 {
765 System.gc();
766 Runtime.getRuntime().runFinalization();
767 }
768
769 /* method IWebsessionManager::logon(
770 [in] wstring username,
771 [in] wstring password,
772 [return] IVirtualBox return)
773 */
774 public IVirtualBox logon(String username, String password) {
775 try {
776 String retVal = port.iWebsessionManagerLogon(username, password);
777 return new IVirtualBox(retVal, port);
778 } catch (InvalidObjectFaultMsg e) {
779 throw new WebServiceException(e);
780 } catch (RuntimeFaultMsg e) {
781 throw new WebServiceException(e);
782 }
783 }
784
785 /* method IWebsessionManager::getSessionObject(
786 [in] IVirtualBox refIVirtualBox,
787 [return] ISession return)
788 */
789 public ISession getSessionObject(IVirtualBox refIVirtualBox) {
790 try {
791 String retVal = port.iWebsessionManagerGetSessionObject(((refIVirtualBox == null)?null:refIVirtualBox.getRef()));
792 return new ISession(retVal, port);
793 } catch (InvalidObjectFaultMsg e) {
794 throw new WebServiceException(e);
795 } catch (RuntimeFaultMsg e) {
796 throw new WebServiceException(e);
797 }
798 }
799
800 /* method IWebsessionManager::logoff(
801 [in] IVirtualBox refIVirtualBox)
802 */
803 public void logoff(IVirtualBox refIVirtualBox) {
804 try {
805 port.iWebsessionManagerLogoff(((refIVirtualBox == null)?null:refIVirtualBox.getRef()));
806 } catch (InvalidObjectFaultMsg e) {
807 throw new WebServiceException(e);
808 } catch (RuntimeFaultMsg e) {
809 throw new WebServiceException(e);
810 }
811 }
812}
813]]></xsl:text>
814 <xsl:call-template name="endFile">
815 <xsl:with-param name="file" select="'IWebsessionManager.java'" />
816 </xsl:call-template>
817
818 <xsl:text>// ######## COLLECTIONS&#10;&#10;</xsl:text>
819
820 <xsl:for-each select="//collection">
821 <xsl:variable name="type" select="@type" />
822 <xsl:variable name="arrayoftype" select="concat('ArrayOf', @type)" />
823 <xsl:variable name="filename" select="$arrayoftype" />
824
825 <xsl:value-of select="concat('&#10;// ##### BEGINFILE &quot;', $filename, '.java&quot;&#10;&#10;')" />
826
827 <xsl:call-template name="startFile">
828 <xsl:with-param name="file" select="concat($filename, '.java')" />
829 </xsl:call-template>
830
831 <xsl:text>import java.util.ArrayList;&#10;</xsl:text>
832 <xsl:text>import java.util.List;&#10;</xsl:text>
833 <xsl:text>import javax.xml.bind.annotation.XmlAccessType;&#10;</xsl:text>
834 <xsl:text>import javax.xml.bind.annotation.XmlAccessorType;&#10;</xsl:text>
835 <xsl:text>import javax.xml.bind.annotation.XmlType;&#10;&#10;</xsl:text>
836
837 <xsl:text>@XmlAccessorType(XmlAccessType.FIELD)&#10;</xsl:text>
838 <xsl:value-of select="concat('@XmlType(name = &quot;', $arrayoftype, '&quot;, propOrder = {&#10;')" />
839 <xsl:text> "array"&#10;</xsl:text>
840 <xsl:text>})&#10;&#10;</xsl:text>
841 <xsl:value-of select="concat('public class ', $arrayoftype, ' {&#10;&#10;')" />
842
843 <xsl:text> protected List&lt;String&gt; array;&#10;&#10;</xsl:text>
844
845 <xsl:text> public List&lt;String&gt; getArray() {&#10;</xsl:text>
846 <xsl:text> if (array == null) {&#10;</xsl:text>
847 <xsl:text> array = new ArrayList&lt;String&gt;();&#10;</xsl:text>
848 <xsl:text> }&#10;</xsl:text>
849 <xsl:text> return this.array;&#10;</xsl:text>
850 <xsl:text> }&#10;&#10;</xsl:text>
851 <xsl:text>}&#10;</xsl:text>
852 <xsl:call-template name="endFile">
853 <xsl:with-param name="file" select="concat($filename, '.java')" />
854 </xsl:call-template>
855
856 </xsl:for-each>
857
858 <xsl:text>// ######## ENUMS&#10;&#10;</xsl:text>
859
860 <xsl:for-each select="//enum">
861 <xsl:variable name="enumname" select="@name" />
862 <xsl:variable name="filename" select="$enumname" />
863
864 <xsl:call-template name="startFile">
865 <xsl:with-param name="file" select="concat($filename, '.java')" />
866 </xsl:call-template>
867
868 <xsl:text>import javax.xml.bind.annotation.XmlEnum;&#10;</xsl:text>
869 <xsl:text>import javax.xml.bind.annotation.XmlEnumValue;&#10;</xsl:text>
870 <xsl:text>import javax.xml.bind.annotation.XmlType;&#10;&#10;</xsl:text>
871
872 <xsl:value-of select="concat('@XmlType(name = &quot;', $enumname, '&quot;)&#10;')" />
873 <xsl:text>@XmlEnum&#10;</xsl:text>
874 <xsl:value-of select="concat('public enum ', $enumname, ' {&#10;&#10;')" />
875 <xsl:for-each select="const">
876 <xsl:variable name="enumconst" select="@name" />
877 <xsl:value-of select="concat(' @XmlEnumValue(&quot;', $enumconst, '&quot;)&#10;')" />
878 <xsl:value-of select="concat(' ', $enumconst, '(&quot;', $enumconst, '&quot;)')" />
879 <xsl:choose>
880 <xsl:when test="not(position()=last())">
881 <xsl:text>,&#10;</xsl:text>
882 </xsl:when>
883 <xsl:otherwise>
884 <xsl:text>;&#10;</xsl:text>
885 </xsl:otherwise>
886 </xsl:choose>
887 </xsl:for-each>
888
889 <xsl:text>&#10;</xsl:text>
890 <xsl:text> private final String value;&#10;&#10;</xsl:text>
891
892 <xsl:value-of select="concat(' ', $enumname, '(String v) {&#10;')" />
893 <xsl:text> value = v;&#10;</xsl:text>
894 <xsl:text> }&#10;&#10;</xsl:text>
895
896 <xsl:text> public String value() {&#10;</xsl:text>
897 <xsl:text> return value;&#10;</xsl:text>
898 <xsl:text> }&#10;&#10;</xsl:text>
899
900 <xsl:value-of select="concat(' public static ', $enumname, ' fromValue(String v) {&#10;')" />
901 <xsl:value-of select="concat(' for (', $enumname, ' c: ', $enumname, '. values()) {&#10;')" />
902 <xsl:text> if (c.value.equals(v)) {&#10;</xsl:text>
903 <xsl:text> return c;&#10;</xsl:text>
904 <xsl:text> }&#10;</xsl:text>
905 <xsl:text> }&#10;</xsl:text>
906 <xsl:text> throw new IllegalArgumentException(v);&#10;</xsl:text>
907 <xsl:text> }&#10;&#10;</xsl:text>
908
909 <xsl:text>}&#10;&#10;</xsl:text>
910
911 <xsl:call-template name="endFile">
912 <xsl:with-param name="file" select="concat($filename, '.java')" />
913 </xsl:call-template>
914
915 </xsl:for-each>
916
917 <xsl:text>// ######## INTERFACES &#10;&#10;</xsl:text>
918
919 <xsl:for-each select="//interface">
920 <xsl:variable name="ifname" select="@name" />
921 <xsl:variable name="filename" select="$ifname" />
922 <xsl:variable name="wsmap" select="@wsmap" />
923 <xsl:variable name="wscpp" select="@wscpp" />
924
925 <xsl:if test="not($wsmap='suppress') and not ($wsmap='global')">
926 <xsl:call-template name="startFile">
927 <xsl:with-param name="file" select="concat($filename, '.java')" />
928 </xsl:call-template>
929
930 <xsl:text>import java.math.BigInteger;&#10;</xsl:text>
931 <xsl:text>import java.util.List;&#10;</xsl:text>
932 <xsl:text>import javax.xml.ws.Holder;&#10;</xsl:text>
933 <xsl:text>import javax.xml.ws.WebServiceException;&#10;</xsl:text>
934
935 <xsl:choose>
936 <xsl:when test="$wsmap='struct'">
937 <xsl:value-of select="concat('public class ', $ifname, ' {&#10;&#10;')" />
938 <xsl:call-template name="genStructWrapper">
939 <xsl:with-param name="name" select="$ifname" />
940 </xsl:call-template>
941 </xsl:when>
942
943 <xsl:otherwise>
944 <xsl:variable name="extends" select="//interface[@name=$ifname]/@extends" />
945 <xsl:choose>
946 <xsl:when test="($extends = '$unknown') or ($extends = '$dispatched') or ($extends = '$errorinfo')">
947 <xsl:value-of select="concat('public class ', $ifname, ' extends IUnknown {&#10;&#10;')" />
948 </xsl:when>
949 <xsl:when test="//interface[@name=$extends]">
950 <xsl:value-of select="concat('public class ', $ifname, ' extends ', $extends, ' {&#10;&#10;')" />
951 </xsl:when>
952 <xsl:otherwise>
953 <xsl:call-template name="fatalError">
954 <xsl:with-param name="msg" select="concat('Interface generation: interface &quot;', $ifname, '&quot; has invalid &quot;extends&quot; value ', $extends, '.')" />
955 </xsl:call-template>
956 </xsl:otherwise>
957 </xsl:choose>
958
959 <!-- interface (class) constructor -->
960 <xsl:value-of select="concat(' public static ', $ifname, ' cast(IUnknown other) {&#10;')" />
961 <xsl:value-of select="concat(' return new ', $ifname,
962 '(other.getRef(), other.getRemoteWSPort());&#10; }&#10;&#10;')"/>
963 <xsl:value-of select="concat(' public ', $ifname, '(String _this, VboxPortType port) {&#10;')" />
964 <xsl:text> super(_this,port);&#10;</xsl:text>
965 <xsl:text> }&#10;</xsl:text>
966
967 <!-- attributes -->
968 <xsl:for-each select="attribute">
969 <xsl:variable name="attrname"><xsl:value-of select="@name" /></xsl:variable>
970 <xsl:variable name="attrtype"><xsl:value-of select="@type" /></xsl:variable>
971 <xsl:variable name="attrreadonly"><xsl:value-of select="@readonly" /></xsl:variable>
972 <xsl:variable name="attrsafearray"><xsl:value-of select="@safearray" /></xsl:variable>
973
974 <xsl:choose>
975 <xsl:when test="( $attrtype=($G_setSuppressedInterfaces/@name) )">
976 <xsl:value-of select="concat('&#10; // Skipping attribute ', $attrtype, ' for it is of suppressed type ', $attrtype, '&#10;')" />
977 </xsl:when>
978 <xsl:otherwise>
979 <xsl:choose>
980 <xsl:when test="@readonly='yes'">
981 <xsl:value-of select="concat('&#10; // read-only attribute ', $ifname, '::', $attrname, ' of type ', $attrtype, '&#10;')" />
982 </xsl:when>
983 <xsl:otherwise>
984 <xsl:value-of select="concat('&#10; // read/write attribute ', $ifname, '::', $attrname, ' of type ', $attrtype, '&#10;')" />
985 </xsl:otherwise>
986 </xsl:choose>
987 <!-- emit getter method -->
988 <xsl:variable name="gettername"><xsl:call-template name="makeGetterName"><xsl:with-param name="attrname" select="$attrname" /></xsl:call-template></xsl:variable>
989 <xsl:variable name="jaxwsGetter"><xsl:call-template name="makeJaxwsMethod"><xsl:with-param name="ifname" select="$ifname" /><xsl:with-param name="methodname" select="$gettername" /></xsl:call-template></xsl:variable>
990 <xsl:variable name="gluegettertype">
991 <xsl:call-template name="typeIdl2Glue">
992 <xsl:with-param name="ifname" select="$ifname" />
993 <xsl:with-param name="method" select="$gettername" />
994 <xsl:with-param name="name" select="$attrname" />
995 <xsl:with-param name="type" select="$attrtype" />
996 <xsl:with-param name="safearray" select="@safearray" />
997 </xsl:call-template>
998 </xsl:variable>
999 <xsl:variable name="javagettertype">
1000 <xsl:call-template name="typeIdl2Java">
1001 <xsl:with-param name="ifname" select="$ifname" />
1002 <xsl:with-param name="method" select="$gettername" />
1003 <xsl:with-param name="name" select="$attrname" />
1004 <xsl:with-param name="type" select="$attrtype" />
1005 <xsl:with-param name="safearray" select="@safearray" />
1006 </xsl:call-template>
1007 </xsl:variable>
1008 <xsl:value-of select="concat(' public ', $gluegettertype, ' ', $gettername, '() {&#10;')" />
1009 <xsl:text> try {&#10;</xsl:text>
1010 <xsl:value-of select="concat(' ', $javagettertype, ' retVal = port.', $jaxwsGetter, '(_this);&#10;')" />
1011 <xsl:variable name="wrapped">
1012 <xsl:call-template name="cookOutParam">
1013 <xsl:with-param name="ifname" select="$ifname" />
1014 <xsl:with-param name="method" select="$gettername" />
1015 <xsl:with-param name="value" select="'retVal'" />
1016 <xsl:with-param name="idltype" select="$attrtype" />
1017 <xsl:with-param name="safearray" select="@safearray" />
1018 </xsl:call-template>
1019 </xsl:variable>
1020 <xsl:value-of select="concat(' return ', $wrapped, ';&#10;')" />
1021 <xsl:text> } catch (InvalidObjectFaultMsg e) {&#10;</xsl:text>
1022 <xsl:text> throw new WebServiceException(e);&#10;</xsl:text>
1023 <xsl:text> } catch (RuntimeFaultMsg e) {&#10;</xsl:text>
1024 <xsl:text> throw new WebServiceException(e);&#10;</xsl:text>
1025 <xsl:text> }&#10;</xsl:text>
1026 <xsl:text> }&#10;</xsl:text>
1027 <xsl:if test="not(@readonly='yes')">
1028 <!-- emit setter -->
1029 <xsl:variable name="settername"><xsl:call-template name="makeSetterName"><xsl:with-param name="attrname" select="$attrname" /></xsl:call-template></xsl:variable>
1030 <xsl:variable name="jaxwsSetter"><xsl:call-template name="makeJaxwsMethod"><xsl:with-param name="ifname" select="$ifname" /><xsl:with-param name="methodname" select="$settername" /></xsl:call-template></xsl:variable>
1031 <xsl:variable name="javasettertype">
1032 <xsl:call-template name="typeIdl2Java">
1033 <xsl:with-param name="ifname" select="$ifname" />
1034 <xsl:with-param name="method" select="$settername" />
1035 <xsl:with-param name="name" select="$attrname" />
1036 <xsl:with-param name="type" select="$attrtype" />
1037 </xsl:call-template>
1038 </xsl:variable>
1039 <xsl:value-of select="concat(' public void ', $settername, '(', $javasettertype, ' value) {&#10;')" />
1040 <xsl:text> try {&#10;</xsl:text>
1041 <xsl:value-of select="concat(' port.', $jaxwsSetter, '(_this, value);&#10;')" />
1042 <xsl:text> } catch (InvalidObjectFaultMsg e) {&#10;</xsl:text>
1043 <xsl:text> throw new WebServiceException(e);&#10;</xsl:text>
1044 <xsl:text> } catch (RuntimeFaultMsg e) {&#10;</xsl:text>
1045 <xsl:text> throw new WebServiceException(e);&#10;</xsl:text>
1046 <xsl:text> }&#10;</xsl:text>
1047 <xsl:text> }&#10;</xsl:text>
1048 </xsl:if>
1049 </xsl:otherwise>
1050 </xsl:choose>
1051 </xsl:for-each> <!-- attribute -->
1052
1053 <!-- emit real methods -->
1054 <xsl:for-each select="method">
1055 <xsl:variable name="methodname"><xsl:value-of select="@name" /></xsl:variable>
1056 <xsl:variable name="portArg">
1057 <xsl:if test="not($wsmap='global')">
1058 <xsl:value-of select="'_this'"/>
1059 </xsl:if>
1060 </xsl:variable>
1061
1062 <!-- method header: return value "int", method name, soap arguments -->
1063 <!-- skip this method if it has parameters of a type that has wsmap="suppress" -->
1064 <xsl:choose>
1065 <xsl:when test=" (param[@type=($G_setSuppressedInterfaces/@name)])
1066 or (param[@mod='ptr'])" >
1067 <xsl:comment><xsl:value-of select="concat('Skipping method ', $methodname, ' for it has parameters with suppressed types')" /></xsl:comment>
1068 </xsl:when>
1069 <xsl:otherwise>
1070 <xsl:variable name="fHasReturnParms" select="param[@dir='return']" />
1071 <xsl:variable name="fHasOutParms" select="param[@dir='out']" />
1072
1073 <xsl:value-of select="concat('&#10; /* method ', $ifname, '::', $methodname, '(')" />
1074 <xsl:for-each select="param">
1075 <xsl:value-of select="concat('&#10; [', @dir, '] ', @type, ' ', @name)" />
1076 <xsl:if test="@safearray='yes'">
1077 <xsl:text>[]</xsl:text>
1078 </xsl:if>
1079 <xsl:if test="not(position()=last())">
1080 <xsl:text>,</xsl:text>
1081 </xsl:if>
1082 </xsl:for-each>
1083 <xsl:text>)&#10; */&#10;</xsl:text>
1084 <!-- method implementation -->
1085 <xsl:variable name="returnidltype" select="param[@dir='return']/@type" />
1086 <xsl:variable name="returnidlsafearray" select="param[@dir='return']/@safearray" />
1087 <xsl:variable name="returngluetype">
1088 <xsl:choose>
1089 <xsl:when test="$returnidltype">
1090 <xsl:call-template name="typeIdl2Glue">
1091 <xsl:with-param name="ifname" select="$ifname" />
1092 <xsl:with-param name="method" select="$methodname" />
1093 <xsl:with-param name="name" select="@name" />
1094 <xsl:with-param name="type" select="$returnidltype" />
1095 <xsl:with-param name="safearray" select="param[@dir='return']/@safearray" />
1096 </xsl:call-template>
1097 </xsl:when>
1098 <xsl:otherwise>
1099 <xsl:text>void</xsl:text>
1100 </xsl:otherwise>
1101 </xsl:choose>
1102 </xsl:variable>
1103 <xsl:value-of select="concat(' public ', $returngluetype, ' ', $methodname, '(')" />
1104 <!-- make a set of all parameters with in and out direction -->
1105 <xsl:variable name="paramsinout" select="param[@dir='in' or @dir='out']" />
1106 <xsl:for-each select="exsl:node-set($paramsinout)">
1107 <xsl:variable name="paramgluetype">
1108 <xsl:call-template name="typeIdl2Glue">
1109 <xsl:with-param name="ifname" select="$ifname" />
1110 <xsl:with-param name="method" select="$methodname" />
1111 <xsl:with-param name="name" select="@name" />
1112 <xsl:with-param name="type" select="@type" />
1113 <xsl:with-param name="safearray" select="@safearray" />
1114 </xsl:call-template>
1115 </xsl:variable>
1116 <xsl:choose>
1117 <xsl:when test="@dir='out'">
1118 <xsl:value-of select="concat('Holder&lt;', $paramgluetype, '&gt; ', @name)" />
1119 </xsl:when>
1120 <xsl:otherwise>
1121 <xsl:value-of select="concat($paramgluetype, ' ', @name)" />
1122 </xsl:otherwise>
1123 </xsl:choose>
1124 <xsl:if test="not(position()=last())">
1125 <xsl:text>, </xsl:text>
1126 </xsl:if>
1127 </xsl:for-each>
1128 <xsl:text>) {&#10;</xsl:text>
1129 <xsl:text> try {&#10;</xsl:text>
1130 <xsl:if test="param[@dir='out']">
1131 <xsl:for-each select="param[@dir='out']">
1132 <xsl:variable name="paramtype" select="@type" />
1133 <xsl:if test="//interface[@name=$paramtype] or $paramtype='$unknown'">
1134 <xsl:choose>
1135 <xsl:when test="@safearray='yes'">
1136 <xsl:value-of select="concat(' Holder&lt;List&lt;String&gt;&gt; tmp', @name, ' = new Holder&lt;List&lt;String&gt;&gt;(); &#10;')" />
1137 </xsl:when>
1138 <xsl:otherwise>
1139 <xsl:value-of select="concat(' Holder&lt;String&gt; tmp', @name, ' = new Holder&lt;String&gt;(); &#10;')" />
1140 </xsl:otherwise>
1141 </xsl:choose>
1142 </xsl:if>
1143 </xsl:for-each>
1144 </xsl:if>
1145
1146 <xsl:text> </xsl:text>
1147
1148 <!-- make the function call: first have a stack variable for the return value, if any -->
1149 <!-- XSLT doesn't allow variable override in inner blocks -->
1150 <xsl:variable name="retValValue">
1151 <xsl:choose>
1152 <xsl:when test="param[@dir='out']">
1153 <xsl:value-of select="'retVal.value'"/>
1154 </xsl:when>
1155 <xsl:otherwise>
1156 <xsl:value-of select="'retVal'"/>
1157 </xsl:otherwise>
1158 </xsl:choose>
1159 </xsl:variable>
1160
1161 <xsl:if test="$returnidltype">
1162 <xsl:variable name="javarettype">
1163 <xsl:call-template name="typeIdl2Java">
1164 <xsl:with-param name="ifname" select="$ifname" />
1165 <xsl:with-param name="method" select="$methodname" />
1166 <xsl:with-param name="name" select="@name" />
1167 <xsl:with-param name="type" select="$returnidltype" />
1168 <xsl:with-param name="safearray" select="$returnidlsafearray" />
1169 </xsl:call-template>
1170 </xsl:variable>
1171 <xsl:choose>
1172 <xsl:when test="param[@dir='out']">
1173 <!-- create a new object for return value -->
1174 <xsl:value-of select="
1175 concat('Holder&lt;', $javarettype, '&gt;',
1176 ' ', 'retVal = new Holder&lt;', $javarettype,
1177 '&gt;();&#xa; ')"/>
1178 </xsl:when>
1179 <xsl:otherwise>
1180 <xsl:value-of select="$javarettype"/>
1181 <xsl:text> retVal = </xsl:text>
1182 </xsl:otherwise>
1183 </xsl:choose>
1184 </xsl:if>
1185 <!-- function name and arguments -->
1186 <xsl:variable name="jaxwsmethod"><xsl:call-template name="makeJaxwsMethod"><xsl:with-param name="ifname" select="$ifname" /><xsl:with-param name="methodname" select="$methodname" /></xsl:call-template></xsl:variable>
1187 <xsl:value-of select="concat('port.', $jaxwsmethod, '(', $portArg)" />
1188 <xsl:if test="$paramsinout and not($portArg='')">
1189 <xsl:text>, </xsl:text>
1190 </xsl:if>
1191 <!-- jax-ws has an oddity: if both out params and a return value exist, then the return value is moved to the function's argument list... -->
1192 <xsl:choose>
1193 <xsl:when test="param[@dir='out'] and param[@dir='return']">
1194 <xsl:for-each select="param">
1195 <xsl:choose>
1196 <xsl:when test="@dir='return'">
1197 <xsl:text>retVal</xsl:text>
1198 </xsl:when>
1199 <xsl:otherwise>
1200 <xsl:call-template name="emitArgInMethodImpl">
1201 <xsl:with-param name="paramname" select="@name" />
1202 <xsl:with-param name="paramtype" select="@type" />
1203 </xsl:call-template>
1204 </xsl:otherwise>
1205 </xsl:choose>
1206 </xsl:for-each>
1207 </xsl:when>
1208 <xsl:otherwise>
1209 <xsl:for-each select="$paramsinout">
1210 <xsl:call-template name="emitArgInMethodImpl">
1211 <xsl:with-param name="paramname" select="@name" />
1212 <xsl:with-param name="paramtype" select="@type" />
1213 </xsl:call-template>
1214 </xsl:for-each>
1215 </xsl:otherwise>
1216 </xsl:choose>
1217 <xsl:text>);&#10;</xsl:text>
1218 <!-- now copy temp out parameters to their actual destination -->
1219 <xsl:for-each select="param[@dir='out']">
1220 <xsl:variable name="paramtype" select="@type" />
1221 <xsl:if test="//interface[@name=$paramtype] or $paramtype='$unknown'">
1222 <xsl:variable name="paramname" select="@name" />
1223 <xsl:variable name="wrapped">
1224 <xsl:call-template name="cookOutParam">
1225 <xsl:with-param name="ifname" select="$ifname" />
1226 <xsl:with-param name="method" select="$methodname" />
1227 <xsl:with-param name="value" select="concat('tmp',@name,'.value')" />
1228 <xsl:with-param name="idltype" select="@type" />
1229 <xsl:with-param name="safearray" select="@safearray" />
1230 </xsl:call-template>
1231 </xsl:variable>
1232 <xsl:value-of select="concat(' ',$paramname,'.value = ',
1233 $wrapped,';&#10;')"/>
1234 </xsl:if>
1235 </xsl:for-each>
1236 <!-- next line with return + glue type -->
1237 <xsl:if test="$returnidltype">
1238 <xsl:variable name="retval">
1239 <xsl:call-template name="cookOutParam">
1240 <xsl:with-param name="ifname" select="$ifname" />
1241 <xsl:with-param name="method" select="$methodname" />
1242 <xsl:with-param name="value" select="$retValValue" />
1243 <xsl:with-param name="idltype" select="$returnidltype" />
1244 <xsl:with-param name="safearray" select="$returnidlsafearray" />
1245 </xsl:call-template>
1246 </xsl:variable>
1247 <xsl:value-of select="concat(' return ', $retval, ';&#10;')"/>
1248 </xsl:if>
1249 <xsl:text> } catch (InvalidObjectFaultMsg e) {&#10;</xsl:text>
1250 <xsl:text> throw new WebServiceException(e);&#10;</xsl:text>
1251 <xsl:text> } catch (RuntimeFaultMsg e) {&#10;</xsl:text>
1252 <xsl:text> throw new WebServiceException(e);&#10;</xsl:text>
1253 <xsl:text> }&#10;</xsl:text>
1254 <xsl:text> }&#10;</xsl:text>
1255 </xsl:otherwise>
1256 </xsl:choose>
1257 </xsl:for-each>
1258
1259 </xsl:otherwise>
1260 </xsl:choose>
1261 <!-- end of class -->
1262 <xsl:text>}&#10;</xsl:text>
1263 <xsl:value-of select="concat('&#10;// ##### ENDFILE &quot;', $filename, '.java&quot;&#10;&#10;')" />
1264 <xsl:call-template name="endFile">
1265 <xsl:with-param name="file" select="concat($filename, '.java')" />
1266 </xsl:call-template>
1267 </xsl:if>
1268 </xsl:for-each>
1269
1270<!-- <xsl:apply-templates /> -->
1271</xsl:template>
1272
1273<!-- - - - - - - - - - - - - - - - - - - - - - -
1274 if
1275 - - - - - - - - - - - - - - - - - - - - - - -->
1276
1277<!--
1278 * ignore all |if|s except those for WSDL target
1279-->
1280<xsl:template match="if">
1281 <xsl:if test="@target='wsdl'">
1282 <xsl:apply-templates/>
1283 </xsl:if>
1284</xsl:template>
1285
1286<!-- - - - - - - - - - - - - - - - - - - - - - -
1287 cpp
1288 - - - - - - - - - - - - - - - - - - - - - - -->
1289
1290<xsl:template match="cpp">
1291<!-- ignore this -->
1292</xsl:template>
1293
1294<!-- - - - - - - - - - - - - - - - - - - - - - -
1295 library
1296 - - - - - - - - - - - - - - - - - - - - - - -->
1297
1298<xsl:template match="library">
1299 <xsl:apply-templates />
1300</xsl:template>
1301
1302<!-- - - - - - - - - - - - - - - - - - - - - - -
1303 class
1304 - - - - - - - - - - - - - - - - - - - - - - -->
1305
1306<xsl:template match="module/class">
1307<!-- TODO swallow for now -->
1308</xsl:template>
1309
1310<!-- - - - - - - - - - - - - - - - - - - - - - -
1311 enum
1312 - - - - - - - - - - - - - - - - - - - - - - -->
1313
1314<xsl:template match="enum">
1315</xsl:template>
1316
1317<!-- - - - - - - - - - - - - - - - - - - - - - -
1318 const
1319 - - - - - - - - - - - - - - - - - - - - - - -->
1320
1321<!--
1322<xsl:template match="const">
1323 <xsl:apply-templates />
1324</xsl:template>
1325-->
1326
1327<!-- - - - - - - - - - - - - - - - - - - - - - -
1328 desc
1329 - - - - - - - - - - - - - - - - - - - - - - -->
1330
1331<xsl:template match="desc">
1332<!-- TODO swallow for now -->
1333</xsl:template>
1334
1335<!-- - - - - - - - - - - - - - - - - - - - - - -
1336 note
1337 - - - - - - - - - - - - - - - - - - - - - - -->
1338
1339<xsl:template match="note">
1340<!-- TODO -->
1341 <xsl:apply-templates />
1342</xsl:template>
1343
1344<!-- - - - - - - - - - - - - - - - - - - - - - -
1345 interface
1346 - - - - - - - - - - - - - - - - - - - - - - -->
1347
1348<xsl:template match="interface">
1349
1350</xsl:template>
1351
1352
1353</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