Implementando Clientes de Serviços da Web JAX-WS Dinâmicos

Você desenvolveu clientes de serviços da Web dinâmicos baseados nos Serviços da Web para a especificação Java™ Platform, Enterprise Edition (Java EE) e no modelo de programação Java API for XML-Based Web Services (JAX-WS).

Antes de Iniciar

Boas Práticas Boas Práticas: IBM® WebSphere Application Server suporta o modelo de programação Java API for XML-Based Web Services (JAX-WS) e o modelo de programação Java API for XML-based RPC (JAX-RPC). O JAX-WS é o modelo de programação de serviços da Web da próxima geração, estendendo a base fornecida pelo modelo de programação JAX-RPC. Ao usar o modelo de programação JAX-WS estratégico, o desenvolvimento de serviços da Web e clientes é simplificado por meio do suporte de um modelo de anotações baseado em padrões. Embora o modelo de programação JAX-RPC e seus aplicativos ainda sejam suportados, aproveite o modelo de programação JAX-WS de fácil implementação para desenvolver novos aplicativos de serviços da web e clientes. bprac

Sobre Esta Tarefa

Desenvolvendo clientes de serviços da Web baseados no modelo de programação JAX-WS

Clientes de serviços da Web que podem acessar e chamar serviços da Web JAX-WS são desenvolvidos baseados nos Serviços da Web para a especificaçãoJava Platform, Enterprise Edition (Java EE). O servidor de aplicativos suporta clientes Enterprise JavaBeans (EJB), clientes de aplicativos Java EE, arquivos JavaServer Pages (JSP) e servlets que são baseados no modelo de programação JAX-WS. Clientes de serviços da Web baseados na especificação JAX-RPC podem chamar serviços da Web baseados em JAX-WS se o arquivo Web Services Description Language (WSDL) estiver em conformidade com o Perfil Básico Web Services-Interoperability (WS-I).

O modelo de programação do cliente JAX-WS suporta a API do cliente Dispatch e a API do cliente de proxy dinâmico. A API do cliente Dispatch é um modelo de programação de cliente dinâmico, enquanto que o modelo de programação de cliente estático para JAX-WS é o cliente de proxy dinâmico. Os clientes Dispatch e de proxy dinâmico possibilitam chamadas síncronas e assíncronas de serviços da Web JAX-WS.

A API do cliente Dispatch, javax.xml.ws.Dispatch, é um cliente orientado a mensagens XML que destina-se a desenvolvedores XML avançados, que preferem usar construções XML. A API Dispatch pode enviar os dados no modo PAYLOAD ou MESSAGE. Ao usar o modo PAYLOAD, o cliente Dispatch é responsável apenas por fornecer o conteúdo de soap:Body e JAX-WS inclui a carga útil em um elemento soap:Envelope. Ao utilizar o modo MESSAGE, o cliente Dispatch é responsável por fornecer o envelope SOAP inteiro. Você não precisa de um arquivo WSDL se estiver desenvolvendo um cliente dinâmico.

Contrariamente, o cliente de proxy dinâmico chama um serviço da Web baseado em uma service endpoint interface (SEI) que é fornecida. As instâncias de proxy dinâmico do JAX-WS otimizam a função de proxy dinâmico no Java SE Runtime Environment (JRE) 6 base.

Para desenvolver clientes de serviços da Web baseados no modelo de programação JAX-WS, você deve determinar o modelo do cliente que melhor se ajusta às necessidades do seu aplicativo de serviço da Web. Porém, se desejar trabalhar diretamente com XML em vez de uma abstração Java e trabalhar com a estrutura da mensagem ou a estrutura da carga útil da mensagem, use a API Dispatch para desenvolver um cliente de serviço da Web dinâmico. Porém, se desejar que o cliente de serviços da Web chame o serviço baseado em interfaces de terminal em serviço com um proxy dinâmico, use a API de Proxy Dinâmico para desenvolver um cliente de serviço da Web estático. Consulte sobre a implementação de clientes de serviços da Web JAX-WS estáticos para aprender como desenvolver clientes de serviços da Web estáticos.

Conclua essa tarefa para desenvolver um cliente de serviços da Web iniciando com a API Dispatch.

Para chamar serviços da Web assincronicamente usando um cliente JAX-WS estático ou dinâmico, determine se deseja implementar o retorno de chamada ou o modelo de pesquisa. Consulte sobre como chamar serviços da Web JAX-WS assincronicamente para obter informações adicionais quanto à implementação assíncrona do retorno de chamada ou pesquisa para clientes de serviço da Web. O modelo de programação JAX-WS para o serviço e o cliente usa anotações para representar as mesmas informações que foram fornecidas na ligação do cliente JAX-RPC de maneira neutra pelo fornecedor.

Clientes de serviços da Web JAX-WS gerenciados e não gerenciados

O servidor de aplicativos suporta ambos os clientes de serviços da Web, gerenciados e não gerenciados, quando usa o modelo de programação JAX-WS:

  • Clientes Gerenciados

    Os serviços da web para clientes Java EE são definidos pelo Java Specification Requirements (JSR) 109 e são clientes gerenciados, pois são executados em um contêiner Java EE. Esses clientes são empacotados como arquivos EAR (enterprise archive) e contêm componentes que agem como solicitantes de serviços. Esses componentes são compostos de um aplicativo clienteJava EE, um solicitações da web como um servlet ou JavaServer Pages (JSP), ou um Enterprise JavaBeans (EJB) de sessão. Clientes gerenciados de serviços da Web usam APIs JSR 109 e informações de implementação para consultar e chamar um serviço da Web.

    Para os clientes gerenciados, é possível usar a consulta da Java Naming and Directory Interface (JNDI) para executar a consulta de serviço ou usar anotações para injetar instâncias de um serviço ou porta JAX-WS. Consulte sobre a configuração da Segurança de Serviços da Web do token UserName, Segurança de Serviços da Web de assinatura digital e Segurança de Serviços da Web do token Lightweight Third-Party Authentication (LTPA). O código a seguir é um exemplo de uma consulta de contexto compatível com JSR 109:

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

    Você pode utilizar a anotação @WebServiceRef ou @Resource para declarar clientes gerenciados. O uso dessas anotações resulta no tipo especificado pela anotação que está sendo ligada ao espaço de nomes do JNDI. Quando as anotações são utilizadas em um campo ou um método, elas também resultam na injeção de uma instância de serviço ou de porta do JAX-WS. Você pode utilizar essas anotações em vez de declarar entradas service-ref no descritor de implementação cliente. O descritor de implementação cliente ainda pode ser utilizado para declarar clientes gerenciados pelo JAX-WS, semelhante a clientes gerenciados pelo JAX-RPC. Também é possível utilizar o descritor de implementação para substituir e aumentar as informações especificadas pelas anotações @WebServiceRef e @Resource. Utilize a anotação @WebServiceRef para ligar e injetar uma instância de serviço ou de porta do JAX-WS. A anotação @Resource só pode ser utilizada para ligar e injetar uma instância de serviço do JAX-WS. O uso de qualquer uma dessas anotações para declarar clientes gerenciados pelo JAX-WS só é suportado em determinados tipos de classes. Alguns desses tipos de classes incluem classes de implementação de terminal JAX-WS, classes do manipulador JAX-WS, classes de enterprise bean e classes de servlet.

    O exemplo a seguir utiliza a anotação @WebServiceRef para obter uma instância de FredsBank:
    @WebServiceRef(name=”service/FredsBankPort”, value=FredsBankService.class)
    FredsBank fredsBank;
    Agora, dentro da classe, o campo fredsBank não precisa ser inicializado. É possível utilizar esse campo diretamente:
    long balance = fredsBank.getBalance();
    Também é possível utilizar a anotação @WebServiceRef para obter instâncias de classes de serviço JAX-WS, por exemplo:
    @WebServiceRef(name=”service/FredsBankService”)
    FredsBankService service;
    Agora, dentro da classe, o campo service não precisa ser inicializado. É possível utilizar esse campo diretamente:
     FredsBank fredsBank = service.getFredsBankPort(); long balance = fredsBank.getBalance();
    Além da anotação @WebServiceRef, você pode utilizar a anotação @Resource para obter uma instância de classes de serviço JAX-WS, por exemplo:
    @Resource(name=”service/FredsBankService”, type=FredsBankService.class)
    FredsBankService service;
    Assim como com a anotação @WebServiceRef, agora você pode utilizar o campo service sem instanciação, por exemplo:
    FredsBank fredsBank = service.getFredsBankPort(); long balance = fredsBank.getBalance();
    As anotações @Resource ou @WebServiceRef podem ser utilizadas em uma classe. Nesse caso, o JNDI deve ser utilizado para consultar o serviço ou a porta JAX-WS, por exemplo:
    @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 obter informações adicionais sobre como utilizar as anotações @WebServiceRef e @Resource, consulte as especificações para JSR-109, JSR-224, JSR-250 e Java EE 5 (Java Platform Enterprise Edition 5).

    Conforme mencionado anteriormente, ao usar anotações ou JNDI para obter instâncias de serviços e portas JAX-WS, não instancie os objetos retornados. Fazer isso resultará em uma instância de cliente não gerenciado. A seguir está um exemplo de uso incorreto:
    @WebServiceRef(name=”service/FredsBankService”)
    FredsBankService service;
    service = new FredsBankService(); // o cliente torna-se não gerenciado.

    Para clientes gerenciados pelo JAX-WS que sejam declarados pela anotação @WebServiceRef ou @Resource, e para clientes que sejam declarados utilizando entradas service-ref no descritor de implementação cliente, você pode utilizar o console administrativo para fornecer a URL de terminal utilizada pelo cliente. Essa URL especificada substitui a URL de terminal no documento WSDL utilizado pelo cliente. Para saber mais sobre como especificar essa URL de terminal, consulte a documentação Configurando ligações de cliente de serviços da Web.

  • Clientes Não Gerenciados

    Os clientes Java Platform, Standard Edition (Java SE 6) que usam o tempo de execução JAX-WS para chamar serviços da web e não são executados em nenhum contêiner Java EE são conhecidos como clientes não gerenciados. Um cliente não gerenciado de serviços da Web é um cliente Java independente que pode inspecionar diretamente um arquivo WSDL e formular as chamadas para o serviço da Web usando as APIs JAX-WS. Esses clientes são compactados como arquivos JAR, que não contêm informações de implementação.

A partir do WebSphere Application Server Versão 7.0 e posterior, nos módulos do aplicativo Java EE 5 (módulos de aplicativo da web versão 2.5 ou superior, ou módulos EJB versão 3.0 ou superior) ocorre a varredura de anotações para identificação de serviços e clientes JAX-WS. Entretanto, os módulos aplicativos pré-Java EE 5 (módulos aplicativos da web versão 2.4 ou anterior, ou módulos EJB versão 2.1 ou anterior) não são digitalizados para anotações JAX-WS, por padrão, para considerações de desempenho. No Feature Pack for Web Services Versão 6.1, o comportamento padrão é digitalizar módulos aplicativos da web pré-Java EE 5 para identificar serviços JAX-WS e digitalizar módulos aplicativos da web pré-Java EE 5 e módulos EJB para clientes de serviço durante a instalação do aplicativo. Como o comportamento padrão para o WebSphere Application Server Versão 7.0 e mais recente é não varrer módulos pré-Java EE 5 para anotações durante a instalação do aplicativo ou inicialização do servidor, para preservar a compatibilidade com versões anteriores com o feature pack de liberações anteriores, deve-se configurar a propriedade UseWSFEP61ScanPolicy no META-INF/MANIFEST.MF de um arquivo web application archive (WAR) ou módulo EJB ou definir a propriedade customizada de Java virtual machine, com.ibm.websphere.webservices.UseWSFEP61ScanPolicy, em servidores para solicitar varredura durante a instalação do aplicativo e inicialização do servidor. Para aprender mais sobre a varredura de anotações, consulte as informações de anotações do JAX-WS.

Procedimento

  1. Teste um cliente de serviços da Web dinâmico.

    A API do cliente Dispatch, javax.xml.ws.Dispatch, é um cliente orientado a mensagens XML que destina-se a desenvolvedores XML avançados que preferem usar constructs XML. Para gravar um cliente Dispatch, é necessário ter experiência com APIs do cliente Dispatch, os tipos de objetos suportados e o conhecimento das representações de mensagem para o arquivo WSDL (Web Services Description Language) associado. A API do cliente Dispatch requer que os aplicativos clientes construam mensagens ou cargas úteis como XML e requer um conhecimento detalhado da mensagem ou carga útil da mensagem. Você não precisa de um arquivo WSDL se estiver desenvolvendo um cliente dinâmico.

  2. (Opcional) Monte um arquivo Java archive (JAR) de cliente ativado para serviços da Web em um arquivo archive corporativo (EAR). Execute esta etapa caso esteja desenvolvendo um cliente de serviços da web JAX-WS que é executado no contêiner do cliente Java EE.
  3. (Opcional) Monte um arquivo web application archive (WAR) ativado para serviços da Web em um arquivo archive corporativo (EAR). Conclua esta tarefa se você estiver desenvolvendo um cliente de serviços da Web JAX-WS que execute no contêiner da WebJava EE.
  4. (Opcional) Implemente o aplicativo de cliente de serviços da Web. Conclua essa etapa para implementar um cliente de serviços da Web JAX-WS que execute no contêiner do cliente Java EE.
  5. Teste o aplicativo cliente ativado para serviços da Web. Você pode testar um arquivo JAR do cliente não gerenciado ou um aplicativo do cliente gerenciado.

Resultados

Você criou e testou um aplicativo de cliente de serviço da Web.

O que Fazer Depois

Após desenvolver um cliente de aplicativo de serviços da Web, e o cliente estar estaticamente limitado, o terminal em serviço usado pela implementação é aquele identificado no arquivo WSDL que você usou durante o processo de desenvolvimento. Durante ou após a instalação do aplicativo de serviços da Web, você pode querer mudar o terminal em serviço. Para clientes gerenciados, você pode alterar o terminal com o console administrativo ou a ferramenta de script wsadmin. Para clientes de serviços da Web JAX-WS, é possível mudar o terminal de dentro do aplicativo cliente.

Também é possível considerar a customização dos seus serviços da Web implementando extensões para o seu cliente de serviços da Web. Alguns exemplos dessas extensões incluem o envio e o recebimento de valores em cabeçalhos SOAP ou o envio e o recebimento de cabeçalhos de transporte HTTP ou JMS (Java Message Service). Para aprender mais sobre essas extensões, leia sobre a implementação de extensões para clientes de serviços 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_devwbsjaxwsclient_dyn
Nome do arquivo: twbs_devwbsjaxwsclient_dyn.html