La historia de mis desventuras

Palabras más, palabras menos sobre desarrollo de software.

Posts Tagged ‘Interoperabilidad’

Consumir un Web Service hecho en Java desde .Net

Posted by Jhonny López Ramírez en 27 noviembre 2009

microsoft__net_logo 1199737507331wikia-logodn java-logo

La interoperabilidad entre diferentes plataformas de desarrollo es, cada vez más, un hecho. Aunque no es nueva, la arquitectura orientada a servicios (SOA) es parte de ese planteamiento. Voy a exponer en este artículo lo sencillo que resulta integrar la plataforma .Net con Java a través de un servicio web construido en esta última. Aplica en diversos escenarios, como por ejemplo, casos en los que gran parte de la lógica se encuentra en aplicaciones Java ya desarrolladas que se intentan o pretenden migrar a .Net o en casos de clientes delgados que corran bajo plataformas Windows contra servidores con otros sistemas operativos. Es decir, nos sobran los motivos.

Prerrequisitos

Vamos a trabajar este ejemplo con las siguientes herramientas:

  • NetBeans JDK 6.7.1. Puede descargarlo aquí.
  • Java SE JDK. Puede descargarlo aquí.
  • Visual Studio 2008 Service Pack 1. Puede descargar un trial aquí.
Creando un servicio web en Java con NetBeans

En primer lugar crearemos el servicio web en Java. Para hacerlo, en NetBeans haremos clic en Archivo –> Proyecto nuevo, después de lo cual aparecerá el siguiente diálogo:

image

Allí seleccionaremos la categoría Java Web y a continuación Web Application. Haremos clic en Siguiente. Viene el segundo paso del asistente: definiremos el nombre de nuestra aplicación y la ubicación, entre otros aspectos. En este ejemplo, nuestra aplicación llevará por nombre DiferenciaHoraria:

image

Clic en Siguiente. En el siguiente paso escogeremos el servidor y la versión específica de Java EE. En este caso usaremos GlassFish v2.1 y Java EE 5, respectivamente:

image

Clic en Terminar. NetBeans nos creará a nosotros un proyecto con una estructura similar a la que vemos en la siguiente imagen:

image

A continuación sobre nuestra aplicación web haremos clic derecho y del menú contextual seleccionaremos Nuevo –> Web service, como se muestra en la siguiente imagen:

image

En el cuadro de diálogo resultante asignaremos un nombre a la clase contenedora del servicio y un paquete:

image

Clic en Terminar. Reemplazaremos el código de nuestro servicio web con el siguiente:

 

package miempresa.misolucion.misservicios;

import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import java.util.*;

@WebService()
public class DiferenciasHorarias {

@WebMethod
public float CalcularDiferenciaEnHoras(@WebParam(name="hora")int prmHora,
@WebParam(name="minutos") int prmMinuto)
{
float horaRecibida = prmHora + (prmMinuto / 100);

Calendar calendario = new GregorianCalendar();
int horas = calendario.get(Calendar.HOUR_OF_DAY);
int minutos = calendario.get(Calendar.MINUTE);

float horaActual = horas + (minutos / 100);

float resultado = horaRecibida - horaActual;

return resultado;
}

}
Procederemos a hacer el deploy del servicio web. Para ello hacemos clic derecho en la aplicación y seleccionamos la opción Deploy.
image
Luego ejecutaremos en prueba nuestro web service:
image
 
De la ventana del navegador que se despliega tomaremos la ruta así: http://localhost:8080/DiferenciaHoraria/DiferenciasHorariasService, sin el sufijo ?Tester.
 
Creando el cliente en .Net

Como este blog está orientado al desarrollo en .Net asumiré que sabemos crear una aplicación de consola por lo que iré omitiendo cosas:

image

Esta aplicación se llamará ClienteDiferenciaHoraria. Lo que haremos a continuación será establecer la conexión con el servicio web. Para ello agregaremos una nueva referencia de servicio como se ve en la siguiente imagen (para acceder a este menú haremos clic derecho sobre el proyecto):

image

En el cuadro de diálogo desplegado escribiremos la ruta del servicio (tomada anteriormente del navegador después de la puesta en prueba) y agregaremos el sufijo ?wsdl. Haremos clic en Ir y asignaremos un nombre a la referencia (en este caso DiferenciasHorariasServiceReference):

image

Visual Studio generará un cliente para el servicio web, como podemos ver en el explorador de objetos:

image

Finalmente haremos, desde nuestro código .Net, el llamado al servicio así:

static void Main(string[] args)
{
DiferenciasHorariasClient proxy = new DiferenciasHorariasClient();

float resultado =
proxy.CalcularDiferenciaEnHoras(21, 37);

Console.WriteLine("La diferencia es: {0}", resultado.ToString());
Console.ReadLine();
}

Ejecutaremos nuestra aplicación y veremos el resultado de la integración entre estas dos plataformas de desarrollo. Espero que sea útil para alguien.

El código usado aquí es meramente ilustrativo y no se trata de una solución real.

Posted in Desarrollo de software | Etiquetado: , , | 9 Comments »