lunes, 25 de febrero de 2013

Primer CodeLab de Web Services con Mule ESB, JAX WS, SOAP, WSDL, Spring

Primer CodeLab de Web Services usando [Mule ESB, JAX WS, SOAP, WSDL, Spring]. en este post no hablaré nada teórico sobre Mule, ya que ello lo pueden encontrar Googleando, será un lab totalmente práctico.

Requisitos:
- JDK  1.6
- MuleStudio
- soapUI

Paso a Paso para crear Web Services con Mule:



1. Crear proyecto Mule (MuleStudio): 




Next > Next > Next > Finish







2.- Crear el Objeto Producto.java
package com.dmotta.mule.labuno.mulelabuno.bo;
import java.io.Serializable;
public class Producto implements Serializable {
private String id;
private String nombre;
private String marca;
private String descripcion;

public Producto() {
}

public Producto(String id, String nombre, String marca, String descripcion) {
this.id=id;
this.nombre=nombre;
this.marca=marca;
this.descripcion=descripcion;
}
//getters/setters
}


3.- Crear la Interface que publicará los métodos listarProductos() y getDetalleProducto() y añadir las anotaciones @WebService, @WebResult para indicar que sera un servicio web.

package com.dmotta.mule.labuno.mulelabuno;
import java.util.List;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;

import com.dmotta.mule.labuno.mulelabuno.bo.Producto;

@WebService
public interface ICatalogoService {

@WebResult(name="lista")
public List listarProductos() throws Exception;

@WebResult(name="detalle")
public Producto getDetalleProducto(@WebParam(name="productoId") String productoId) throws Exception;

}


4.- Crear la clase CatalogoServiceImpl.java  que Implementa la Interface ICatalogoService.java

package com.dmotta.mule.labuno.mulelabuno.impl;
import java.util.ArrayList;
import java.util.List;
import javax.jws.WebService;
import com.dmotta.mule.labuno.mulelabuno.ICatalogoService;
import com.dmotta.mule.labuno.mulelabuno.bo.Producto;

@WebService(endpointInterface = "com.dmotta.mule.labuno.mulelabuno.ICatalogoService", serviceName = "productoCatalogService")
public class CatalogoServiceImpl implements ICatalogoService {

 private List listaProducto;

 public CatalogoServiceImpl() {
   listaProducto = new ArrayList();
   listaProducto.add(new Producto("100", "Nexus 4", "LG", " Tablet Google Nexus 4"));
   listaProducto.add(new Producto("101", "Nexus 7", "ASUS", " Tablet Google Nexus 7"));
   listaProducto.add(new Producto("102", "Nexus 10", "SAMSUNG", " Tablet Google Nexus 10"));
 }

 @Override
 public List listarProductos() throws Exception {
   return listaProducto;
 }

 @Override
 public Producto getDetalleProducto(String productoId) throws Exception {
   Producto prod = new Producto();
   for (Producto producto : listaProducto) {
     if (productoId.equals(producto.getId())) {
       prod = producto;
     }
   }
   return prod;
 }

}


5.-  Editar el archivo de configuración de Mule, en este lab se llamará LabUno.xml (por default es mule-config.xml)



6.- Asimismo, Mule genera de manera automatica el archivo mule-deploy.properties

#Mon Feb 25 12:11:42 COT 2013
redeployment.enabled=true
encoding=UTF-8
domain=default
config.resources=LabUno.xml



7.- Finalmente LabUno.mflow, quedaria de la siguiente manera:



8.- Clic derecho : Run As > Mule Application
.
.
INFO  2013-02-25 16:33:37,939 [[labuno].config.change.1.thread.1] org.mule.module.management.agent.JmxAgent: Registered Endpoint Service with name: Mule.labuno:type=Endpoint,service="WebServiceFlow",connector=connector.http.mule.default,name="endpoint.http.localhost.8080.services.ICatalogoService"
INFO  2013-02-25 16:33:37,940 [[labuno].config.change.1.thread.1] org.mule.module.management.agent.JmxAgent: Registered Connector Service with name Mule.labuno:type=Connector,name="connector.http.mule.default.1"
INFO  2013-02-25 16:33:37,941 [[labuno].config.change.1.thread.1] org.mule.DefaultMuleContext:
**********************************************************************
* Application: labuno                                                *
* OS encoding: Cp1252, Mule encoding: UTF-8                          *
*                                                                    *
* Agents Running:                                                    *
*   Clustering Agent                                                 *
*   JMX Agent                                                        *
**********************************************************************
INFO  2013-02-25 16:33:37,942 [[labuno].config.change.1.thread.1] org.mule.module.launcher.DeploymentService:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ Started app 'labuno'                                     +
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

9.- Consumir el  servicio usando soapUI:



  • Primer Request: getDetalleProducto


  • Segundo Request: listarProductos

Referencias:


Si hay algo que se me paso  no documentarlo, comentar abajo. Espero que sirva de ayuda a los que se estan iniciando  con Mule ESB