Desarrollo de descriptores de despliegue para un cliente JAX-WS
Descriptores de despliegue son archivos de texto estándar con formato XML y empaquetados en una aplicación de servicios web. Opcionalmente puede utilizar el descriptor de despliegue de referencia de servicio (JSR 109) de la especificación de Servicios Web para Java™ Platform, Enterprise Edition (Java EE) para aumentar o alterar temporalmente los metadatos de aplicación especificados en las anotaciones dentro del cliente de servicios web JAX-WS (API de Java para servicios web basados en XML).
Antes de empezar
Primero debe generar los artefactos de cliente de servicios web desde un archivo del lenguaje de descripción de servicios web (Web Services Description Language - WSDL) utilizando el mandato wsimport.
Acerca de esta tarea
Puede añadir entradas service-ref en los descriptores de despliegue Java EE application-client.xml, web.xml o ejb-jar.xml. Una entrada service-ref representa una referencia a un servicio web que utiliza un componente Java EE en los contenedores web, EJB (Enterprise JavaBeans) o de cliente de aplicaciones. Una entrada service-ref tiene un nombre JNDI que se utiliza para buscar el servicio. La especificación de la entrada service-ref habilita las aplicaciones de cliente para localizar el servicio utilizando una búsqueda JNDI y también puede utilizar estas referencias de servicio para la incorporación de recursos.
Por cada entrada service-ref que se encuentre en uno de los descriptores de despliegue, el objeto de servicio correspondiente se enlaza al espacio de nombres de JNDI y, si se especifica, se incluye la información de puertos. El cliente JAX-WS podrá entonces realizar una búsqueda JNDI para recuperar un servicio JAX-WS o una instancia de puerto.
Cuando se define una service-ref que representa un servicio JAX-WS, utilice la subclase javax.xml.ws.Service generada por la herramienta wsimport como el valor de service-interface. Esta es la clase que contiene la anotación @WebServiceClient. Cuando define una service-ref que representa un puerto JAX-WS, el valor de service-interface aún es la subclase javax.xml.ws.Service generada por la herramienta wsimport y el valor de service-ref-type especifica la clase Interfaz de punto final de servicio (SEI) utilizada por el puerto. La clase SEI también se genera por wsimport, y se anota con la anotación @WebService.
Procedimiento
Resultados
Ahora puede utilizar las referencias de servicio que se definieron en el descriptor de despliegue dentro de su aplicación cliente. Además, puede utilizar los descriptores de despliegue para aumentar o alterar temporalmente la información especificada por las anotaciones @WebServiceRef o @Resource.
El elemento de descriptor de despliegue <lookup-name> es una novedad en Java EE 6 y se utiliza para hacer referencia indirectamente a una referencia de servicio ya definida. Cuando se utiliza el elemento <lookup-name>, sólo se puede especificar también el elemento <service-ref-name> y no se puede definir ningún otro elemento hijo de <service-ref>.
El siguiente ejemplo muestra una entrada service-ref en un archivo WEB-INF/web.xml que define una referencia a un servicio JAX-WS, así como una entrada service-ref en el mismo archivo web.xml que define una referencia indirecta a la primera entrada service-ref:
<service-ref>
<service-ref-name>service/ExampleService</service-ref-name>
<service-interface>com.ibm.sample.ExampleService</service-interface>
<service-ref-type>com.ibm.sample.ExampleServicePortType</service-ref-type>
<wsdl-file>WEB-INF/wsdl/ExampleService.wsdl</wsdl-file>
</service-ref>
<service-ref>
<service-ref-name>service/ExampleService2</service-ref>
<lookup-name>java:comp/env/service/ExampleService</lookup-name>
</service-ref>
Suponiendo que las entradas service-ref anteriores están definidas en el archivo WEB-INF/web.xml, la aplicación cliente puede realizar una búsqueda JNDI utilizando el nombre java:comp/env/service/ExampleService2, y el resultado será una referencia al servicio ExampleService definido en el documento WSDL WEB-INF/wsdl/ExampleService.wsdl, tal como se define en la primera service-ref.
Qué hacer a continuación
Complete la implementación de cliente escribiendo el código de la aplicación cliente que se utiliza para invocar el servicio web.