Top

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] 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.