We can call webservices directly from OAF Page. Or we can call webservices from SQL procedure and invoke that procedure from our OAF Page.
Here we are calling webservices from Oracle procedure and calling that procedure from OAF Page.
SQL Procedure:
-----------------
create or replace PROCEDURE invoke_soaservice_p(
ARG0 IN VARCHAR2 , --
ARG1 IN VARCHAR2 ,--
ARG2 IN VARCHAR2 , --
ARG3 IN VARCHAR2 , --
ARG4 IN VARCHAR2 , --
arg5 IN VARCHAR2 , -- Remarks
result OUT VARCHAR2)
AS
PRAGMA AUTONOMOUS_TRANSACTION;
--//===========================================================================
--Variable declaration
--//===========================================================================
--lv_org_id VARCHAR2(255) := FND_PROFILE.VALUE('ORG_ID');
lv_soap_request VARCHAR2(30000);
lv_soap_respond VARCHAR2(30000);
lv_soap_request_xml XMLTYPE;
http_req UTL_HTTP.REQ;
http_resp UTL_HTTP.RESP;
l_return VARCHAR2(30000);
vErrorCode VARCHAR2(100);
vErrorMessage VARCHAR2(500);
vXml Xmltype;
'http://10.127.9.14:8080/emas2/services/authenticateWS?wsdl';
p_soawsdl VARCHAR2(500) := 'WADL_LINK'; --WSDL Link
pn_datetime VARCHAR2(200);
lv_user_id VARCHAR2(250);
lv_passwd VARCHAR2(250);
l_url VARCHAR2(250):= 'null';
l_id NUMBER;
lv_dms_bse_path VARCHAR2(240);
lv_dms_department VARCHAR2(240);
BEGIN
dbms_output.enable(1000000);
SELECT TO_CHAR(sysdate,'DD-MON-YYYY HH:RR:MM') INTO pn_datetime FROM dual;
/*-------------- Invoke Register webservice to register the user----------------- */
lv_soap_request:= '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ds="http://ds.ws.emas/">
<soapenv:Header/>
<soapenv:Body>
<ds:WEBSERVICE_NAME>
<arg0>'||arg0||'</arg0> //pass parameters to webservice
<arg1>'||arg1||'</arg1>
<arg2>'||arg2||'</arg2>
<arg3>'||arg3||'</arg3>
<arg4>'||arg4||'</arg4>
<arg5>'||arg5||'</arg5>
<arg6>true</arg6>
</ds:WEBSERVICE_NAME>
</soapenv:Body>
</soapenv:Envelope>';
SELECT TO_CHAR(sysdate,'DD-MON-YYYY HH:RR:MM') INTO pn_datetime FROM dual;
--//===========================================================================
--Creating the request
--//===========================================================================
http_req:= UTL_HTTP.begin_request(p_soawsdl , 'POST' , 'HTTP/1.0');
SELECT TO_CHAR(sysdate,'DD-MON-YYYY HH:RR:MM') INTO pn_datetime FROM dual;
--dbms_output.put_line('After Calling http '||pn_datetime);
--//===========================================================================
-- since we are dealing with plain text in XML documents
--//===========================================================================
UTL_HTTP.set_header(http_req, 'Content-Type', 'text/xml');
UTL_HTTP.set_header(http_req, 'Content-Length', LENGTH(lv_soap_request));
--//===========================================================================
-- required to specify this is a SOAP communication
--//===========================================================================
UTL_HTTP.set_header(http_req, 'SOAPAction', 'process');
UTL_HTTP.write_text(http_req, lv_soap_request);
SELECT TO_CHAR(sysdate,'DD-MON-YYYY HH:RR:MM') INTO pn_datetime FROM dual;
-- dbms_output.put_line('After SOAP Process '||pn_datetime);
--//===========================================================================
--If the web service is syncronous then it will wait for the response
--//===========================================================================
http_resp := UTL_HTTP.GET_RESPONSE(http_req);
UTL_HTTP.READ_TEXT(http_resp, lv_soap_respond);
UTL_HTTP.END_RESPONSE(http_resp);
lv_soap_request_xml:= xmltype(lv_soap_respond); //webservice will return result in SOAP response format
/*------------------ Remove SOAP headers and get the Result value------------- */
SELECT extractValue(lv_soap_request_xml, '//return', ' xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns2="http://ds.ws.emas/"') RETURN
INTO l_return
FROM DUAL; //use extractValue method to extract output from SOAP response
result := l_return; //Assign result to variable
COMMIT;
SELECT TO_CHAR(SYSDATE,'DD-MON-YYYY HH:RR:MM')
INTO pn_datetime
FROM dual;
EXCEPTION
WHEN UTL_HTTP.end_of_body THEN
UTL_HTTP.END_RESPONSE(http_resp);
-- errbuf := 'Call to webservice Completed Successfully';
-- retcode := 0 ;
WHEN UTL_HTTP.request_failed THEN
dbms_output.put_line('Request Failed:' ||UTL_HTTP.GET_DETAILED_SQLERRM);
-- errbuf := 'EXCEPTION :UTL_HTTP.request_failed';
-- retcode := 2 ;
WHEN UTL_HTTP.http_server_error THEN
dbms_output.put_line('Server Error:'||UTL_HTTP.GET_DETAILED_SQLERRM);
-- errbuf := 'EXCEPTION :UTL_HTTP.http_server_error';
-- retcode := 2 ;
WHEN UTL_HTTP.http_client_error THEN
dbms_output.put_line('Client Error:'||UTL_HTTP.GET_DETAILED_SQLERRM);
/* errbuf := 'EXCEPTION:UTL_HTTP.http_client_error';
retcode := 2 ;*/
WHEN OTHERS THEN
dbms_output.put_line(SUBSTR(SQLERRM,1,255));
/* errbuf := 'EXCEPTION :Others';
retcode := 2 ;*/
END Invoke_soaservice_p;
Call this procedure using CallableStatement In OADBTransaction class in OAF.
Here we are calling webservices from Oracle procedure and calling that procedure from OAF Page.
SQL Procedure:
-----------------
create or replace PROCEDURE invoke_soaservice_p(
ARG0 IN VARCHAR2 , --
ARG1 IN VARCHAR2 ,--
ARG2 IN VARCHAR2 , --
ARG3 IN VARCHAR2 , --
ARG4 IN VARCHAR2 , --
arg5 IN VARCHAR2 , -- Remarks
result OUT VARCHAR2)
AS
PRAGMA AUTONOMOUS_TRANSACTION;
--//===========================================================================
--Variable declaration
--//===========================================================================
--lv_org_id VARCHAR2(255) := FND_PROFILE.VALUE('ORG_ID');
lv_soap_request VARCHAR2(30000);
lv_soap_respond VARCHAR2(30000);
lv_soap_request_xml XMLTYPE;
http_req UTL_HTTP.REQ;
http_resp UTL_HTTP.RESP;
l_return VARCHAR2(30000);
vErrorCode VARCHAR2(100);
vErrorMessage VARCHAR2(500);
vXml Xmltype;
'http://10.127.9.14:8080/emas2/services/authenticateWS?wsdl';
p_soawsdl VARCHAR2(500) := 'WADL_LINK'; --WSDL Link
pn_datetime VARCHAR2(200);
lv_user_id VARCHAR2(250);
lv_passwd VARCHAR2(250);
l_url VARCHAR2(250):= 'null';
l_id NUMBER;
lv_dms_bse_path VARCHAR2(240);
lv_dms_department VARCHAR2(240);
BEGIN
dbms_output.enable(1000000);
SELECT TO_CHAR(sysdate,'DD-MON-YYYY HH:RR:MM') INTO pn_datetime FROM dual;
/*-------------- Invoke Register webservice to register the user----------------- */
lv_soap_request:= '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ds="http://ds.ws.emas/">
<soapenv:Header/>
<soapenv:Body>
<ds:WEBSERVICE_NAME>
<arg0>'||arg0||'</arg0> //pass parameters to webservice
<arg1>'||arg1||'</arg1>
<arg2>'||arg2||'</arg2>
<arg3>'||arg3||'</arg3>
<arg4>'||arg4||'</arg4>
<arg5>'||arg5||'</arg5>
<arg6>true</arg6>
</ds:WEBSERVICE_NAME>
</soapenv:Body>
</soapenv:Envelope>';
SELECT TO_CHAR(sysdate,'DD-MON-YYYY HH:RR:MM') INTO pn_datetime FROM dual;
--//===========================================================================
--Creating the request
--//===========================================================================
http_req:= UTL_HTTP.begin_request(p_soawsdl , 'POST' , 'HTTP/1.0');
SELECT TO_CHAR(sysdate,'DD-MON-YYYY HH:RR:MM') INTO pn_datetime FROM dual;
--dbms_output.put_line('After Calling http '||pn_datetime);
--//===========================================================================
-- since we are dealing with plain text in XML documents
--//===========================================================================
UTL_HTTP.set_header(http_req, 'Content-Type', 'text/xml');
UTL_HTTP.set_header(http_req, 'Content-Length', LENGTH(lv_soap_request));
--//===========================================================================
-- required to specify this is a SOAP communication
--//===========================================================================
UTL_HTTP.set_header(http_req, 'SOAPAction', 'process');
UTL_HTTP.write_text(http_req, lv_soap_request);
SELECT TO_CHAR(sysdate,'DD-MON-YYYY HH:RR:MM') INTO pn_datetime FROM dual;
-- dbms_output.put_line('After SOAP Process '||pn_datetime);
--//===========================================================================
--If the web service is syncronous then it will wait for the response
--//===========================================================================
http_resp := UTL_HTTP.GET_RESPONSE(http_req);
UTL_HTTP.READ_TEXT(http_resp, lv_soap_respond);
UTL_HTTP.END_RESPONSE(http_resp);
lv_soap_request_xml:= xmltype(lv_soap_respond); //webservice will return result in SOAP response format
/*------------------ Remove SOAP headers and get the Result value------------- */
SELECT extractValue(lv_soap_request_xml, '//return', ' xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns2="http://ds.ws.emas/"') RETURN
INTO l_return
FROM DUAL; //use extractValue method to extract output from SOAP response
result := l_return; //Assign result to variable
COMMIT;
SELECT TO_CHAR(SYSDATE,'DD-MON-YYYY HH:RR:MM')
INTO pn_datetime
FROM dual;
EXCEPTION
WHEN UTL_HTTP.end_of_body THEN
UTL_HTTP.END_RESPONSE(http_resp);
-- errbuf := 'Call to webservice Completed Successfully';
-- retcode := 0 ;
WHEN UTL_HTTP.request_failed THEN
dbms_output.put_line('Request Failed:' ||UTL_HTTP.GET_DETAILED_SQLERRM);
-- errbuf := 'EXCEPTION :UTL_HTTP.request_failed';
-- retcode := 2 ;
WHEN UTL_HTTP.http_server_error THEN
dbms_output.put_line('Server Error:'||UTL_HTTP.GET_DETAILED_SQLERRM);
-- errbuf := 'EXCEPTION :UTL_HTTP.http_server_error';
-- retcode := 2 ;
WHEN UTL_HTTP.http_client_error THEN
dbms_output.put_line('Client Error:'||UTL_HTTP.GET_DETAILED_SQLERRM);
/* errbuf := 'EXCEPTION:UTL_HTTP.http_client_error';
retcode := 2 ;*/
WHEN OTHERS THEN
dbms_output.put_line(SUBSTR(SQLERRM,1,255));
/* errbuf := 'EXCEPTION :Others';
retcode := 2 ;*/
END Invoke_soaservice_p;
Call this procedure using CallableStatement In OADBTransaction class in OAF.
No comments:
Post a Comment