websrv-cpp.xsl revision fd168522254205059178a7e247606c9159ed2ae3
af062818b47340eef15700d2f0211576ba3506eevboxsync XSLT stylesheet that generates methodmaps.cpp from
af062818b47340eef15700d2f0211576ba3506eevboxsync VirtualBox.xidl. This generated C++ code contains
af062818b47340eef15700d2f0211576ba3506eevboxsync all the service implementations that one would
af062818b47340eef15700d2f0211576ba3506eevboxsync normally have to implement manually to create a
af062818b47340eef15700d2f0211576ba3506eevboxsync web service; our generated code automatically maps
af062818b47340eef15700d2f0211576ba3506eevboxsync all SOAP calls into COM/XPCOM method calls.
af062818b47340eef15700d2f0211576ba3506eevboxsync See webservice/Makefile.kmk for an overview of all the things
af062818b47340eef15700d2f0211576ba3506eevboxsync generated for the webservice.
af062818b47340eef15700d2f0211576ba3506eevboxsync Copyright (C) 2006-2010 Oracle Corporation
af062818b47340eef15700d2f0211576ba3506eevboxsync This file is part of VirtualBox Open Source Edition (OSE), as
af062818b47340eef15700d2f0211576ba3506eevboxsync available from http://www.virtualbox.org. This file is free software;
af062818b47340eef15700d2f0211576ba3506eevboxsync you can redistribute it and/or modify it under the terms of the GNU
af062818b47340eef15700d2f0211576ba3506eevboxsync General Public License (GPL) as published by the Free Software
af062818b47340eef15700d2f0211576ba3506eevboxsync Foundation, in version 2 as it comes in the "COPYING" file of the
af062818b47340eef15700d2f0211576ba3506eevboxsync VirtualBox OSE distribution. VirtualBox OSE is distributed in the
af062818b47340eef15700d2f0211576ba3506eevboxsync hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
af062818b47340eef15700d2f0211576ba3506eevboxsync version="1.0"
af062818b47340eef15700d2f0211576ba3506eevboxsync<!-- - - - - - - - - - - - - - - - - - - - - - -
af062818b47340eef15700d2f0211576ba3506eevboxsync global XSLT variables
af062818b47340eef15700d2f0211576ba3506eevboxsync - - - - - - - - - - - - - - - - - - - - - - -->
af062818b47340eef15700d2f0211576ba3506eevboxsync<xsl:variable name="G_xsltFilename" select="'websrv-cpp.xsl'" />
af062818b47340eef15700d2f0211576ba3506eevboxsync<!-- collect all interfaces with "wsmap='suppress'" in a global variable for
af062818b47340eef15700d2f0211576ba3506eevboxsync quick lookup -->
af062818b47340eef15700d2f0211576ba3506eevboxsync select="//interface[@wsmap='suppress']" />
af062818b47340eef15700d2f0211576ba3506eevboxsync<!-- - - - - - - - - - - - - - - - - - - - - - -
af062818b47340eef15700d2f0211576ba3506eevboxsync - - - - - - - - - - - - - - - - - - - - - - -->
af062818b47340eef15700d2f0211576ba3506eevboxsync/* DO NOT EDIT! This is a generated file.
af062818b47340eef15700d2f0211576ba3506eevboxsync * Generated from: src/VBox/Main/idl/VirtualBox.xidl (VirtualBox's interface definitions in XML)
af062818b47340eef15700d2f0211576ba3506eevboxsync * Generator: src/VBox/Main/webservice/websrv-cpp.xsl
af062818b47340eef15700d2f0211576ba3506eevboxsync// shared webservice header
af062818b47340eef15700d2f0211576ba3506eevboxsync// vbox headers
af062818b47340eef15700d2f0211576ba3506eevboxsync// gSOAP headers (must come after vbox includes because it checks for conflicting defs)
af062818b47340eef15700d2f0211576ba3506eevboxsync// standard headers
af062818b47340eef15700d2f0211576ba3506eevboxsync#include <map>
af062818b47340eef15700d2f0211576ba3506eevboxsync#include <sstream>
af062818b47340eef15700d2f0211576ba3506eevboxsync// shared strings for debug output
af062818b47340eef15700d2f0211576ba3506eevboxsyncconst char *g_pcszCallingComMethod = " calling COM method %s\n";
af062818b47340eef15700d2f0211576ba3506eevboxsyncconst char *g_pcszDoneCallingComMethod = " done calling COM method\n";
af062818b47340eef15700d2f0211576ba3506eevboxsyncconst char *g_pcszConvertComOutputBack = " convert COM output \"%s\" back to caller format\n";
af062818b47340eef15700d2f0211576ba3506eevboxsyncconst char *g_pcszDoneConvertingComOutputBack = " done converting COM output \"%s\" back to caller format\n";
af062818b47340eef15700d2f0211576ba3506eevboxsyncconst char *g_pcszEntering = "-- entering %s\n";
af062818b47340eef15700d2f0211576ba3506eevboxsyncconst char *g_pcszLeaving = "-- leaving %s, rc: 0x%lX (%d)\n";
af062818b47340eef15700d2f0211576ba3506eevboxsync// generated string constants for all interface names
af062818b47340eef15700d2f0211576ba3506eevboxsyncconst char *g_pcszIUnknown = "IUnknown";
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:value-of select="concat('const char *g_pcsz', $ifname, ' = "', $ifname, '";')" />
af062818b47340eef15700d2f0211576ba3506eevboxsync<!-- - - - - - - - - - - - - - - - - - - - - - -
af062818b47340eef15700d2f0211576ba3506eevboxsync - - - - - - - - - - - - - - - - - - - - - - -->
af062818b47340eef15700d2f0211576ba3506eevboxsync * ignore all |if|s except those for WSDL target
af062818b47340eef15700d2f0211576ba3506eevboxsync<!-- - - - - - - - - - - - - - - - - - - - - - -
af062818b47340eef15700d2f0211576ba3506eevboxsync - - - - - - - - - - - - - - - - - - - - - - -->
af062818b47340eef15700d2f0211576ba3506eevboxsync<!-- ignore this -->
af062818b47340eef15700d2f0211576ba3506eevboxsync<!-- - - - - - - - - - - - - - - - - - - - - - -
af062818b47340eef15700d2f0211576ba3506eevboxsync - - - - - - - - - - - - - - - - - - - - - - -->
af062818b47340eef15700d2f0211576ba3506eevboxsync/****************************************************************************
af062818b47340eef15700d2f0211576ba3506eevboxsync * types: enum converter helper functions
af062818b47340eef15700d2f0211576ba3506eevboxsync ****************************************************************************/
af062818b47340eef15700d2f0211576ba3506eevboxsync enum converter functions at top of file
af062818b47340eef15700d2f0211576ba3506eevboxsync <!-- generate enum converter for COM-to-SOAP -->
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:value-of select="concat('vbox__', $enumname, ' ', $G_funcPrefixOutputEnumConverter, $enumname, '(', $enumname, '_T e)')" />
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:value-of select="concat(' vbox__', $enumname, ' v;')" />
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:for-each select="const[not(@wsmap='suppress')]">
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:value-of select="concat(' case ', $enumname, '_', $enumconst, ':')" />
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:value-of select="concat(' v = vbox__', $enumname, '__')" />
af062818b47340eef15700d2f0211576ba3506eevboxsync <!-- escape all "_" in $enumconst -->
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:with-param name="string" select="$enumconst" />
af062818b47340eef15700d2f0211576ba3506eevboxsync <!-- Add a default case so gcc gives us a rest, esp. on darwin. -->
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:text> AssertMsgFailed(("e=%d\n", (int)e));</xsl:text>
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:value-of select="concat(' v = (vbox__', $enumname, ')0x7fffdead;')" />
af062818b47340eef15700d2f0211576ba3506eevboxsync <!-- generate enum converter for SOAP-to-COM -->
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:value-of select="concat($enumname, '_T ', $G_funcPrefixInputEnumConverter, $enumname, '(vbox__', $enumname, ' v)')" />
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:value-of select="concat(' ', $enumname, '_T e;')" />
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:for-each select="const[not(@wsmap='suppress')]">
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:value-of select="concat(' case vbox__', $enumname, '__')" />
af062818b47340eef15700d2f0211576ba3506eevboxsync <!-- escape all "_" in $enumconst -->
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:with-param name="string" select="$enumconst" />
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:value-of select="concat(' e = ', $enumname, '_', $enumconst, ';')" />
af062818b47340eef15700d2f0211576ba3506eevboxsync <!-- Insert a default case so gcc gives us a rest, esp. on darwin. -->
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:text> AssertMsgFailed(("v=%d\n", (int)v));</xsl:text>
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:value-of select="concat(' e = (', $enumname, '_T)0x7fffbeef;')" />
af062818b47340eef15700d2f0211576ba3506eevboxsync/****************************************************************************
af062818b47340eef15700d2f0211576ba3506eevboxsync * types: struct converter helper functions
af062818b47340eef15700d2f0211576ba3506eevboxsync ****************************************************************************/
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:for-each select="//interface[@wsmap='struct']">
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:value-of select="concat('// ', $structname, ' converter: called from method mappers to convert data from')" />
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:value-of select="concat('// COM interface ', $structname, ', which has wsmap="struct", to SOAP structures')" />
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:value-of select="concat('vbox__', $structname, '* ', $G_funcPrefixOutputEnumConverter, $structname, '(')" />
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:value-of select="' const WSDLT_ID &idThis,'" />
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:value-of select="concat(' ComPtr<', $structname, '> &in)')" />
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:value-of select="concat(' vbox__', $structname, ' *resp = NULL;')" />
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:call-template name="emitPrologue"><xsl:with-param name="fSkipHRESULT" select="'1'"/></xsl:call-template>
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:value-of select="concat(' resp = soap_new_vbox__', $structname, '(soap, -1);')" />
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:for-each select="//interface[@name=$structname]/attribute">
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:value-of select="concat(' // -- ', $structname, '.', @name)" />
af062818b47340eef15700d2f0211576ba3506eevboxsync <!-- recurse! -->
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:with-param name="ifname" select="$structname" />
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:with-param name="callerprefix" select="concat('out', '.')" />
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:call-template name="emitEpilogue"><xsl:with-param name="fSkipHRESULT" select="'1'"/></xsl:call-template>
af062818b47340eef15700d2f0211576ba3506eevboxsync<!-- - - - - - - - - - - - - - - - - - - - - - -
af062818b47340eef15700d2f0211576ba3506eevboxsync - - - - - - - - - - - - - - - - - - - - - - -->
af062818b47340eef15700d2f0211576ba3506eevboxsync<!-- TODO swallow for now -->
af062818b47340eef15700d2f0211576ba3506eevboxsync<!-- - - - - - - - - - - - - - - - - - - - - - -
af062818b47340eef15700d2f0211576ba3506eevboxsync - - - - - - - - - - - - - - - - - - - - - - -->
af062818b47340eef15700d2f0211576ba3506eevboxsync<!-- - - - - - - - - - - - - - - - - - - - - - -
af062818b47340eef15700d2f0211576ba3506eevboxsync - - - - - - - - - - - - - - - - - - - - - - -->
af062818b47340eef15700d2f0211576ba3506eevboxsync<xsl:template match="const">
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:apply-templates />
af062818b47340eef15700d2f0211576ba3506eevboxsync</xsl:template>
af062818b47340eef15700d2f0211576ba3506eevboxsync<!-- - - - - - - - - - - - - - - - - - - - - - -
af062818b47340eef15700d2f0211576ba3506eevboxsync - - - - - - - - - - - - - - - - - - - - - - -->
af062818b47340eef15700d2f0211576ba3506eevboxsync<!-- TODO swallow for now -->
af062818b47340eef15700d2f0211576ba3506eevboxsync<!-- - - - - - - - - - - - - - - - - - - - - - -
af062818b47340eef15700d2f0211576ba3506eevboxsync - - - - - - - - - - - - - - - - - - - - - - -->
af062818b47340eef15700d2f0211576ba3506eevboxsync<!-- TODO -->
af062818b47340eef15700d2f0211576ba3506eevboxsync emitBeginOfFunctionHeader:
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:value-of select="concat('int __vbox__', $ifname, '_USCORE', $method, '(')" />
af062818b47340eef15700d2f0211576ba3506eevboxsync emitCppTypeForIDLType:
af062818b47340eef15700d2f0211576ba3506eevboxsync emits the C++ type that corresponds to the given WSDL type in $type.
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:param name="varprefix" /> <!-- only with nested get-attribute calls -->
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:param name="inptr" /> <!-- whether to add INPTR to BSTR (Dmitry template magic) -->
af062818b47340eef15700d2f0211576ba3506eevboxsync <!-- look up C++ glue type from IDL type from table array in websrv-shared.inc.xsl -->
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:variable name="gluetypefield" select="exsl:node-set($G_aSharedTypes)/type[@idlname=$type]/@gluename" />
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:value-of select="'com::SafeArray<IN_BSTR>'" /> <!-- input string arrays must use IN_BSTR (see com/array.h) -->
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:value-of select="'com::SafeArray<BSTR>'" /> <!-- output string arrays use raw BSTR -->
af062818b47340eef15700d2f0211576ba3506eevboxsync <!-- if above lookup in table succeeded, use that type -->
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:with-param name="type" select="$gluetypefield"/>
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:with-param name="safearray" select="$safearray"/>
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:with-param name="type" select="concat($type, '_T ')"/>
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:with-param name="safearray" select="$safearray"/>
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:value-of select="'com::SafeIfaceArray<IUnknown>'" />
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:variable name="thatif" select="//interface[@name=$type]" />
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:variable name="thatifname" select="$thatif/@name" />
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:value-of select="concat('com::SafeIfaceArray<', $thatifname, '>')" />
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:value-of select="concat('ComPtr<', $thatifname, '>')" />
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:variable name="thatif" select="//collection[@name=$type]" />
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:variable name="thatifname" select="$thatif/@name" />
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:value-of select="concat('ComPtr<', $thatifname, '>')" />
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:with-param name="msg" select="concat('emitCppTypeForIDLType: Type "', $type, '" in method "', $method, '" is not supported.')" />
af062818b47340eef15700d2f0211576ba3506eevboxsync emitDocumentStyleArgStructs:
af062818b47340eef15700d2f0211576ba3506eevboxsync with WSDL "document" style only, emits those lengthy structs for
af062818b47340eef15700d2f0211576ba3506eevboxsync the input and output argument in the function header.
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:param name="fOutputs" /> <!-- if 1, emit output struct as well -->
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:value-of select="concat(' _vbox__', $ifname, '_USCORE', $methodname, $G_requestMessageElementSuffix, ' *', $G_requestElementVarName)" />
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:value-of select="concat(' _vbox__', $ifname, '_USCORE', $methodname, $G_responseMessageElementSuffix, ' *', $G_responseElementVarName)" />
af062818b47340eef15700d2f0211576ba3506eevboxsync <!-- <xsl:value-of select="concat(' struct ', $ifname, '__', $methodname, 'Response &', $G_result)" /> -->
af062818b47340eef15700d2f0211576ba3506eevboxsync emitPrologue:
af062818b47340eef15700d2f0211576ba3506eevboxsync emits the closing ")" for the parameter list and the beginning
af062818b47340eef15700d2f0211576ba3506eevboxsync of the function body.
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:text> WEBDEBUG((g_pcszEntering, __FUNCTION__));
af062818b47340eef15700d2f0211576ba3506eevboxsync emitEpilogue
af062818b47340eef15700d2f0211576ba3506eevboxsync <xsl:text> WEBDEBUG((g_pcszLeaving, __FUNCTION__, rc, rc));</xsl:text>
af062818b47340eef15700d2f0211576ba3506eevboxsync if (FAILED(rc))
af062818b47340eef15700d2f0211576ba3506eevboxsync return SOAP_FAULT;
<xsl:param name="structprefix" /> <!-- with WSDL document style: req element prefix, like "vbox__IVirtualBox_USCOREcreateMachineRequestElement->" -->
<xsl:with-param name="msg" select="concat('emitObjForMethod: Unknown interface "', $ifname, '" with wsmap=global in XIDL.')" />
<xsl:value-of select="concat(' const WSDLT_ID &idThis = ', $structprefix, $G_nameObjectRefEncoded, '; ')" />
<xsl:param name="structprefix" /> <!-- with WSDL document style: req element prefix, like "vbox__IVirtualBox_USCOREcreateMachineRequestElement->" -->
<xsl:value-of select="concat(' if ((rc = findComPtrFromId(soap, ', $structprefix, $name, '[i], tmpObject, true)))')" />
<xsl:value-of select="concat(' IUnknown *tmpObject2(tmpObject); tmpObject2->AddRef(); comcall_', $name, '[i] = tmpObject;')" />
<xsl:value-of select="concat(' if ((rc = findComPtrFromId(soap, ', $structprefix, $name, '[i], tmpObject, true)))')" />
<xsl:value-of select="concat(' ', $type, ' *tmpObject2(tmpObject); tmpObject2->AddRef(); comcall_', $name, '[i] = tmpObject;')" />
<xsl:value-of select="concat(' comcall_', $name, '[i] = ', $G_funcPrefixInputEnumConverter, $type, '(', $structprefix, $name, '[i]);')" />
<xsl:with-param name="msg" select="concat('emitInputArgConverter Type "', $type, '" in arg "', $name, '" of method "', $method, '" is not yet supported in safearrays.')" />
<xsl:value-of select="concat(' comcall_', $name, ' = ', $G_funcPrefixInputEnumConverter, $type, '(', $structprefix, $name, ')')" />
<xsl:value-of select="concat('if ((rc = findComPtrFromId(soap, ', $structprefix, $name, ', comcall_', $name,', true)))')" />
<xsl:with-param name="msg" select="concat('emitInputArgConverter: Type "', $type, '" in arg "', $name, '" of method "', $method, '" lacks wsmap attribute in XIDL.')" />
<xsl:value-of select="concat('if ((rc = findComPtrFromId(soap, ', $structprefix, $name, ', comcall_', $name,', true)))')" />
<xsl:with-param name="msg" select="concat('emitInputArgConverter: Type "', $type, '" in arg "', $name, '" of method "', $method, '" has unsupported wsmap attribute value "', $wsmap, '" in XIDL.')" />
<xsl:text> // com output arg for </xsl:text><xsl:value-of select="concat($name, ' (safearray: ', $safearray, ')')" /><xsl:text>
<xsl:call-template name="capitalize"><xsl:with-param name="str" select="$methodname" /></xsl:call-template>
<xsl:value-of select="concat('WEBDEBUG((g_pcszCallingComMethod, "', $comMethodName, '"));')" />
<xsl:value-of select="concat('createOrFindRefFromComPtr(idThis, g_pcszIUnknown, ', $varname, ')')" />
<xsl:value-of select="concat('createOrFindRefFromComPtr(idThis, g_pcsz', $thatifname, ', ', $varname, ')')" />
<!-- <xsl:call-template name="fatalError"><xsl:with-param name="msg" select="concat('emitOutputArgBackConverter2: attempted infinite recursion for type "', $type, '" in arg "', $name, '" of method "', $ifname, '::', $method)" /></xsl:call-template> -->
<xsl:value-of select="concat('/* convert COM interface to struct */ ', $G_funcPrefixOutputEnumConverter, $type, '(soap, idThis, rc, ', $varname, ')')" />
<xsl:with-param name="msg" select="concat('emitOutputArgBackConverter2: Type "', $type, '" in arg "', $name, '" of method "', $ifname, '::', $method, '" has invalid wsmap attribute value "', $wsmap, '" in XIDL.')" />
<xsl:value-of select="concat('ComPtr<', $collectiontype, 'Enumerator> ', $enumerator, ';')" />
<xsl:value-of select="concat('CHECK_ERROR_BREAK( comcall_', $callerprefix, $name, ', Enumerate(', $enumerator, '.asOutParam()) );')" />
<xsl:value-of select="concat(' CHECK_ERROR_BREAK( ', $enumerator, ', HasMore(&comcall_', $callerprefix, $name, '_hasmore) );')" />
<xsl:value-of select="concat(' CHECK_ERROR_BREAK( ', $enumerator, ', GetNext(arrayitem.asOutParam()) );')" />
<xsl:value-of select="concat(' // collection of "', $collectiontype, '", target interface wsmap: "', $targetwsmap, '"')" />
<xsl:value-of select="concat('createOrFindRefFromComPtr(idThis, g_pcsz', $collectiontype, ', arrayitem));')" />
<xsl:value-of select="concat($G_funcPrefixOutputEnumConverter, $collectiontype, '(soap, idThis, rc, arrayitem));')" />
<xsl:with-param name="msg" select="concat('emitOutputArgBackConverter2: Type "', $collectiontype, '" of collection "', $type, '", used in method "', $method, '", has unsupported wsmap "', $targetwsmap, '".')" />
<xsl:with-param name="msg" select="concat('emitOutputArgBackConverter2: Type "', $type, '" in arg "', $name, '" of method "', $method, '" is not supported.')" />
<xsl:param name="callerprefix" /> <!-- only for out params or when called recursively from emitGetAttributeComCall -->
<xsl:value-of select="concat('WEBDEBUG((g_pcszConvertComOutputBack, "', $name, '"));')" />
<xsl:when test="$callerprefix"> <!-- callerprefix set but varprefix not: then this is an out parameter :-) -->
<!-- look up C++ glue type from IDL type from table array in websrv-shared.inc.xsl -->
<xsl:variable name="gluetypefield" select="exsl:node-set($G_aSharedTypes)/type[@idlname=$type]/@gluename" />
<xsl:with-param name="msg" select="concat('emitOutputArgBackConverter (1): Type "', $type, '" in arg "', $name, '" of method "', $method, '" is not yet supported in safearrays.')" />
<xsl:value-of select="concat(' WEBDEBUG((g_pcszDoneConvertingComOutputBack, "', $name, '"));')" />
<xsl:param name="callerprefix" /> <!-- only when called recursively from emitOutputArgBackConverter-->
<xsl:variable name="gettername"><xsl:call-template name="makeGetterName"><xsl:with-param name="attrname" select="$attrname" /></xsl:call-template></xsl:variable>
<xsl:variable name="upperattrname"><xsl:call-template name="capitalize"><xsl:with-param name="str" select="$attrname" /></xsl:call-template></xsl:variable>
<xsl:param name="callerprefix" /> <!-- only when called recursively from emitOutputArgBackConverter-->
<xsl:variable name="settername"><xsl:call-template name="makeSetterName"><xsl:with-param name="attrname" select="$attrname" /></xsl:call-template></xsl:variable>
<xsl:variable name="upperattrname"><xsl:call-template name="capitalize"><xsl:with-param name="str" select="$attrname" /></xsl:call-template></xsl:variable>
<xsl:variable name="gettername"><xsl:call-template name="makeGetterName"><xsl:with-param name="attrname" select="$attrname" /></xsl:call-template></xsl:variable>
array attributes/parameters are not supported yet...
<xsl:call-template name="warning"><xsl:with-param name="msg" select="concat('emitComCall: SKIPPING ATTRIBUTE IMPLEMENTATION for "', $attrname, '" because it has array type. THIS SOAP METHOD WILL NOT DO ANYTHING!')" /></xsl:call-template>
<xsl:variable name="settername"><xsl:call-template name="makeSetterName"><xsl:with-param name="attrname" select="$attrname" /></xsl:call-template></xsl:variable>
array attributes/parameters are not supported yet...
<xsl:call-template name="warning"><xsl:with-param name="msg" select="concat('emitComCall: SKIPPING ATTRIBUTE IMPLEMENTATION for "', $attrname, '" because it has array type. THIS SOAP METHOD WILL NOT DO ANYTHING!')" /></xsl:call-template>
<xsl:value-of select="concat('// Skipping attribute ', $attrtype, ' for it is of suppressed type ', $attrtype)" />
<xsl:value-of select="concat('// read-only attribute ', $ifname, '::', $attrname, ' of type ', $attrtype)" />
<xsl:value-of select="concat('// read/write attribute ', $ifname, '::', $attrname, ' of type ', $attrtype)" />
<xsl:comment><xsl:value-of select="concat('Skipping method ', $methodname, ' for it has parameters with suppressed types')" /></xsl:comment>