04/02/2023

AppDatos

Portal de Información – Rutificador

[Oracle] Consumir un Webservice desde un Store Procedure Oracle 11G

1 minuto de lectura

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;

Deja una respuesta