Labs SD > SOAP Handlers

MessageContext

Para cada invocação de um Web Service, é criado um MessageContext no cliente que acompanha o processamento da mensagem do pedido, passando pelos stubs e handlers, e que depois acompanha o processamento da mensagem de resposta respetiva.
Do lado do servidor, existe um outro MessageContext que acompanha o processamento do pedido e da resposta.
O objeto MessageContext do cliente é uma instância diferente do objeto do servidor. Não há partilha de dados entre eles, por serem objetos locais às respetivas máquinas virtuais.

A escrita e leitura de uma propriedade de contexto é feita através da interface java.util.Map:

    ...
// put property in message context
soapMessageContext.put("property.name", newValue);
    ...
// get property from message context
String value = (String) soapMessageContext.get("property.name");
    ...

 

Exemplo de handlers estafetas de dados

Este exemplo demonstra todos os mecanismos de passagem de dados entre as diversas camadas de um Web Service:

  1. do cliente para o handler cliente (via contexto do pedido, que é obtido a partir do stub),
  2. do handler cliente para o handler servidor (via cabeçalho na mensagem SOAP),
  3. do handler servidor para o servidor (via contexto das mensagens que é fornecido como argumento),
  4. do servidor para o handler servidor (novamente via contexto das mensagens que é fornecido pela biblioteca através da anotação @Resource),
  5. do handler servidor para o handler cliente (via cabeçalho na mensagem SOAP),
  6. e finalmente, do handler cliente para o servidor (via contexto da resposta).

O código do exemplo tem comentários numerados #1, #2, #3, ... que seguem a sequência de uma invocação remota começando no cliente, passando pelo servidor e voltando ao cliente. Pelo caminho o item de informação vai acumulando mais dados.


© Docentes de Sistemas Distribuídos, Dep. Eng. Informática, Técnico Lisboa