Desenvolvendo Descritores de Implementação para um Cliente JAX-WS
Descritores de implementação são arquivos de texto padrão, formatados usando XML e compactados em um aplicativo de serviços da Web. Opcionalmente é possível usar os Serviços da Web para o descritor de implementação de referência de serviço da especificação Java™ Platform, Enterprise Edition (Java EE) (JSR 109) para aumentar ou substituir metadados de aplicativo especificados em anotações dentro do cliente de serviços da Web Java API for XML-Based Web Services (JAX-WS).
Antes de Iniciar
Primeiro você deve gerar os artefatos do cliente dos serviços da Web a partir de um arquivo Web Services Description Language (WSDL) usando o comando wsimport.
Sobre Esta Tarefa
Você pode incluir entradas service-ref nos descritores de implementação application-client.xml, web.xml ou ejb-jar.xml Java EE. Uma entrada service-ref representa uma referência a um serviço da Web que é usado por um componente Java EE na web, Enterprise JavaBeans (EJB) ou contêineres de cliente de aplicativo. Uma entrada service-ref tem um nome de JNDI que é utilizado para consultar o serviço. A especificação da entrada service-ref permite aos aplicativos clientes localizar o serviço utilizando uma consulta JNDI, e você também pode usar essas referências de serviço para introdução de recurso.
Para cada entrada service-ref encontrada em um dos descritores de implementação, o objeto de serviço correspondente é ligado ao espaço de nomes JNDI e a informação de porta é incluída, se especificada. O cliente JAX-WS agora pode executar uma consulta JNDI para recuperar um serviço JAX-WS ou uma instância de porta.
Ao definir um service-ref que representa um serviço JAX-WS, use a subclasse javax.xml.ws.Service que é gerada pela ferramenta wsimport como o valor service-interface. Essa é a classe que contém a anotação @WebServiceClient. Ao definir um service-ref que representa uma porta JAX-WS, o valor service-interface ainda é a subclasse javax.xml.ws.Service subclass gerada pela ferramenta wsimport, e o valor service-ref-type especifica a classe service endpoint interface (SEI) usada pela porta. A classe SEI é também gerada por wsimport, e anotada com a anotação @WebService.
Procedimento
Resultados
Você agora pode usar as referências de serviço que foram definidas no descritor de implementação do aplicativo cliente. Além disso, é possível usar os descritores de implementação para aumentar ou substituir informações especificadas pelas anotações @WebServiceRef ou @Resource.
O elemento descritor de implementação <lookup-name> é novo no Java EE 6 e é usado para fazer referência indireta a uma referência de serviço já definida. Quando o elemento <lookup-name> é usado, apenas o elemento <service-ref-name> também pode ser especificado e nenhum outro elemento filho de <service-ref> pode ser definido.
O exemplo a seguir mostra uma entrada service-ref dentro de um arquivo WEB-INF/web.xml que define uma referência a um serviço JAX-WS, assim como uma entrada service-ref dentro do mesmo arquivo web.xml define uma referência indireta ao primeiro 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>
Considerando que os service-refs anteriores estão definidos no arquivo WEB-INF/web.xml, o aplicativo cliente poderia executar uma consulta da JNDI usando o nome java:comp/env/service/ExampleService2 e o resultado seria uma referência ao serviço ExampleService definido no documento WSDL WEB-INF/wsdl/ExampleService.wsdl, conforme definido no primeiro service-ref.
O que Fazer Depois
Conclua a implementação do cliente gravando o código do seu aplicativo cliente que é usado para chamar o serviço da Web.