Consuming Web Service In Oracle DB (UTL_DBWS)
本篇文章以UTL_DBWS Package來實現,請先滿足先決條件。下方將以實際案例說明如何透過PL/SQL實做呼叫Web Service。
DECLARE
--UTL_DBWS Object
L_SERVICE_QNAME UTL_DBWS.QNAME;
L_PORT_QNAME UTL_DBWS.QNAME;
L_OPERATION_QNAME UTL_DBWS.QNAME;
L_SERVICE UTL_DBWS.SERVICE;
L_CALL UTL_DBWS.CALL;
--XMLTYPE
L_XMLTYPE_IN SYS.XMLTYPE;
L_XMLTYPE_OUT SYS.XMLTYPE;
--LOCAL VARIABLE
X_CONTENT CLOB;
V_SERVICE_QNAME VARCHAR2(4000) := NULL; --Web Service Name
V_PORT_QNAME VARCHAR2(4000) := NULL; --Web Service Queue Name
V_OPERATION_QNAME VARCHAR2(4000) := NULL; --Web Service Operation Name
V_WSDL_URL VARCHAR2(4000) := NULL; --WSDL URL
V_NAMESPACE VARCHAR2(4000) := NULL; --NAMESPACE
V_RESULT VARCHAR2(4000) := NULL; --Web Service Response Result in string
V_EXCEPTION EXCEPTION;
BEGIN
--SETUP LOCAL VARIABLE
V_NAMESPACE := 'http://www.xxxx.com';
V_WSDL_URL := 'http://xxxxxx.xxxx.com/XXXXX/UM_COMMON_W3_ERP_UTIL.asmx?WSDL'; --WSDL URL
V_SERVICE_QNAME := 'UM_COMMON_W3_ERP_UTIL'; --Web Service Name
V_PORT_QNAME := 'UM_COMMON_W3_ERP_UTILSoap12'; --Web Service Queue Name
V_OPERATION_QNAME := 'getVersionID'; --Web Service Operation Name
X_CONTENT := 'XXXXXXXX'; --Web Service Parameter
L_XMLTYPE_IN := SYS.XMLTYPE('<?xml version="1.0" encoding="utf-8"?>
<getVersionID xmlns="http://www.xxxx.com"><s>' ||
X_CONTENT || '</s></getVersionID>');
L_SERVICE_QNAME := UTL_DBWS.TO_QNAME(V_NAMESPACE, V_SERVICE_QNAME);
L_PORT_QNAME := UTL_DBWS.TO_QNAME(V_NAMESPACE, V_PORT_QNAME);
L_OPERATION_QNAME := UTL_DBWS.TO_QNAME(V_NAMESPACE, V_OPERATION_QNAME);
--CREATE_SERVICE
L_SERVICE := UTL_DBWS.CREATE_SERVICE(WSDL_DOCUMENT_LOCATION => URIFACTORY.GETURI(V_WSDL_URL),
SERVICE_NAME => L_SERVICE_QNAME);
--CREATE_CALL
L_CALL := UTL_DBWS.CREATE_CALL(SERVICE_HANDLE => L_SERVICE,
PORT_NAME => L_PORT_QNAME,
OPERATION_NAME => L_OPERATION_QNAME);
--INVOKE
L_XMLTYPE_OUT := UTL_DBWS.INVOKE(CALL_HANDLE => L_CALL,
REQUEST => L_XMLTYPE_IN);
--RELEASE RESOURCE
UTL_DBWS.RELEASE_CALL(CALL_HANDLE => L_CALL);
UTL_DBWS.RELEASE_SERVICE(SERVICE_HANDLE => L_SERVICE);
--EXTRACT SPECIFIC RESPONSE
BEGIN
V_RESULT := L_XMLTYPE_OUT.EXTRACT('getVersionIDResponse/getVersionIDResult/text()',
'xmlns="http://www.xxxx.com"')
.GETSTRINGVAL();
EXCEPTION
WHEN OTHERS THEN
V_RESULT := NULL;
END;
END;
Ref :
https://oracle-base.com/articles/10g/utl_dbws-10g
https://docs.oracle.com/cd/B19306_01/appdev.102/b14258/u_dbws.htm#CHDJIBEA