Name
WSDL_IMPORT_UDT — Returns a string containing a UDT definition
Synopsis
varchar
WSDL_IMPORT_UDT
(
|
in url varchar , |
in f varchar , | |
in
exec
any
) ; |
Description
This function is used to create a user defined type (UDT) definition automatically based on a WSDL file. The source WSDL is supplied via a URL.
The returned definition can be saved to a file and/or executed automatically to provide instant access to the new UDT.
Note: | |
---|---|
To save the file you must have an appropriate ACL defined. |
Parameters
url
The URI of the target WSDL file to build a UDT definition of.
f
The name of the file if the definition is to be saved. This will produce a file on the file system under the server root directory.
The default value is NULL, which will not create a file.
exec
This flag indicates whether the definition should be immediately executed upon import. This takes the form of 0 or 1. The default value of 0 will not execute the definition.
Return Types
This function returns the text of the UDT definition as a varchar.
Examples
Example 24.451. Simple example of a WSDL driven UDT
Web Service proxy wrapper for Redcoal SMS SOAP interface:
SQL> WSDL_IMPORT_UDT ('http://xml.redcoal.com/soapserver.dll/wsdl/ISoapServer', 'redcoal.sql');
This will create the following file on file system called redcoal.sql
:
-- Automatically generated code -- imported from WSDL URI: "http://xml.redcoal.com/soapserver.dll/wsdl/ISoapServer" -- UDT class drop type "ISOAPServerservice" ; create type "ISOAPServerservice" as ( debug int default 0, url varchar default 'http://xml.redcoal.com/soapserver.dll/soap/ISoapServer', request varchar, response varchar ) -- Binding: "http://tempuri.org/:ISOAPServerbinding" method "SendTextSMS" ( "strInSerialNo" any, "strInSMSKey" any, "strInRecipients" any, "strInMessageText" any, "strInReplyEmail" any, "strInOriginator" any, "iInType" any, "strOutMessageIDs" any, "return" any ) returns any, .... more methods follows ; do not supplied for brevity method "RedWebServiceVersion" ( "return" any ) returns any, method style () returns any ; -- Methods create method "SendTextSMS" ( in "strInSerialNo" any, in "strInSMSKey" any, in "strInRecipients" any, in "strInMessageText" any, in "strInReplyEmail" any, in "strInOriginator" any, in "iInType" any, inout "strOutMessageIDs" any, out "return" any ) for "ISOAPServerservice" { declare action, namespace, enc varchar; declare style int; declare _result, _body, xe any; action := 'urn:SOAPServerImpl-ISOAPServer#SendTextSMS'; namespace := 'urn:SOAPServerImpl-ISOAPServer'; style := 0; if (self.debug) style := style + 2; _result := SOAP_CLIENT ( url=>self.url, operation=>'SendTextSMS', soap_action=>action, target_namespace=>namespace, parameters=>vector ( vector('strInSerialNo', 'http://www.w3.org/2001/XMLSchema:string'), "strInSerialNo" , vector('strInSMSKey', 'http://www.w3.org/2001/XMLSchema:string'), "strInSMSKey" , vector('strInRecipients', 'http://www.w3.org/2001/XMLSchema:string'), "strInRecipients" , vector('strInMessageText', 'http://www.w3.org/2001/XMLSchema:string'), "strInMessageText" , vector('strInReplyEmail', 'http://www.w3.org/2001/XMLSchema:string'), "strInReplyEmail" , vector('strInOriginator', 'http://www.w3.org/2001/XMLSchema:string'), "strInOriginator" , vector('iInType', 'http://www.w3.org/2001/XMLSchema:int'), "iInType" , vector('strOutMessageIDs', 'http://www.w3.org/2001/XMLSchema:string'), "strOutMessageIDs" ), style=>style ); if (self.debug) { _body := _result[0]; self.request := _result[1]; self.response := _result[2]; } else _body := _result; xe := xml_cut (xml_tree_doc (_body)); "strOutMessageIDs" := xml_cut (xpath_eval ('//strOutMessageIDs', xe, 1)); "strOutMessageIDs" := soap_box_xml_entity_validating ("strOutMessageIDs", 'http://www.w3.org/2001/XMLSchema:string', 0); "return" := xml_cut (xpath_eval ('//return', xe, 1)); "return" := soap_box_xml_entity_validating ("return", 'http://www.w3.org/2001/XMLSchema:int', 0); return _result; } ; .... more method definitions follows ; not supplied for brevity create method "RedWebServiceVersion" ( out "return" any ) for "ISOAPServerservice" { declare action, namespace, enc varchar; declare style int; declare _result, _body, xe any; action := 'urn:SOAPServerImpl-ISOAPServer#RedWebServiceVersion'; namespace := 'urn:SOAPServerImpl-ISOAPServer'; style := 0; if (self.debug) style := style + 2; _result := SOAP_CLIENT ( url=>self.url, operation=>'RedWebServiceVersion', soap_action=>action, target_namespace=>namespace, parameters=>vector ( ), style=>style ); if (self.debug) { _body := _result[0]; self.request := _result[1]; self.response := _result[2]; } else _body := _result; xe := xml_cut (xml_tree_doc (_body)); "return" := xml_cut (xpath_eval ('//return', xe, 1)); "return" := soap_box_xml_entity_validating ("return", 'http://www.w3.org/2001/XMLSchema:string', 0); return _result; } ;
This script, executed via the ISQL tool, or automatically if the 'exec' flag is set to 'true', will define the desired UDT in database. Developing a simple application for checking the Redcoal SMS SOAP interface could be done as follows using a stored procedure:
create procedure redcoaltest () { declare svc "ISOAPServerservice"; declare res nvarchar; svc := new "ISOAPServerservice" (); svc."RedWebServiceVersion" (res); result_names (res); result (res); } ;
Which could have the following output:
SQL> redcoaltest(); res NVARCHAR ____________________________________________ 5.0 1 Rows. -- 1974 msec.
See Also
The ??? section.