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

  1. Defina a entrada service-ref em seus descritores de implementação application-client.xml, web.xml, ou ejb-jar.xml.
    Por exemplo, suponha que um arquivo web application archive (WAR) contém um descritor de implementação WEB-INF/web.xml que inclui as seguintes entradas service-ref:
    <service-ref>
      <service-ref-name>service/ExampleService</service-ref-name>
      <service-interface>com.ibm.sample.ExampleService</service-interface>
    </service-ref>
    
    <service-ref>
      <service-ref-name>service/ExamplePort</service-ref-name>
      <service-interface>com.ibm.sample.ExampleService</service-interface>
      <service-ref-type>com.ibm.sample.ExamplePort</service-ref-type>
    </service-ref>
    
    <service-ref>
      <service-ref-name>service/ExamplePortInjected</service-ref-name>
      <service-interface>com.ibm.sample.ExampleService</service-interface>
      <service-ref-type>com.ibm.sample.ExamplePort</service-ref-type>
    
      <injection-target>
        <injection-target-class>com.ibm.sample.J2EEClient</injection-target-class>
        <injection-target-name>injectedPort</injection-target-name>
      </injection-target>
    </service-ref>
    Nesse exemplo, com.ibm.sample.ExampleService é uma classe de serviço JAX-WS gerada e essa classe deve ser uma subclasse de javax.xml.ws.Service. Além disso, o método ExampleService.getPort() retorna uma instância de com.ibm.sample.ExamplePort.
  2. Use os descritores de implementação dentro dos seu aplicativo do cliente de serviços da Web para customizar o seu aplicativo. Os seguintes fragmentos de código são exemplos de como seu aplicativo cliente pode usar as entradas service-ref do módulo WAR:
    import javax.xml.ws.Service;
    import com.ibm.sample.ExampleService;
    import com.ibm.sample.ExamplePort;
    
    // Crie um objeto InitialContext para fazer consultas JNDI.
    InitialContext ic = new InitialContext();
    
    // O cliente obtém uma instância da classe de serviço genérica utilizando JNDI.
    Service genericService =
    (Service) ic.lookup(“java:comp/env/service/ExampleService”);
    
    // O cliente obtém uma instância da classe de serviço gerada utilizando JNDI.
    ExampleService exampleService =
    (ExampleService) ic.lookup(“java:comp/env/service/ExampleService”);
    
    // O cliente obtém uma instância da porta utilizando JNDI.
    ExamplePort ExamplePort =
    (ExamplePort) ic.lookup(“java:comp/env/service/ExamplePort”);
    
    // O contêiner introduz uma instância de ExamplePort com base no descritor de implementação do cliente
    private ExamplePort injectedPort;

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.


Ícone que indica o tipo de tópico Tópico de Tarefa



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxwsclientdd
Nome do arquivo: twbs_jaxwsclientdd.html