Uno de los principales problemas que pense que iba a tener en el proyecto del curso era la interoperabilidad entre java y .net, ya que al tener dos lenguajes de programación diferentes asumía que algo de complejo tenía que ser lograr comunicarlos, pero una vez investigado me dí con la sorpresa de que no es nada dificil como pense, acontinuación haré un ejemplo de como un servicio web hecho en java es consumido desde .net.
En primer lugar, definiremos nuestro método en java que será expuesto atravez del servicio web y este nos deberá devolver una lista de articulos, cabe recalcar que este ejemplo no está en servicios REST sino en SOAP.
public ArrayList<Producto> ObtenerListaProductos( @WebParam(name = "IN01CODEMP") String IN01CODEMP, @WebParam(name = "IN01AA") String IN01AA, @WebParam(name = "IN01KEY") String IN01KEY, @WebParam(name = "IN01DESLAR") String IN01DESLAR, @WebParam(name = "vcodigoAlmacen") String vcodigoAlmacen, @WebParam(name = "vMes") String vMes) { MySqlDBConn con = new MySqlDBConn(); ArrayList<Producto> lista = new ArrayList<Producto>(); CallableStatement cs = null; String storeProcedure = "{CALL usp_ControlPedido_Listarin01arti(?,?,?,?,?,?)}"; try { System.out.println("Prepara Procedure"); cs = con.getConnection().prepareCall(storeProcedure); cs.setString(1, IN01CODEMP); cs.setString(2, IN01AA); cs.setString(3, IN01KEY); cs.setString(4, IN01DESLAR); cs.setString(5, vcodigoAlmacen); cs.setString(6, vMes); // System.out.println("Antes de Ejecutar Procedure"); ResultSet res = cs.executeQuery(); // System.out.println("Ejecuto Procedure"); Producto entidad = null; while (res.next()) { // System.out.println("Llenando Lista"); entidad = new Producto(); entidad.setIN01KEY(res.getString(1)); entidad.setIN01DESLAR(res.getString(2)); entidad.setIN01UNIMED(res.getString(3)); entidad.setIN04CODALM(res.getString(4)); entidad.setIN04STOCK(res.getString(5)); lista.add(entidad); } res.close(); cs.close(); } catch (SQLException e) { System.out.println(e); } return lista; }
Una vez implementado el servicio web en Java deberemos correrlo y obtener la ruta donde lo estamos publicando, ya sea en el tomcat, jboss o el mismo servidor del SpringToolSuite.
Un vez que tenemos la ruta creamos nuestro proyecto en .net, desde el cuál vamos a consumir el servicio web y seguiremos los siguientes pasos
Luego de haber realizado los pasos anteriores procederemos a invocar el arraylist desde el mismo código en c#
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using WebApplication1.ServicioWebJava; namespace WebApplication1 { public partial class InvocarWebService : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { ConsumirWebService(); } } protected void ConsumirWebService() { try { using (ServicioWebJava.MelchorServiceImplService servicio = new MelchorServiceImplService()) { /*El objeto producto viene del servicio web en java, cabe recalcar que apesar de devolver un arraylist desde el servicio cuando es interpretado atravez de .net lo recibo como un arreglo de objetos que luego debe ser convertido en una lista para poder mostrarlo en la grilla */ producto[] array = servicio.ObtenerListaProductos("01", "2012", "", "", "03", "01"); if (array != null) { grvDatos.DataSource = array.ToList(); grvDatos.DataBind(); } } } catch (Exception ex) { throw ex; } } } }
Finalmente, una vez codificado todo lo necesario para invocar el servicio corremos la aplicación y nuestro resultado será el listado de todos los items devueltos a traves del web service
Y así de fácil resulto ser la invocación de un servicio web en java desde .net, cabe recalcar que está es la manera más fácil, ya que la grilla está aceptando tipo de datos anónimos, es decir dinámicos que son creados por el web service.
No hay comentarios:
Publicar un comentario