IBM WebSphere Datapower provee una extensión de XSLT que pone a disposición una serie de funciones y elementos adicionales para realizar operaciones complejas que nos permiten acceder a mas información al momento de “manejar datos” en los diferentes servicios.

Las extensiones abarcan desde manejo adicional de tipos simples como String o DateTime, pasando por el manejo de datos binarios y encoding hasta funciones criptográficas para manejo de firma y certificados.

Para poder hacer uso de las extensiones debemos incluir el namespace al momento de crear la plantilla XSLT:

 

<xsl:stylesheet version=”1.0“

xmlns:xsl=”http://www.w3.org/1999/XSL/Transform“

xmlns:ds=”http://www.w3.org/2000/09/xmldsig#“

xmlns:dp=”http://www.datapower.com/extensions“extension-element-prefixes=”dp“ >

 

Luego debemos seleccionar cual/cuales de las extensiones aplican mejor a la resolución de nuestro problema.

Un caso que hemos resuelto recientemente es el de extraer información de un certificado para comparar ciertos datos de emisión del certificado con datos que vienen provistos en nuestro XML .

Para ello debemos identificar el nodo donde viene la información del certificado de una forma similar a lo siguiente:

 

<xsl:variable name=”X509Cert“>

<xsl:value-of select=”Root/MiCabezal/X509Certificate“/>

xsl:variable>

Para poder utilizar la función de extracción de datos del certificado debemos concatenar el prefijo que indica el tipo de objeto en este caso “cert”.

<xsl:variable name=”certificado“>

<xsl:value-of select=”concat(‘cert:’, $X509Cert)“/>

xsl:variable>

 

Una vez completados estos pasos podemos pasar a utilizar las funciones específicas provistas por la extensión de Datapower.

 

<xsl:variable name=”cert-data” select=”dp:get-cert-details($certificado)“/>

<xsl:variable name=”cert-auth” select=”dp:get-cert-issuer($certificado)“/>

<xsl:variable name=”cert-serial” select=”dp:get-cert-serial($certificado)“/>

<xsl:variable name=”cert-subject“ select=”dp:get-cert-subject($certificado)“/>

Adicionalmente, podemos poner estos datos en variables de contexto para poder utilizar mas adelante en esta plantilla u otra durante le procesamiento de una regla o una acción específica en un la llamada a un servicio.

Esto se logra mediante una asignación de este tipo:

 
<dp:set-variable name=”‘var://context/saved/Subject’“ value=”string($cert-subject)“/>

Esto nos permitirá tener un control mucho mayor de la información y poder realizar tareas especificas en diferentes pasos del procesamiento de las llamadas o respuestas de los servicios.

El siguiente documento detalla las extensiones de Datapower para XSLT: