Esta publicación servirá para ir colocando fragmentos de consultas que en algún momento me fueron útiles para usarlo en MongoDB Fragmento 1: Se requería obtener todos los elementos que dentro de un atributo que es de tipo array(arreglo) coincida con type:"fire" Fragmento 2: Se requería actualizar el atributo " lastUpdate " de toda la colección donde la edad sea mayor o igual a 15.
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 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:
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:
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
Que tal con el ejemplo si funciona ?
ResponderBorrar