CREATE OR REPLACE PACKAGE xx_report_util_pck IS
/**
* @author: loilm 9-Aug-2016
* Ham gui email
* param in:
* - p_receiver: nguoi nhan, gui nhieu nguoi phan tach boi dau ","
* - p_email_subject: Tieu de email
* - p_email_body: Noi dung email
* - p_attch_name: Ten file attachment, neu khong co de ''
* param out:
* - retcode: = 0 - gui thanh cong, #0 - khong thanh cong
* - errbuf: mo ta loi
*/
function call_rest_ws(p_url varchar2, p_request varchar2) return varchar2;
/**
* @author: loilm 9-Aug-2016
* Ham goi WS qua giao thuc SOAP
* param in:
* - p_host: dia chi host
* - p_port: port
* - p_url: sufix
* - p_soap_action: ten soap Action can goi
* - p_request: message yeu cau
* return:
* - response cua webservice
*/
function call_soap_ws(p_host varchar2,
p_port varchar2,
p_url varchar2,
p_soap_action varchar2,
p_request varchar2) return varchar2;
/**
* @author: loilm 11-Aug-2016
* Ham goi WS qua giao thuc SOAP 1.2
* param in:
* - p_url: duong dan goi WS
* - p_namespace: namespace
* - p_operation: operation
* - p_soap_action: ten soap Action can goi
* - p_xml_param: message yeu cau (khong co soap header)
* return:
* - response cua webservice
*/
function call_soap_ws_12_default(p_url varchar2,
p_namespace varchar2,
p_operation varchar2,
p_soap_action varchar2,
p_xml_param varchar2)
return xx_report_soap_api.t_response;
function call_soap_ws_12(p_url varchar2,
p_soap_action varchar2,
p_operation varchar2,
p_xml_param varchar2)
return xx_report_soap_api.t_response;
END;
/
CREATE OR REPLACE PACKAGE BODY xx_report_util_pck IS
function call_rest_ws(p_url varchar2, p_request varchar2) return varchar2 is
req utl_http.req;
res utl_http.resp;
--url varchar2(4000) := 'http://host IP:4444/schedulerXX';
--name varchar2(4000);
buffer varchar2(4000);
v_result varchar2(10000);
/*
content varchar2(4000) := '<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<startJob xmlns="http://www.sos-berlin.com/scheduler">
<job>sos/housekeeping/job1</job>
<at>now+10</at>
<params >
<param name="FolderName" value="D:\OAF"/>
</params>
</startJob>
</soapenv:Body>
</soapenv:Envelope>';*/
begin
DBMS_OUTPUT.put_line(p_request);
req := utl_http.begin_request(p_url, 'POST', ' HTTP/1.1');
utl_http.set_header(req, 'user-agent', 'mozilla/4.0');
utl_http.set_header(req, 'content-type', 'application/xml');
utl_http.set_header(req, 'content-length', length(p_request));
utl_http.write_text(req, p_request);
DBMS_OUTPUT.put_line('gui thanh cong');
res := utl_http.get_response(req);
DBMS_OUTPUT.put_line('nhan thanh cong');
-- process the response from the HTTP call
begin
loop
utl_http.read_line(res, buffer);
dbms_output.put_line(buffer);
v_result := v_result || buffer;
end loop;
utl_http.end_response(res);
exception
when utl_http.end_of_body then
utl_http.end_response(res);
end;
return(v_result);
exception
when others then
DBMS_OUTPUT.put_line('nhan that bai');
return('-1');
end call_rest_ws;
function call_soap_ws(p_host varchar2,
p_port varchar2,
p_url varchar2,
p_soap_action varchar2,
p_request varchar2) return varchar2 IS
l_http_request UTL_HTTP.req;
l_http_response UTL_HTTP.resp;
l_buffer_size NUMBER(10) := 512;
l_line_size NUMBER(10) := 50;
l_lines_count NUMBER(10) := 20;
--l_string_request VARCHAR2(512);
l_line VARCHAR2(128);
l_substring_msg VARCHAR2(512);
l_raw_data RAW(512);
l_clob_response CLOB;
v_result varchar2(10000);
--l_host_name VARCHAR2(128) := '10.1.16.74';
--l_port VARCHAR2(128) := '5555';
BEGIN
/*
l_string_request := '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bpm="http://xx_VIP/BPM_AML.WebService:BPMTOAMLONESTEP">
<soapenv:Header/>
<soapenv:Body>
<bpm:BpmRequestOneStep>
<Request>
<SoLCTF>LC123456789</SoLCTF>
</Request>
</bpm:BpmRequestOneStep>
</soapenv:Body>
</soapenv:Envelope>';
*/
UTL_HTTP.set_transfer_timeout(60);
l_http_request := UTL_HTTP.begin_request(url => 'http://' || p_host || ':' ||
p_port || '/' || p_url,
-- url => 'http://10.1.16.74:5555/ws/BPM_AML.WebService.BPMTOAMLONESTEP/BPM_AML_WebService_BPMTOAMLONESTEP_Port',
method => 'POST',
http_version => 'HTTP/1.1');
UTL_HTTP.set_header(l_http_request, 'User-Agent', 'Mozilla/4.0');
UTL_HTTP.set_header(l_http_request, 'Host', p_host || ':' || p_port);
UTL_HTTP.set_header(l_http_request, 'Connection', 'close');
UTL_HTTP.set_header(l_http_request,
'Content-Type',
'text/xml;charset=UTF-8');
UTL_HTTP.set_header(l_http_request, 'SOAPAction', p_soap_action);
--'"BPM_AML_WebService_BPMTOAMLONESTEP_Binder_bpmToAmlOneStep"');
UTL_HTTP.set_header(l_http_request,
'Content-Length',
LENGTH(p_request));
<<request_loop>>
FOR i IN 0 .. CEIL(LENGTH(p_request) / l_buffer_size) - 1 LOOP
l_substring_msg := SUBSTR(p_request,
i * l_buffer_size + 1,
l_buffer_size);
BEGIN
l_raw_data := utl_raw.cast_to_raw(l_substring_msg);
UTL_HTTP.write_raw(r => l_http_request, data => l_raw_data);
EXCEPTION
WHEN NO_DATA_FOUND THEN
EXIT request_loop;
END;
END LOOP request_loop;
l_http_response := UTL_HTTP.get_response(l_http_request);
DBMS_OUTPUT.put_line('Response> status_code: "' ||
l_http_response.status_code || '"');
DBMS_OUTPUT.put_line('Response> reason_phrase: "' ||
l_http_response.reason_phrase || '"');
DBMS_OUTPUT.put_line('Response> http_version: "' ||
l_http_response.http_version || '"');
BEGIN
<<response_loop>>
LOOP
UTL_HTTP.read_raw(l_http_response, l_raw_data, l_buffer_size);
l_clob_response := l_clob_response ||
UTL_RAW.cast_to_varchar2(l_raw_data);
END LOOP response_loop;
EXCEPTION
WHEN UTL_HTTP.end_of_body THEN
UTL_HTTP.end_response(l_http_response);
END;
DBMS_OUTPUT.put_line('Response> length: "' || LENGTH(l_clob_response) || '"');
DBMS_OUTPUT.put_line(CHR(10) || '=== Print first ' || l_lines_count ||
' lines of HTTP response... ===' || CHR(10) ||
CHR(10));
<<print_response>>
FOR i IN 0 .. CEIL(LENGTH(l_clob_response) / l_line_size) - 1 LOOP
l_line := SUBSTR(l_clob_response, i * l_line_size + 1, l_line_size);
DBMS_OUTPUT.put_line('[' || LPAD(i, 2, '0') || ']: ' || l_line);
v_result := v_result || l_line;
EXIT WHEN i > l_lines_count - 1;
END LOOP print_response;
IF l_http_request.private_hndl IS NOT NULL THEN
UTL_HTTP.end_request(l_http_request);
END IF;
IF l_http_response.private_hndl IS NOT NULL THEN
UTL_HTTP.end_response(l_http_response);
END IF;
return v_result;
END;
function call_soap_ws_12(p_url varchar2,
p_soap_action varchar2,
p_operation varchar2,
p_xml_param varchar2)
return xx_report_soap_api.t_response is
v_request xx_report_soap_api.t_request;
v_response xx_report_soap_api.t_response;
begin
v_request := xx_report_soap_api.new_request(p_method => p_operation,
p_namespace => null);
xx_report_soap_api.add_complex_parameter(p_request => v_request,
p_xml => p_xml_param);
v_response := xx_report_soap_api.invoke(p_request => v_request,
p_url => p_url,
p_action => p_soap_action);
return v_response;
end;
function call_soap_ws_12_default(p_url varchar2,
p_namespace varchar2,
p_operation varchar2,
p_soap_action varchar2,
p_xml_param varchar2)
return xx_report_soap_api.t_response is
v_request xx_report_soap_api.t_request;
v_response xx_report_soap_api.t_response;
begin
v_request := xx_report_soap_api.new_request(p_method => p_operation,
p_namespace => p_namespace);
xx_report_soap_api.add_complex_parameter(p_request => v_request,
p_xml => p_xml_param);
v_response := xx_report_soap_api.invoke(p_request => v_request,
p_url => p_url,
p_action => p_soap_action);
return v_response;
end;
END;
/