Blog!

Busqueda de información

Consumir Web Service desde PL/SQL

Ratio: 5 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio activado
 

Resumen.

El objetivo de este artículo es mostrar como consumir un Web Services desde un procedimiento hecho en PL/SQL.

En muchos casos al integrar Middleware y Oracle e-Business Suite o simplemente con una base de datos Oracle; es necesario poder consumir un Web Services desde un procedimiento programado en PL/SQL.

En PL/SQL existen algunas funciones o wrappers que nos permiten consumir un Web Services; entre ellos se encuentran los siguientes:

-        SOAP_API

-        UTL_HTTP

-        UTL_DBWS

 

Cada uno de esos paquetes realiza el consumo de un Web Services. El desarrollador es quién decide cual se ajusta a sus necesidades y alcances de configuración. En este artículo haremos mención del wrapper UTL_DBWS.

 

Instalación del wrapper

El primer paso para usar ese wrapper es referirse a la documentación de Oracle, en específico a la nota 428775.1, “DBWS Callout Utilities User's Guide for RDBMS 10.1 or 10.2”. Esta les proveerá los pasos necesarios para instalar o verificar si se encuentra correctamente instalado el paquete.

De manera general, lo que se necesita es tener Java instalado y configurado en la base de datos, tener JPublisher y acceso a una instancia OC4J. En esencia, estamos convirtiendo a la base de datos en un consumidor de Web Services.1

Para ofrecer una idea más clara de lo que se está configurando en la base de datos, observar la siguiente imagen, la cual fue tomada de la configuración del JPublisher.

 

 

Descripción.

Para realizar una mejor descripción de las funciones que el Wrapper ofrece, nos basaremos en un ejemplo2.E iremos describiendo cada una de estas.

Function get_joke return varchar2

is
  service_       sys.utl_dbws.SERVICE;
  call_          sys.utl_dbws.CALL;
  service_qname    sys.utl_dbws.QNAME;
  port_qname       sys.utl_dbws.QNAME;
  xoperation_qname   sys.utl_dbws.QNAME;
  xstring_type_qname sys.utl_dbws.QNAME;
  response       sys.xmltype;
  request        sys.xmltype;
begin
  service_qname := sys.utl_dbws.to_qname(null, 'getJoke');
  service_ := sys.utl_dbws.create_service(service_qname);
  call_ := sys.utl_dbws.create_call(service_);
  sys.utl_dbws.set_target_endpoint_address(call_, 'http://interpressfact.net/webservices/getjoke.asmx');
  sys.utl_dbws.set_property( call_, 'SOAPACTION_USE', 'TRUE');
  sys.utl_dbws.set_property( call_, 'SOAPACTION_URI', 'http://interpressfact.net/webservices/getJoke');
  sys.utl_dbws.set_property( call_, 'OPERATION_STYLE', 'document');
  request := sys.xmltype(
     '<getJoke xmlns="http://interpressfact.net/webservices/">'
    || '<Category>Excuses-10</Category>'
    || '</getJoke>');
  response :=sys. utl_dbws.invoke(call_, request);
  return response.extract('//getJokeResult/child::text()',
    'xmlns="http://interpressfact.net/webservices/"').getstringval();
end;

 

sys.utl_dbws.create_service(service_qname); Esta parte del código nos permite crear una instancia del servicio.

sys.utl_dbws.create_call(service_); Se procede a hacer el llamado a la instancia.

sys.utl_dbws.set_target_endpoint_address; Se define la url del Web Service a consumir.

sys.utl_dbws.set_property; Se realiza el seteo de los propiedades particulares sobre el llamado.

sys. utl_dbws.invoke(call_, request); se realiza la invocación del Web Service. Pasando como parámetros la instancia a llamar y el contrato del servicio que en un paso anterior se construyó con la siguiente instrucción:

request := sys.xmltype(

     '<getJoke xmlns="http://interpressfact.net/webservices/">'
    || '<Category>Excuses-10</Category>'
    || '</getJoke>');

response.extract('//getJokeResult/child::text()', 

    'xmlns="http://interpressfact.net/webservices/"').getstringval(); Una vez, que el Web Service responde. Uno puede leer el resultado con esta instrucción.

 

Conclusión

Realizar un consumo o invocación de un Web Service desde un procedimiento desarrollado en PL/SQL se puede llevar acabo usando las funciones de utilería que provee Oracle en su base de datos.

De esas utilerías el programador puede usar SOAP_API o bien UTL_HTTP. Para usar estas es necesario que se realice la configuración de cada utilería en la base de datos.

En nuestro caso mencionamos el uso del Wrapper UTL_DBWS, que está orientado a desarrolladores que han trabajado con Java. Para usar esta utilería como se explico es necesario solicitar al DBA la configuración y se otorguen los permisos para usar esta utilería de manera eficiente.

 

Sin más por el momento, quedó a sus órdenes por cualquier duda o aclaración. Se pueden poner en contacto con un servidor al correo rherrera[at]baware.com.mx o a info[at]baware.com.mx 

Log in