Transformar un mensaje XML Simple en un Arreglo Utilizando IBM Integration Designer

Transformaciones con Java Custom Mediation y XSL

El objetivo es demostrar las capacidades de transformación de XMLs y la flexibilidad ofrecida en IBM Integration Designer (antes WebSphere Integration Developer) que es parte de la solución IBM Busines Process Manager v7.5. En esta ocasión se transforma un XML simple en un arreglo de elementos, utilizando Java y XSL.

Fermin Luna B, WebSphere IT Specialist, IBM

Egresado del Instituto Politecnico Nacional, lleva más de 10 de experiencia en la industria de TI en desarollo de aplicaciones y liderazgo de grupos de desarrollo, trabajando en sectores como Banca, Retail, Telecomunicaciones. Actualmente con responsabilidades ténicas en productos de integración como WebSphere MQ, WebSphere Message Broker, WebSphere DataPower.



10-02-2012

Introducción

Muchas empresas cuentan con sistemas diversos que necesitan trabajar de manera conjunta para cumplir con las demandas del negocio. Este es el caso de un ERP (Enterprise Resource Planning) que necesita compartir información con otros sistemas internos o externos a la organización, siempre con la finalidad de mantener la integridad de dicha información y que además no se vea afectado el desempeño de los procesos. Para ello IBM cuenta con soluciones que se ajustan a la medida de los retos que se están afrontando.

Aunque esta necesidad dada su naturaleza, es un caso de uso típico de integración para cualquier sistema que utiliza un mensaje en cierto formato y necesita compartir la información con otro sistema que espera la misma información en un formato un tanto diferente, he visto en varias ocasiones que estas transformaciones son muy recurrentes en SAP.

Cuando hablamos de sistemas ERP como SAP, Siebel, PeopleSoft, la forma de interactuar con estos sistemas se puede volver compleja y demandar mucho mantenimiento, de no ser que se utilicen herramientas que permitan resolver estos retos de integración de una forma elegante y a la vez sencilla. Esto se puede lograr utilizando por ejemplo WebSphere Adapters que permiten abstraer esta complejidad para exponer interfaces simples que en ocasiones es necesario transformar para integrarse de una forma aún mas simple con diversos sistemas.

El objetivo de este artículo es mostrar este tipo de transformaciones y como se pueden resolver con IBM Integration Designer (antes conocido como WebSphere Integration Developer) que es parte de la solución IBM Busines Process Manager v7.5. El problema que resolveremos es "Como transformar un mensaje XML simple y entregarlo a otro sistema como un XML con un arreglo de elementos".

Para enfrentar esta problemática utilizaremos dos enfoques, Utilizando Custom Mediation (Java) y Utilizando XSL Transform. En los siguientes pasos desarrollaremos un módulo que tiene dos componentes de mediación:

  1. SingleToArrayJava
  2. SingleToArrayXSL.

Figura 1. Diagrama de ensamble para los componentes de integración.

Estas mediaciones reciben un mensaje como el siguiente Business Object:

Figura 2. Estructura de datos de entrada

La transformación tendrá como salida un mensaje como el siguiente Business Object:

Figura 3. Estructura de datos de salida.

Como podemos ver en la figura anterior, en la salida encontramos el campo "id" además de un arreglo llamado data que contiene uno o mas elementos de tipo CustomerDataItem con el resto de la información. A continuación se muestra un mensaje como el que necesitamos a la salida, con algunos datos de muestra.

Figura 4. Vista de los datos en la estructura de salida.


Ambiente inicial.

Para empezar suponemos que se ha iniciado "Process Center" y hemos iniciado la herramienta "IBM Integration Designer" en el Workspace que hayamos deseado (C:\workspaces\devWorks, por ejemplo). Debemos asegurarnos de que tengamos dado de alta un servidor/runtime de "Process Server v7.5" en el cual haremos el despliegue. En la siguiente figura se puede ver que tenemos un servidor llamado "IBM Process Server v7.5 at localhost" con un estado "Started/Synchronized".

Figura 5. Servidor para realizar el despliegue del módulo.


Creacion del módulo

A continuación abriremos IBM Integration Designer (en adelante llamado IID), en el menú:

  • File → New → Module, ó
  • File → New → Mediation Module.

Figura 6. Creación del modulo

A nuestro modulo lo llamaremos "CustomerModule". Ahora definiremos los mensajes que serán utilizados en este servicio (Business Obejcts e interfase).

En la entrada usaremos un BO llamado CustomerBO y a la salida tendremos un BO llamado ArrayCustomerBO que tendrá un arreglo de tipo CustomerDataItem, ver detalle en la figura 1 y 2. Nuestra interfase se llamará "CustomerIntf" y quedará como sigue:

Figura 7. Interfase del servicio.

Como se ve en la figura anterior tendremos una operación llamada "query" con entrada y salida de los tipos ya descritos.

Solución Utilizando Java

En seguida necesitamos abrir el diagrama de ensamble "Module Assembly Diagram" para agregar la mediación. Necesitamos arrastrar de la paleta de herramientas hacia el area de diseño un elemento: Component → Mediation Flow (nombrarlo SingleToArrayJava).

Figura 8. Creación de componente para mediación Java.

La interfase que utilizaremos será CustomerIntf. Ahora daremos doble clic en la mediación SingleToArrayJava y daremos Ok en el mensaje de advertencia para implementar dicha mediación, seleccionamos el folder por defecto y damos Ok de nuevo.

Seleccionaremos "Blank Mediation Flow" como template y utilizando la paleta de herramientas arrastraremos un elemento Transformation → Custom Mediation (nombrarlo como setArray).

Figura 9. Mediación Java .

Si seleccionamos setArray → Properties → Details podremos escribir el código Java necesario. En la siguiente lista podemos ver el código.

BOFactory boFactory = (BOFactory) 
ServiceManager.INSTANCE.locateService("com/ibm/websphere/bo/BOFactory");
DataObject outputBody = 
boFactory.createByMessage("http://CustomerModule/CustomerInput", 
"queryResponseMsg");
DataObject queryResponse = outputBody.createDataObject("queryResponse");
DataObject output = queryResponse.createDataObject("output");
output.set("id",smo.getString("/body/query/input/id"));
List dataList =  output.getList("data");
      
Lista 1. Creación de BO para la salida y obtención del arreglo.




DataObject item = boFactory.create("http://CustomerModule", "CustomerDataItem");
item.set("fieldname","fname");
item.set("fieldvalue",smo.getString("/body/query/input/fname"));
dataList.add(item);

item = boFactory.create("http://CustomerModule", "CustomerDataItem");
item.set("fieldname","lname");
item.set("fieldvalue",smo.getString("/body/query/input/lname"));
dataList.add(item);

Lista 2. Creación de Items del arreglo y asignación de valor.

smo.setBody(outputBody);
out.fire(smo); 

Lista 3. Asignación del objeto creado a la salida.

Necesitamos agregar los imports necesarios de los que depende el código Java antes expuesto, para ello debemos seleccionar el componente setArray → Properties → Java Imports donde pondremos las dependencias:

import commonj.sdo.DataObject;
		import com.ibm.websphere.bo.BOFactory;
		import com.ibm.websphere.sca.ServiceManager;
		import java.util.List;
	
	Lista 4. Imports de Java necesarios.

En el listado 1 y 2 se hace referencia a ciertos "namespaces" en la creación de objetos, estos "namespaces" están basados en la definición de los Bussiness Objects y el detalle para la entrada y la salida se puede ver si nos vamos a la mediación y damos un clic en la letra "i" que se encuentra en la esquina superior derecha de setArray:

Figura 10. Detalle de entrada y salida de la mediación (namespace y estructura).

Probando el servicio

Para comprobar que la mediación está funcionando adecuadamente, ejecutaremos una prueba. Así que debemos regresar al diagrama de ensamble de CustomerModule, y dar clic con el botón derecho en mediación SingleToArrayJava, y seleccionamos la opción "Test Component", lo que nos traerá una pantalla como la siguiente:

Figura 11. Pantalla de prueba de integración: “Integration Test Client”.

En esta pantalla será necesario poner algunos valores en la cuadrícula inferior derecha, en los campos id, fname, lname, street. st_number, zipcode, después podremos ejecutar la prueba presionando el botón verde en forma de triángulo. Esto traerá una ventana que nos pedirá que indiquemos el servidor donde se hará el deployment:

Figura 12. Resultados de la prueba de integración.

Damos clic en el botón Finish y posteriormente necesitamos ingresar el usuario y contraseña que están haciendo el deployment:

Figura 13. Usuario y password para Deployment.

El resultado se verá a continuación, se puede observar que se han insertado los valores de entrada como un arreglo de objetos de tipo CustomerDataItem.

Figura 14. Resultados de la prueba de la mediación Java.

Solución Utilizando XSL

Ahora abrimos el diagrama de ensamble para agregar la mediación. Necesitamos arrastrar de la paleta de herramientas hacia el área de diseño un elemento: Component → Mediation Flow (nombrarlo SingleToArrayXSL).

Figura 15. Creación de componente para mediación XSL.

La interfase que utilizaremos tanto para el export como para la mediación será la misma: CustomerIntf. Ahora daremos doble clic en la mediación y daremos Ok en el mensaje de advertencia para implementar dicha mediación, seleccionamos el folder por defecto y damos Ok de nuevo.

Seleccionaremos "Blank Mediation Flow" como template y utilizando la paleta de herramientas arrastraremos un elemento Transformation → XSL Transformation (nombrarlo como TransformMsg).

Figura 16. Mediación con transformación XSL.

La transformación constará de una operación Move y varios mapas locales, como se ve a continuación.

Figura 17. Detalle de la transformación XSL.

Donde cada mapa local tendrá algo como lo siguiente:

Figura 18. Mapa Local con asignaciones dentro del XSL.

Es decir, el valor para "fieldvalue" será asignado directamente del campo "fname" de la entrada y el valor de "fieldname" tendrá un valor fijo "fname".

Probando el servicio

El procedimiento para realizar la prueba es prácticamente el mismo que en la mediación SingleToArrayJava, es decir hay que ir al diagrama de ensamble y dar clic con el botón derecho en la mediación SingleToArrayXSL seleccionando la opción "Test Component" y el resultado deberá ser como el que se ve a continuación:

Figura 19. Resultado de la prueba de la mediación XSL.


Conclusión

Con esta demostración se expone la flexibilidad para la transformación de un mensaje de entrada utilizando IID. Se puede utilizar lenguaje Java o herramientas gráficas como transformación XSL, esto básicamente dependerá de uno o varios factores:
- La necesidad que se requiere cubrir
- Las habilidades del desarrollador
- La complejidad de la transformación

Al final de este artículo se agrega un respaldo (Project Interchange) que contiene las mediaciones desarrolladas, con la finalidad de que el lector pueda revisar con detalle. Dado que este documento tiene carácter demostrativo ni el autor ni IBM están sujetos a ninguna responsabilidad en la utilización de estos recursos y/o código.

Referencias:

IBM Business Process Manager Infocenter
http://publib.boulder.ibm.com/infocenter/dmndhelp/v7r5mx/index.jsp
IBM Integraton Designer v7.5

http://publib.boulder.ibm.com/infocenter/esbsoa/wesbv7r5/topic/com.ibm.wbpm.wid.main.doc/welcome.html

IBM WebSphere Adapters
http://www-01.ibm.com/software/integration/wbiadapters/

IBM BPM Video Series by Neil Kolban (Muy Interesante)
http://vimeo.com/kolban

Comentarios

developerWorks: Ingrese

Los campos obligatorios están marcados con un asterisco (*).


¿Necesita un IBM ID?
¿Olvidó su IBM ID?


¿Olvidó su Password?
Cambie su Password

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


La primera vez que inicie sesión en developerWorks, se creará un perfil para usted. La información en su propio perfil (nombre, país/región y nombre de la empresa) se muestra al público y acompañará a cualquier contenido que publique, a menos que opte por la opción de ocultar el nombre de su empresa. Puede actualizar su cuenta de IBM en cualquier momento.

Toda la información enviada es segura.

Elija su nombre para mostrar



La primera vez que inicia sesión en developerWorks se crea un perfil para usted, teniendo que elegir un nombre para mostrar en el mismo. Este nombre acompañará el contenido que usted publique en developerWorks.

Por favor elija un nombre de 3 - 31 caracteres. Su nombre de usuario debe ser único en la comunidad developerWorks y debe ser distinto a su dirección de email por motivos de privacidad.

Los campos obligatorios están marcados con un asterisco (*).

(Por favor elija un nombre de 3 - 31 caracteres.)

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


Toda la información enviada es segura.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=WebSphere
ArticleID=792198
ArticleTitle=Transformar un mensaje XML Simple en un Arreglo Utilizando IBM Integration Designer
publish-date=02102012