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 鈥渕anejar 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=鈥漢ttp://www.w3.org/1999/XSL/Transform鈥

xmlns:ds=鈥漢ttp://www.w3.org/2000/09/xmldsig#鈥

xmlns:dp=鈥漢ttp://www.datapower.com/extensions鈥渆xtension-element-prefixes=鈥漝p鈥 >

 

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=鈥漍509Cert鈥>

<xsl:value-of select=鈥漅oot/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 鈥渃ert鈥.

<xsl:variable name=鈥漜ertificado鈥>

<xsl:value-of select=鈥漜oncat(鈥榗ert:鈥, $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=鈥漜ert-data鈥 select=鈥漝p:get-cert-details($certificado)鈥/>

<xsl:variable name=鈥漜ert-auth鈥 select=鈥漝p:get-cert-issuer($certificado)鈥/>

<xsl:variable name=鈥漜ert-serial鈥 select=鈥漝p:get-cert-serial($certificado)鈥/>

<xsl:variable name=鈥漜ert-subject鈥 select=鈥漝p: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=鈥濃榲ar://context/saved/Subject鈥欌 value=鈥漵tring($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: