Trabajamos no solo para producir, sino para dar valor al tiempo.
Eugène Delacroix

Web Services – Primeros pasos con Eclipse – Generar Cliente Servicio Web

Ya hemos publicado nuestro servicio web en un servidor. Ahora queremos generar un cliente que consuma este servicio.

Para ello utilizaremos las mismas herramientas descritas en la entrada sobre la generación del servicio web, y el fichero descriptor del contrato que se generó, HolaMundo.wsdl.

Generamos el cliente Servicio Web

Proyecto holamundoWSClienteNormalmente el cliente y el servidor estarán en distintas máquinas. Por eso crearemos un nuevo proyecto web dinámico, holamundoWSCliente. Introducimos las librerías que necesitamos y el fichero del contrato del servicio, HolaMundo.wsdl (yo lo meteré en una carpeta "doc").

Nos situamos sobre el fichero descriptor del contrato (HolaMundo.wsdl) y seleccionamos "Botón Derecho > Web Services > Generate Client". 

Se nos genera automáticamente las siguientes clases dentro del mismo paquete (es.lycka.holamundoWS.webservices.impl) que la implementación del servicio (HolaMundoImpl):

  • HolaMundoImpl
  • HolaMundoImplProxy
  • HolaMundoImplService
  • HolaMundoImplServiceLocator
  • HolaMundoImplSoapBindingStub

Consumir el servicio web

Generamos una clase cliente de este servicio web que acabamos de crear. Por ejemplo en un nuevo paquete es.lycka.holamundoWS.clientes creamos una clase HolaMundoCliente. Esta clase será muy simple :

package es.lycka.holamundoWS.clientes;

import es.lycka.holamundoWS.webservices.impl.HolaMundoImpl;

import es.lycka.holamundoWS.webservices.impl.HolaMundoImplServiceLocator;

public class HolaMundoCliente {

      public static void main(String[] args) {

            try {

                  HolaMundoImplServiceLocator holaMundoWSServiceLocator = new HolaMundoImplServiceLocator ();

                  HolaMundoImpl holaMundoWS = holaMundoWSServiceLocator.getHolaMundoImpl();

                  String resultado = holaMundoWS.getSaludoLycka("Jero");

                  System.out.println("resultado: " +resultado);

            } catch (Exception e) {

                  e.printStackTrace();

            }

      }

} 

Ejecutamos esta clase (con el servidor iniciado donde esté desplegado el servicio, y con conectividad entre las máquinas cliente y servidor) y en la consola deberíamos de ver :

resultado: Lycka te saluda, Jero.

Es tan bonito lo simple !

Ver también

También te puede interesar:

12 Comentarios hasta el momento »

  1. garbage5 dijo

    11 de July del 2008 a las 8:19 pm

    Saludos chavales, me ha agradado mucho mini tutorial.

    Aca donde trabajo, utilizan como IDE el Rational Application Development, y como server el WAS de WebSphere.

    Espero lanzen algunos tutoriales para implementar web services en WAS.

  2. Manuel dijo

    28 de November del 2008 a las 10:57 am

    Hola, muchas gracias por el minitutorial, pero me ocurre el siguiente error:

    java.lang.IncompatibleClassChangeError: Implementing class

    al instanciar el Locator (te dejo el código):

    *****************************************
    ServicioConsultaServiceLocator servicioConsultaLocator = new ServicioConsultaServiceLocator();
    servicioConsultaLocator.setServicioConsultaEndpointAddress(Constantes.WS_END_POINT);

    ServicioConsulta servicioConsulta = servicioConsultaLocator.getServicioConsulta();

    String xml = servicioConsulta.consultar(denominacion, actividad, municipio, provincia, usuario, password);

  3. Web Services - Primeros pasos con Eclipse - Generar Servicio Web | Lycka Bonita dijo

    2 de December del 2008 a las 9:28 am

    [...] Web Services – Primeros pasos con Eclipse – Generar Cliente Servicio Web [...]

  4. Web Services - Integrar los clientes en Spring | Lycka Bonita dijo

    2 de December del 2008 a las 9:30 am

    [...] sabemos cómo publicar un servicio web y cómo construir un cliente que consuma dicho servicio partiendo del fichero descriptor del [...]

  5. Nacho dijo

    16 de July del 2009 a las 11:47 am

    Hola, está muy bien tu tutorial y me ha servido de ayuda, pero me da un error a la hora de hacer la llamada hacia el servicio desde el cliente.

    No sé si será un problema de conectividad o que, el caso es que con el Test WebServicesExplorer me funciona bien, es a la hora de llamarlo desde Java donde me da el error.

    Dejo el código:

    String endpointURL=”http://www.test.generali.es/sin_mobilInServWeb/services/SinMobilInHandler”;

    System.out.println(“Hemos llegado hasta aquí”);

    System.out.println(“Hemos llegado hasta aquí”);

    SinMobilInHandlerService WSService = new SinMobilInHandlerServiceLocator ();

    SinMobilInHandler WS = WSService.getSinMobilInHandler();

    WS.executeAceptarEncargo(urgenteReq);
    SinMobilInHandlerProxy WSProxy= new SinMobilInHandlerProxy();
    System.out.println(“Hemos llegado hasta aquí”);
    WSProxy.setEndpoint(endpointURL);

    urgenteRes= WSProxy.executeAceptarEncargo(urgenteReq);

    En esta última línea me da el error.

    Cuando pruebo este mismo código sobre un tomcat arrancado sobre mi máquina funciona bien.

    Muchas gracias.

  6. Nacho dijo

    16 de July del 2009 a las 3:58 pm

    Hola

    He investigado un poco y ahora el error que me da es el siguiente:

    AxisFault
    faultCode: {http://xml.apache.org/axis/}HTTP
    faultSubcode:
    faultString: (401)Unauthorized
    faultActor:
    faultNode:
    faultDetail:
    {}:return code: 401

    {http://xml.apache.org/axis/}HttpErrorCode:401

    (401)Unauthorized
    at org.apache.axis.transport.http.HTTPSender.readFromSocket(HTTPSender.java:744)
    at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:144)
    at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
    at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
    at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
    at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
    at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
    at org.apache.axis.client.Call.invoke(Call.java:2767)
    at org.apache.axis.client.Call.invoke(Call.java:2443)
    at org.apache.axis.client.Call.invoke(Call.java:2366)
    at org.apache.axis.client.Call.invoke(Call.java:1812)
    at es.generali.sin.b2b.mobil.input.SinMobilInHandlerSoapBindingStub.executeAceptarEncargo(SinMobilInHandlerSoapBindingStub.java:278)
    at es.generali.sin.b2b.mobil.input.Prueba.main(Prueba.java:92)
    Hemos llegado hasta aquí
    null

    Puede ser un problema de login y password a la hora de entrar a la web remota?

    Gracias.

  7. Alguien que quiere hacer un webservice dijo

    24 de July del 2009 a las 12:55 am

    Asi no se hace un webservice, es una burla lo que posteaste para quien realmente está entrampado con uno !!!

  8. yoyoooyoy dijo

    24 de July del 2009 a las 10:18 am

    Hombre, yo lo veo como una guía básica para empezar. Nada de coreografía, nada de arquitectura, pero sí que funciona y es un buen comienzo.

    A mí personalmente y supongo que a todos los que lean esta entrada, nos encantaría que aportases algo :)

  9. The Neko dijo

    15 de September del 2009 a las 4:27 pm

    Buen comienzo, agarrando confianza con ejemplos como este, despues se empiezan a ampliar conocimientos por cuenta propia… y al que no le guste, bien puede ir a la pagina de sun y bajarse el tutorial que ahi proporcionan.

  10. Carlos dijo

    16 de November del 2009 a las 8:29 pm

    para “Alguien que quiere hacer un webservice” te tengo un desafío :D ya que te estás poniendo así de buenas a primeras, por qué no me ayudas a comunicar un WS hecho en PHP con NuSOAP que tiene definidos tipos complejos del tipo SOAP-ENC:Array?

    A ver si puedes generar el cliente en java ya que tú sabes del tema ;)

  11. yoyoooyoy dijo

    18 de November del 2009 a las 8:21 pm

    @The Neko, gracias.

    @Carlos, joer rizando el rizo ;) suerte con este monstruo, dividiendo vencerás !

  12. angy dijo

    25 de January del 2012 a las 5:17 pm

    Hola.

    Buen tutorial me ha salvado la vida, ya que he revisado en otros tutoriales y al generar el cliente me causaba bastantes conflictos.

    Este fue sencillo y facil de hacer.. :)

Comentarios RSS · TrackBack URI

Dejanos tu Comentario

Nombre: (Requerido)

E-Mail: (Requerido)

Sitio WEB:

Comentario:

Comenta