Criando um Aplicativo de Serviços da Web JAX-WS que Usa Endereçamento de Serviços da Web

O Web Services Addressing (WS-Addressing) auxilia a interoperabilidade entre serviços da Web definindo uma forma padrão de endereçar serviços da Web e fornecer informações de endereçamento em mensagens. Esta tarefa descreve as etapas que são necessárias para criar um serviço da Web JAX-WS que é acessado usando uma referência de terminal do WS-Addressing. A tarefa também descreve as etapas extras necessárias para usar recursos stateful como parte do serviço da Web.

Antes de Iniciar

As etapas descritas nesta tarefa se aplicam os servidores e clientes que são executados no WebSphere Application Server.

Sobre Esta Tarefa

Conclua esta tarefa se estiver criando um serviço da Web JAX-WS que usa a especificação WS-Addressing. Esta tarefa usa as APIs JAX-WS WS-Addressing para criar a referência de terminal necessária. Como alternativa, é possível criar referências de terminais usando a API WS-Addressing proprietária da IBM e convertê-las em objetos da API JAX-WS para uso com o restante do aplicativo.

Procedimento

  1. Forneça uma interface de serviços da Web que retorna uma referência de terminal ao serviço de destino.

    A interface deve retornar uma referência de nó de extremidade, o que ela pode fazer utilizando uma operação de fábrica ou um serviço de fábrica separado. O serviço de destino pode enfrentar uma instância de recurso, por exemplo um carrinho de compras.

  2. Implemente o serviço da Web criado na etapa anterior. Para a parte WS-Addressing da implementação, conclua as seguintes etapas:
    1. Opcional: Inclua anotações para especificar o comportamento do WS-Addressing. Consulte Anotações Web Services Addressing para obter detalhes adicionais.
    2. Opcional: Se sua interface envolver um serviço da Web que enfrente uma instância de recurso, crie ou procure a instância de recurso.
    3. Opcional: Se você estiver utilizando uma instância de recurso, obtenha o identificador do recurso. O identificador de recurso é dependente do aplicativo e pode ser gerado durante a criação da instância de recurso.
      Atenção: Não coloque informações confidenciais no identificador de recurso, porque ele é propagado na mensagem SOAP.
    4. Crie uma referência de terminal que faça referência ao serviço da Web, seguindo as instruções em Creating endpoint references by using the JAX-WS Web Services Addressing API. Se você estiver utilizando uma instância de recurso, transmita o identificador de recurso como parâmetro.
    5. Retorne a referência de nó de extremidade.
  3. Se o serviço da Web usar instâncias de recurso, estenda a implementação para que corresponda a mensagens recebidas para as instâncias de recursos apropriadas. Como você associou o identificador de recurso à referência de terminal criada anteriormente, todas as mensagens que chegam destinadas nessa referência de terminal contêm as informações do identificador de recurso como um parâmetro de referência no cabeçalho SOAP da mensagem. Como o identificador de recurso é passado no cabeçalho SOAP, não é necessário expô-lo na interface de serviço da Web. Quando o WebSphere Application Server recebe a mensagem, ele coloca as informações no contexto de mensagens no encadeamento. Estenda a implementação para executar as seguintes ações:
    1. Obtenha o identificador de instância de recurso do contexto da mensagem.
      • Se você estiver utilizando o espaço de nomes 2005/08 WS-Addressing, use a propriedade REFERENCE_PARAMETERS da classe MessageContext.
      • Se você estiver utilizando o espaço de nomes 2004/08 WS-Addressing, deverá utilizar a API WS-Addressing da IBM, especificamente o método EndpointReferenceManager.getReferenceParameterFrom MessageContext(QName resource_id).
      Utilize o seguinte método para o espaço de nomes 2005/08:
      ...
      List resourceIDList = (List)getContext().getMessageContext().get(MessageContext.REFERENCE_PARAMETERS);
      ...
      Utilize o seguinte método para o espaço de nomes 2004/08:
      ...
      
      String resource_identifier = 
              EndpointReferenceManager.getReferenceParameterFromMessageContext(PRINTER_ID_PARAM_QNAME);
      ...
    2. Redirecionar a mensagem para a instância de recurso apropriada.
  4. Opcional: Configure um cliente proxy para comunicar-se com o serviço.
    1. Utilize a ferramenta wsimport ou xjc para gerar os artefatos exigidos pelo cliente.
      Nota: Se quiser utilizar a especificação 2004/08 WS-Addressing, especifique o arquivo de ligação fornecido, app_server_root/util/SubmissionEndpointReference.xjb, como o parâmetro -b da ferramenta. Este parâmetro informa a ferramenta para gerar objetos de referências de terminais usando a classe SubmissionEndpointReference que é parte da implementação IBM da API JAX-WS padrão. Se você não especificar este arquivo de ligações, os objetos de referências de terminais resultantes não funcionarão com a API JAX-WS padrão.
    2. No código do cliente, crie uma instância da classe de serviço.
    3. Obtenha um objeto de proxy da classe de serviço. Há várias formas de usar a API JAX-WS para obter objetos proxy. Por exemplo, há vários métodos getPort na classe de serviço e um na classe EndpointReference. Para obter informações adicionais, consulte a documentação da API.
    4. Opcional: Utilize o recurso Addressing ou SubmissionAddressing para ativar o suporte do WS-Addressing. Por exemplo, crie um proxy usando um método getPort que aceite os recursos de serviço da Web como um parâmetro. Se preferir, você pode ativar o suporte do WS-Addressing usando outro método, como conjuntos de políticas. Para obter informações adicionais, consulte Ativando o Suporte de Endereçamento de Serviços da Web para Aplicativos JAX-WS.
    5. Utilize o objeto de proxy para chamar o método de serviço que retorna a referência de terminal.

    O código de amostra a seguir mostra um cliente que chama um serviço da Web para incluir dois números juntos. O serviço da Web emite um chamado (o identificador de recurso) para o cliente e exige que o cliente use esse chamado ao chamar o serviço da Web.

    O cliente cria dois proxies. O primeiro proxy obtém o registro como uma referência de terminal do serviço. O segundo proxy utiliza a classe AddressingFeature para ativar o WS-Addressing para a especificação 2005/08 e chama o serviço para incluir os dois números juntos.
    ...
    CalculatorService service = new CalculatorService();
    // Crie o primeiro proxy
    Calculator port1 = service.getCalculatorServicePort();
    // Obtenha o registro como uma referência de terminal do serviço
    W3CEndpointReference epr = port1.getTicket();
    
    // Crie o segundo proxy, utilizando um recurso de endereçamento para ativar o WS-Addressing
    Calculator port2 = epr.getPort(Calculator.class, new AddressingFeature());
    // Chame o serviço para incluir os números
    int answer = port2.add(value0, value1);
    System.out.println("A resposta é: " + answer);
    ...
    Nota: Se os metadados da referência de terminal entrarem em conflito com as informações já associadas à mensagem de saída, por exemplo, se o objeto proxy estiver configurado para representar uma interface diferente, será lançada uma exceção javax.xml.ws.WebServiceExceptio nas tentativas de chamar o terminal.
    Para definir propriedades message-addressing, como uma resposta ao terminal, utilize a SPI do WS-Addressing de propriedade da IBM e a classe BindingProvider, conforme descrito em Especificando e Adquirindo Message-addressing Properties Utilizando SPIs do Web Services Addressing de Propriedade da IBM.
  5. Opcional: Configure um cliente Dispatch para comunicar-se com o serviço. É possível configurar um cliente de diversas maneiras; as seguintes etapas descrevem um exemplo.
    1. Crie uma instância do serviço.
    2. Inclua uma porta no objeto de serviço.
    3. Crie uma instância da classe Dispatch, transmitindo a referência de terminal.
    4. Crie um objeto Dispatch. Utilize o método Service.createDispatch com os seguintes parâmetros: Há diversas variações do método Service.createDispatch; consulte a documentação da API para obter mais detalhes.
    5. Componha a mensagem de pedido do cliente.
    6. Chame o terminal de serviço com o cliente Dispatch.
    O código a seguir mostra um fragmento de exemplo de um cliente Dispatch que ativa o 2004/08 WS-Addressing.
    ...
    CalculatorService service = new CalculatorService();
    Dispatch(<SOAPMessage> dispatch = service.createDispatch( 
        endpointReference,
        SOAPMessage.class,  
        Service.Mode.MESSAGE,  
        new SubmissionAddressingFeature(true));
    ...

Resultados

O serviço da Web e o cliente são configurados para usar referências de terminal através do suporte do WS-Addressing. Para obter um exemplo detalhado que inclua código, consulte Example: Creating a web service that uses the JAX-WS Web Services Addressing API to access a generic web service resource instance.

O que Fazer Depois


Í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_wsa_rap_jaxws
Nome do arquivo: twbs_wsa_rap_jaxws.html