Como se ha comentado previamente en este post, existe una gran variedad de extensiones de XSLT provistas para utilizar sobre el appliance Datapower.

En este post se analizarán las posibilidades de la función dp:soap-call ( teniendo en cuenta que previamente se ha hecho la declaración del namespace correspondiente a xmlns:dp=http://www.datapower.com/extensions).

La función dp:soap-call permite hacer una llamada a un servicio (post) enviando un mensaje XML y recibir la respuesta correspondiente.

En este link se puede tener una documentación detallada de cada parámetro utilizado en la llamada.

Para poder hacer la llamada se va requerir el mensaje XML de request.

La sintaxis completa sería la siguiente:

dp:soap-call(URL, message, SSL-Proxy-Profile, flags, SOAP-action, HTTP-headers, process-faults, timeout)

La URL refiere a la URL del servicio que se desea invocar.

El mensaje es el mensaje SOAP que se requiere para realizar la llamada.

Un posible ejemplo sería:

<xsl:variable name=”message”>

<soapenv:Envelope xmlns:soapenv=”http://schemas.xmlsoap.org/soap/envelope/” xmlns:ws=”http://ws.seguridad.dgi.gub.uy”>

<soapenv:Header/>

<soapenv:Body>

<ws:NombreMetodo>

<ws:param1>valor de prámetro</ws:param1>

<ws:param2> valor de prámetro </ws:param2>

……

<ws:paramX> valor de prámetro </ws:paramX>

</ws:NombreMetodo >

</soapenv:Body>

</soapenv:Envelope>

</xsl:variable>

Notar que este mensaje es idéntico a lo que se usaría en SoapUI para hacer la llamada al servicio.

Los demás parámetros se pueden obviar si no son explicitamente requeridos.

Ejemplo de llamada:

<xsl:variable name=”result” select=’dp:soap-call(“http://….”, $message)’/>

En la variable $result se guarda el resultado, un XML por tanto debe tratarse como tal.

Por ejemplo si el resultado esperado es un dato de tipo básico se debe extraer con el XPath correcto

<xsl:variable name=”respuestaDato” select=”$result//*[namespace-uri()=’uri-servicio’ and local-name()=’nombreObjetoRetorno’]/text()”/>

El uso de esta función permite llamar a servicios externos desde una plantilla XSLT en cualquier contexto de servicios de Datapower (Web Service Proxy, XML Firewall, Multi-protocolo Gateway, etc…)