Implementación de clientes de servicios web JAX-WS estáticos

Puede desarrollar clientes de servicios web basados en los servicios web para la especificación Java™ EE (Java Platform, Enterprise Edition) y el modelo de programación JAX-WS (API de Java para servicios web XML).

Antes de empezar

Best practice Best practice: IBM® WebSphere Application Server soporta el modelo de programación JAX-WS (Java API for XML-Based Web Services) y el modelo de programación JAX-RPC (Java API for XML-based RPC). JAX-WS es la siguiente generación del modelo de programación de servicios que amplía la base proporcionada por el modelo de programación JAX-RPC. Con el modelo de programación JAX-WS estratégico, se simplifica el desarrollo de clientes y servicios web ya que se da soporte a un modelo de anotación basado en estándares. Aunque el modelo de programación JAX-RPC y las aplicaciones siguen recibiendo soporte, puede beneficiarse de la facilidad de implementación del modelo de programación JAX-WS para desarrollar nuevas aplicaciones y clientes de servicios web.bprac

Acerca de esta tarea

Desarrollo de clientes de servicios web según el modelo de programación de JAX-WS

Los clientes de servicios web que pueden acceder a servicios web JAX-WS, e invocarlos, se desarrollan de acuerdo con los servicios web para la especificación Java EE (Java Platform, Enterprise Edition). El servidor de aplicaciones da soporte a clientes de Enterprise JavaBeans (EJB), clientes de aplicaciones Java EE, archivos de JavaServer Pages (JSP) y servlets basados en el modelo de programación JAX-WS. Los clientes de servicios web basados en la especificación JAX-RPC pueden invocar servicios web basados en JAX-WS, si el archivo WSDL (Web Services Description Language) cumple el perfil Web Services-Interoperability (WS-I) Basic Profile.

El modelo de programación del cliente JAX-WS da soporte a ambas API, la de Cliente de asignación y la de cliente de proxy dinámico. La API Dispatch client es un modelo de programación de cliente dinámico, mientras que el modelo de programación de cliente estático para JAX-WS es el cliente de proxy dinámico. Los clientes Dispatch y del proxy dinámico permiten la invocación síncrona y asíncrona de los servicios web JAX-WS.

El cliente de proxy dinámico invoca un servicio web basándose en la interfaz de punto final de servicio (SEI) que se proporciona. Las instancias de proxy dinámico de JAX-WS sacan partido de la función de proxy dinámico en el entorno básico JRE (Java Runtime Environment) Versión 6. Debe empezar con un archivo WSDL si está desarrollando un cliente estático.

Por contra, la API del cliente Dispatch, javax.xml.ws.Dispatch, es un cliente orientado a los mensajes XML cuyo uso está indicado para desarrolladores de XML avanzados que prefieren utilizar construcciones XML. La API Dispatch puede enviar datos en la modalidad PAYLOAD o MESSAGE. Cuando se utiliza la modalidad PAYLOAD, el cliente Dispatch sólo es responsable de proporcionar los contenidos de soap:Body y JAX-WS incluye la carga de datos en un elemento soap:Envelope. Cuando se utiliza la modalidad MESSAGE, el cliente Dispatch es responsable de proporcionar todo el sobre SOAP. No es necesario un archivo WSDL si va a desarrollar un cliente dinámico.

Para desarrollar clientes de servicios web basándose en el modelo de programación JAX-WS, debe determinar el modelo de cliente que mejor se adapta a las necesidades de la aplicación del servicio web. Si desea que el cliente de servicios web invoque el servicio según las interfaces de punto final de servicio con un proxy dinámico, utilice la API Dynamic Proxy para desarrollar un cliente de servicios web estáticos. Una vez creados los proxies, la aplicación cliente puede invocar métodos en estos proxies, simplemente, como una implementación estándar de las interfaces del punto final de servicio. Sin embargo, si desea trabajar directamente con XML y no con una abstracción de Java y trabajar con la estructura del mensaje o con la estructura de la carga de datos del mensaje, utilice la API Dispatch para desarrollar un cliente de servicio web dinámico. Consulte la información sobre cómo implementar clientes de servicios web JAX-WS dinámicos para obtener información acerca de cómo desarrollar clientes de servicios web dinámicos.

Complete esta tarea para desarrollar un cliente de servicios web estático a partir de un archivo WSDL.

Para invocar servicios web de forma asíncrona utilizando un cliente JAX-WS estático o dinámico, determine si desea implementar el modelo de retorno de llamada o de sondeo. Lea sobre cómo invocar servicios web JAX-WS de forma asíncrona si desea más información respecto a la implementación asíncrona de la devolución de llamada o del sondeo para clientes de servicio web. El modelo de programación de JAX-WS para el servicio y el cliente utiliza anotaciones para representar la misma información que se proporcionó en un enlace de cliente JAX-RPC de una forma neutral respecto al proveedor.

Clientes de servicios web gestionados y no gestionados JAX-WS

El servidor de aplicaciones da soporte a clientes de servicios web gestionados y no gestionados cuando se utiliza el modelo de programación JAX-WS:

  • Clientes gestionados

    Los servicios web para los clientes Java EE se definen mediante la especificación JSR (Java Specification Requirements) 109 y se conocen como clientes gestionados porque se ejecutan en un contenedor Java EE. Estos clientes se empaquetan como archivos EAR (Enterprise Archive) y contienen componentes que actúan como solicitantes de servicio. Estos componentes están formados por una aplicación de cliente Java EE, un componente web como por ejemplo un servlet o páginas JavaServer (JSP), o Enterprise JavaBeans (EJB) de sesión. Los clientes gestionados de servicios web utilizan las API JSR 109 y la información de despliegue para buscar e invocar un servicio web.

    Para los clientes gestionados, puede utilizar la búsqueda JNDI (Java Naming and Directory Interface) para realizar la búsqueda de servicios o puede utilizar anotaciones para insertar instancias de un puerto o servicio JAX-WS. Lea acerca de cómo configurar Web Services Security: de señal UserName, de firma digital y de señal LTPA (Lightweight Third-Party Authentication). El código siguiente es un ejemplo de una búsqueda de contexto compatible con JSR 109:

    InitialContext ctx = new InitialContext();
        FredsBankService service
    =(FredsBankService)ctx.lookup("java:comp/env/service/FredsBankService");
        FredsBank fredsBank = service.getFredsBankPort();
        long balance = fredsBank.getBalance();  

    Puede utilizar la anotación @WebServiceRef o @Resource para declarar clientes gestionados. El uso de estas anotaciones hace que el tipo especificado por la anotación se enlace en el espacio de nombres JNDI. Cuando las anotaciones se utilizan en un campo o un método, resultan en la inclusión de una instancia de puerto o servicio JAX-WS. Puede utilizar estas anotaciones en lugar de declarar entradas de service-ref en el descriptor de despliegue del cliente. También puede utilizar el descriptor de despliegue del cliente para declarar clientes gestionados de JAX-WS, de modo parecido a los clientes gestionados de JAX-RPC. También puede utilizar el descriptor de despliegue para alterar temporalmente y aumentar la información especificada por las anotaciones @WebServiceRef y @Resource. Utilice la anotación @WebServiceRef para enlazar e inyectar una instancia de puerto o servicio JAX-WS. Sólo puede utilizar la anotación @Resource para enlazar una instancia de servicio JAX-WS. Sólo se da soporte al uso de cualquiera de estas anotaciones para declarar los clientes gestionados de JAX-WS en determinados tipos de clases. Entre algunos de estos tipos de clases se incluyen las clases de implementación de punto final JAX-WS, las clases de manejador JAX-WS, las clases de enterprise bean y las clases de servlet.

    El ejemplo siguiente utiliza la anotación @WebServiceRef para obtener una instancia de FredsBank:
    @WebServiceRef(name=”service/FredsBankPort”, value=FredsBankService.class)
    FredsBank fredsBank;
    Ahora dentro de la clase, no se ha de inicializar el campo fredsBank. Puede utilizar este campo directamente:
    long balance = fredsBank.getBalance();
    También puede utilizar la anotación @WebServiceRef para obtener instancias de clases de servicio JAX-WS; por ejemplo:
    @WebServiceRef(name=”service/FredsBankService”)
    FredsBankService service;
    Ahora dentro de la clase, no se ha de inicializar el campo service. Puede utilizar este campo directamente:
     FredsBank fredsBank = service.getFredsBankPort(); long balance = fredsBank.getBalance();
    Además de la anotación @WebServiceRef, puede utilizar la anotación @Resource para obtener una instancia de las clases de servicio JAX-WS; por ejemplo:
    @Resource(name=”service/FredsBankService”, type=FredsBankService.class)
    FredsBankService service;
    Del mismo modo que con la anotación @WebServiceRef, puede utilizar el campo service sin instancias; por ejemplo:
    FredsBank fredsBank = service.getFredsBankPort(); long balance = fredsBank.getBalance();
    Puede utilizar las anotaciones @Resource o @WebServiceRef en una clase. En este caso, JNDI se debe utilizar para buscar el servicio o el puerto JAX-WS; por ejemplo:
    @WebServiceRef(name=”service/FredsBankService”, type=FredsBankService”)
    public class J2EEClientExample {
    		…
    		…
    
    		public static void main(String[] args) {
    			…
    			…
    		InitialContext ctx = new InitialContext();
    FredsBankService service =(FredsBankService)ctx.lookup("java:comp/env/service/FredsBankService");
        	FredsBank fredsBank = service.getFredsBankPort();
        	long balance = fredsBank.getBalance();  
    	}
    	…
    }

    Para obtener más información acerca de cómo utilizar las anotaciones @WebServiceRef y @Resource, consulte las especificaciones de JSR-109, JSR-224, JSR-250 y Java Platform Enterprise Edition 5 (Java EE 5).

    Como se ha mencionado antes, cuando utilice anotaciones o JNDI para obtener instancias de puertos y servicios JAX-WS, no cree instancias de los objetos devueltos. Si esto se lleva a cabo, el resultado sería el de una instancia de cliente no gestionado. El ejemplo siguiente muestra un ejemplo de un uso incorrecto:
    @WebServiceRef(name=”service/FredsBankService”)
    FredsBankService service;
    service = new FredsBankService(); // el cliente pasa a ser no gestionado.

    Para los clientes JAX-WS gestionados que se declaran mediante la anotación @WebServiceRef o @Resource y para los clientes que se declaran utilizando las entradas service-ref del descriptor de despliegue del cliente, puede utilizar la consola administrativa para proporcionar el URL de punto final que utiliza el cliente. Este URL especificado altera temporalmente el URL de punto final del documento WSDL que utiliza el cliente. Para obtener más información sobre cómo especificar este URL de punto final, consulte la documentación Configuración de los enlaces de cliente de servicios web.

  • Clientes no gestionados

    Los clientes de Java Platform, Standard Edition (Java SE 6) que utilizan el entorno de ejecución JAX-WS para invocar servicios web y no se ejecutan en un contenedor Java EE se conocen como clientes no gestionados. Un cliente de servicios web no gestionado es un cliente Java autónomo que puede inspeccionar directamente un archivo WSDL y formular las llamadas al servicio web utilizando las API JAX-WS. Estos clientes se empaquetan como archivos JAR que no contienen ninguna información de despliegue.

A partir de WebSphere Application Server versión 7.0 y posterior, los módulos de aplicación Java EE 5 (los módulos de la aplicación web de la versión 2.5 o superior, o los módulos EJB de versión 3.0 o superior) se examinan para ver anotaciones para identificar los servicios y clientes JAX-WS. Sin embargo, los módulos de aplicaciones anteriores a Java EE 5 (módulos de aplicaciones web versión 2.4 o anteriores o módulos EJB versión 2.1 o anteriores) no se exploran para ver si contienen anotaciones JAX-WS, de manera predeterminada, por razones de rendimiento. En el paquete de características de la versión 6.1 para servicios Web, el comportamiento predeterminado es explorar los módulos de aplicaciones Web anteriores a Java EE 5 para identificar los servicios JAX-WS y explorar los módulos de aplicaciones web anteriores a Java EE 5 y los módulos EJB en busca de clientes de servicio durante la instalación de aplicaciones. Puesto que el comportamiento predeterminado de WebSphere Application Server Versión 7.0 y posteriores es no explorar módulos anteriores a Java EE 5 en busca de anotaciones durante la instalación de aplicaciones o el arranque de servidor, para conservar la compatibilidad con los releases anteriores del paquete de características, deberá configurar la propiedad UseWSFEP61ScanPolicy en META-INF/MANIFEST.MF de un archivo archivador web (WAR) o un módulo EJB o definir la propiedad personalizada de máquina virtual Java, com.ibm.websphere.webservices.UseWSFEP61ScanPolicy, en los servidores para solicitar la exploración durante la instalación de aplicaciones y el arranque de servidor. Para obtener más información sobre la exploración de anotaciones, consulte la información sobre las anotaciones de JAX-WS.

Procedimiento

  1. Obtenga el documento WSDL (Web Services Description Language) para el servicio web al que desea acceder.

    Puede obtener el archivo WSDL del suministrador de servicio mediante correo electrónico, mediante un URL (Uniform Resource Locator) o consultarlo en un registro UDDI (Universal Description, Discovery and Integration).

  2. Desarrolle artefactos de cliente JAX-WS a partir de un archivo WSDL.
    1. Para aplicaciones de servicios web JAX-WS estáticos que utilizan la API del proxy dinámico, desarrolle artefactos cliente a partir de un archivo WSDL utilizando el mandato wsimport.
    2. (opcional) Desarrollo descriptores de despliegue de cliente JAX-WS. Opcionalmente, puede utilizar los descriptores de despliegue del cliente application-client.xml, web.xml o ejb-jar.xml, a fin de aumentar o alterar temporalmente la información de enlaces contenida en las anotaciones para servicios web JAX-WS.
  3. Termine la implementación del cliente.

    Escriba el código de la aplicación cliente que se utilizará para invocar el servicio web.

    Consulte el Capítulo 4 de la especificación JSR 109. Para obtener una lista completa de los estándares y las especificaciones a los que se da soporte, consulte las especificaciones y la documentación de la API de los servicios Web.
    Avoid trouble Avoid trouble:
    • Si la aplicación cliente se va a instalar en un servidor, debe hallarse en un módulo WAR o módulo EJB. No se exploran los archivos de bibliotecas compartidas para clientes JAX-WS. Por lo tanto, un archivo JAR de biblioteca compartida no se puede utilizar como contenedor para una aplicación cliente.
    • Si la aplicación cliente crea un número de hebras en el cliente JSR 109, los metadatos, incluida la configuración de WebSphere Application Server, no se copian en la hebra, y no se llama al manejador de seguridad global.
    gotcha
  4. (Opcional) Ensamble un archivo (JAR) de archivador Java de cliente habilitado por servicios web en un archivo archivador de empresa (EAR). Lleve a cabo este paso si desarrolla un cliente de servicios web JAX-WS que se ejecuta en el contenedor cliente de Java EE.
  5. (Opcional) Ensamble un archivo WAR (Web Application Archive) de cliente habilitado para servicios web en un archivo EAR (Enterprise Archive). Lleve a cabo este paso si desarrolla un cliente de servicios web JAX-WS que se ejecuta en el contenedor web de Java EE.
  6. (Opcional) Despliegue la aplicación cliente de servicios web. Lleve a cabo este paso para desplegar un cliente de servicios web JAX-WS que se ejecuta en el contenedor cliente de Java EE.
  7. Pruebe la aplicación de cliente habilitado para servicios web. Puede probar un archivo JAR de cliente no gestionado o una aplicación de cliente gestionado.

Resultados

Habrá creado y probado una aplicación cliente de servicios web.

Qué hacer a continuación

Después de que desarrolla un cliente de aplicaciones de servicios web y se enlaza estáticamente el cliente, el punto final de servicio que utiliza la implementación es aquél que se identifica en el archivo WSDL que ha utilizado durante el proceso de desarrollo. Durante o después de la instalación de la aplicación de servicios web, quizá desee cambiar el punto final de servicio. Para los clientes gestionados, puede cambiar el punto final con la consola administrativa o con la herramienta del script wsadmin. Para clientes de servicios web JAX-WS no gestionados, puede cambiar el punto final desde la aplicación cliente.

Adicionalmente, puede personalizar los servicios web implementando extensiones en el cliente de servicio web. Algunos ejemplos de estas extensiones son el envío y la recepción de valores en cabeceras SOAP o el envío y la recepción de cabeceras de transporte HTTP o JMS (Java Message Service). Para obtener más información acerca de estas extensiones, lea acerca de la implementación de extensiones en los clientes de servicios web.


Icon that indicates the type of topic Task topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_devwbsjaxwsclient
File name: twbs_devwbsjaxwsclient.html