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: