La historia de mis desventuras

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

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.

9 comentarios to “Consumir un Web Service hecho en Java desde .Net”

  1. Andrey said

    Buenos esos ejemplos compañero, me gusta que también escribas sobre productos de empresas diferentes a Microsoft. Para que la gente entienda que no es SOLO eso.
    Saludos.

  2. Angelo said

    Etimado,muy bueno tu post
    Pero quisiera saber si sabes como consumir un servicio web teniendo seguridad TokenUserName y el ejemplo de codigo para accerder a ese web services,teniendo tmb un secret key y un public key.
    se agradece tu resuesta.Gracias

  3. Joel said

    estimado, y que pasa si el servicio web esta creado con credenciales, usuario y password? podrias hablarme de eso, ya que tengo el problema de que no lo puedo consumir, y con soap ui 4.5, me dice que el tipo de autorizacion es Premptive….

    saludos y gracias

    • Siendo el cliente .NET y el Servicio en Java?

      • Joel said

        exactamente estimado, servicio web(JAVA) y yo lo consumo con otro servicio web (.NET). el servicio tiene credenciales, (cuando hago la referencia web), y a continuacion cuando quiero usar los metodos tambien me pide credenciales.

    • Pues mira, tal vez te baste sólo con especificar las credenciales a nivel del proxy. Tal cual está en mi ejemplo, en el lado del cliente pones:
      proxy.ClientCredentials.UserName.UserName = “NombreUsuario”;
      proxy.ClientCredentials.UserName.UserPassword = “Password”;

      Todo mi ejemplo quedaría así:

      static void Main(string[] args)
      {
      DiferenciasHorariasClient proxy = new DiferenciasHorariasClient();
      proxy.ClientCredentials.UserName.UserName = “NombreUsuario”;
      proxy.ClientCredentials.UserName.UserPassword = “Password”;
      float resultado = proxy.CalcularDiferenciaEnHoras(21, 37);
      Console.WriteLine(“La diferencia es: {0}”, resultado.ToString());
      Console.ReadLine();
      }

    • Ok, me cuentas cualquier cosa.

  4. I’ve been surfing online more than 3 hours today, yet I never found
    any interesting article like yours. It’s pretty worth enough for me.
    In my opinion, if all web owners and bloggers made good content
    as you did, the net will be a lot more useful than ever before.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: