[Oracle] Consumir un Webservice desde un Store Procedure Oracle 11G
Script simple para el llamado de un Webservice SOAP, tanto para el método GET o POST, donde enviamos los parámetros dentro del Body Request y recibimos todo en un CLOB Response.
CREATE OR REPLACE PROCEDURE POR_SP_CNS_CLAVE_PERSONA_WS(NAME IN VARCHAR2, RESMARK OUT CLOB)
IS
HTTP_REQ utl_http.REQ;
HTTP_RESP utl_http.RESP;
REQUEST_ENV VARCHAR2(32767);
L_REPLYLINE CLOB;
BEGIN
REQUEST_ENV := '
PARAM1
';
dbms_output.put_line('XML ENTRADA:' || REQUEST_ENV);
HTTP_REQ := utl_http.begin_request('http://10.110.1.13:8011/ExecSQLVMS/ExecSqlVms?wsdl', 'POST', utl_http.http_version_1_1);
utl_http.set_persistent_conn_support(HTTP_REQ, TRUE);
utl_http.set_header(HTTP_REQ, 'Content-Type', 'text/xml;charset=utf-8');
utl_http.set_header(HTTP_REQ, 'SOAPAction', 'TuWebServiceAccion');
utl_http.set_body_charset(HTTP_REQ, 'utf-8');
utl_http.set_header(HTTP_REQ, 'Content-Length', Lengthb(REQUEST_ENV));
utl_http.write_line(HTTP_REQ, REQUEST_ENV);
HTTP_RESP := utl_http.get_response(HTTP_REQ);
utl_http.read_text(HTTP_RESP, L_REPLYLINE);
utl_http.end_response(HTTP_RESP);
dbms_output.put_line('XML SALIDA: ' || L_REPLYLINE);
RESMARK := L_REPLYLINE;
EXCEPTION
WHEN utl_http.end_of_body THEN
utl_http.end_response(HTTP_RESP);
RESMARK := 'Error en el cuerpo';
WHEN utl_http.too_many_requests THEN
utl_http.end_response(HTTP_RESP);
RESMARK := 'Error muchas conexiones abiertas';
WHEN Others THEN
utl_http.end_response(HTTP_RESP);
RESMARK := 'Error de Servicio o Invocación';
END SP_TEST_WEB;