sábado, abril 26, 2014

Consumir WSDL con mule ESB respondiendo JSON o XML




Pues bien esta vez voy a tratar de explicar como consumir  un wsdl del ejemplo que realizamos con WSOperaciones. Por medio de una peticion http consumiremos mediante SOAP el servicio para despues retornar el resultado en formato XML o JSON.Todo esto lo voy a realizar con Mule ESB. Menos bla bla bla y mas Accion...



Crear proyecto desde New-> Mule Project

Colocamos el nombre "ConsumeWSDLOperaciones"
Al crear el proyecto autimaticamente crea un archivo .mflow, justo aqui es donde vamos a crear nuestro flujo para consumir el servicio y hacer la transformacion del resultado
Al finalizar nuestro modelado, esto debera quedar de la siguiente forma, con un flow  y un sub-flow

Bien vamos a comenzar con el sub-flow, ya que este es el que servira para utilizazr el WSDL y consmir el servicio SOAP para hacer la transformacion

Agregamos elScope Sub Flow





Dentro de este le agreamos el componente SOAP y el endpoinr HTTP debe quedar asi:

Damos doble click a SOAP y muestra la siguiente pantalla:
Damos click al boton Generate from WSDL y abre la siguiente pantalla:
Aqui colocamos el WSDL en mi caso yo utilice el local "http://localhost:8036/WSOperaciones/ServidorPort?wsdl", en Package Name colocamos en "com.operaciones.basicas.Servidor" este correponde al nombre del paquete que va a generar el componente, Damos click en OK

Se empieza a Generar el codigo java


Finaliza y se crea algo asi:



Las siguentes imagenes corresponden ala especificacion del wsdl, esto los coloque por que son importantes para entender las siguientes configuraciones ojo:

Imagen XML1:
Imagen XML2:        

 Ya que se  genero el codigo en el mismo componente camos a cambiar en Generic > Operation de JAX-WS service a Jax-WS client

En Client Attributes> Operation: colocaremos "Operaciones" esto por que coresponde al name de las operaciones en el xml del wsdl (Imagen XML2)

En JAX-WS client> Client Class: colocaremos   "com.operaciones.basicas.Servidor.ServidorService"esto por que la clase principal se encuentra en esta ubicacion.

En JAX-WS client> Port: colocamos ServidorPort esto por ser el name del port de la operaciones

Quedaria algo asi:

Damos ok,  se va mirando asi:

Damos doble click en HTTP inbound, muestra la siguiente pantalla:
Borramos todos y solo queda el Display Name y el Method POST, nos dirijimos al tab Advanced y colocamos la url del WSDL queda asi:


Agregamos el Transformer Set Payload

Debe quedar asi:

Este componente servira para enviar las respectivas variables al servicio SOAP. Damos doble click y muestra la pantalla donde colocaremos en Value " " eto debe quedar  asi:



Agregamos una variable







 




Debe verse asi:




 Esta variable srvira para identificar cual fue la peticion por la url si fue una peticion XML o JSON comocamos en Value    debe verse asi:



 Hasta aqui finalizamos la configuracion de sub-flow, ahora toca configurar el el flow, agramos el endpoint HTTP
Damos doble click en el y nos mostrara unapantalla como la siguiente:


En las propiedades del endpoint modificamos los parametros Port y Path, damos aceptar y agreamos un componente Flow Reference se debe ver asi :





Damos doble click al componente Flow Reference y nos muestra una pantalla como esta:


Aqui solo debemos seleccionar en Flow name  el sob-flow que configuramos previamente.Agregamos el componente Choice.





Despues de agregar Choice colocaremos los Transfromadores Object to XML y Object to JSON

 Y debe quedar asi:


Damos doble click en Choice , abrira una pantalla aqui colocaremos las condiciones que ayudaran a retornar el xml o json esto debe quedar algo asi:



Y listo ahora a dar el test  Run As-> Mule Application

y ahora si a probar desde el navegador si escribimos http://localhost:8086/consumiendo?num=10&num2=150&type=xml  esto regresara el resultado en formato XML tal como se ve en la imagen siguiente:


Y si colocamos http://localhost:8086/consumiendo?num=10&num2=150&type=json esto nos retornara el json tal como se ve en la imagen:




Al finalizar todo esto quedo asi:


Como no soy mago ni un genio , dejo las referencias que me ayudaron a crear este ejemplo y claro el proyecto con el codigo fuente:

DESCARA EL PROYECTO Y DEJA UN LIKE :)

http://forum.mulesoft.org/mulesoft/topics/http_inbound_endpoint_message_type
http://www.mulesoft.org/documentation/display/current/Mule+Expression+Language+Tips
http://training.middlewareschool.com/mule/consuming-wsdl-first-service/
http://stackoverflow.com/questions/16610614/mule-test-an-http-get-request-with-choice-component

1 comentario: