Labs SD >
O SOAP é um vocabulário XML para mensagens de Web Services, e é independente do protocolo de transporte.
Uma mensagem SOAP transporta dados no body e pode acrescentar headers.
Estão também disponíveis exemplos de programação para a construção e envio de mensagens XML.
Os SOAP handlers são o mecanismo da biblioteca de Web Services para Java, JAX-WS, que permite intercetar e aceder diretamente às mensagens SOAP que saem ou entram de um cliente ou servidor.
Atente à seguinte figura.
Do lado do cliente, os handlers são chamados a seguir ao stub e antes da mensagem seguir pela rede.
Do lado do servidor, os handlers são chamados após a mensagem chegar da rede, e antes do tie.
Um handler é uma classe Java que implementa a
interface javax.xml.ws.handler.soap.SOAPHandler.
O método handleMessage() é invocado de cada vez que uma mensagem entra (inbound) ou sai (outbound).
O resultado do método handleMessage() determina de que forma
prossegue o processamento da mensagem.
Resumidamente:
se retornar true, o processamento prossegue;
se atirar uma java.lang.RuntimeException, é devolvida uma SOAP fault.
Para indicar que handlers devem ser chamados,
é necessária editar um ficheiro que define a cadeia de processamento.
Existe uma configuração independente para o cliente e outra para o servidor.
A forma mais habitual de parametrizar os handlers, se necessário, é colocar variáveis static na respetiva classe.
Por exemplo, pode criar-se um parâmetro para indicar a chave criptográfica a usar.
Um exemplo de handlers tem três módulos:
a biblioteca, o cliente, e o servidor.
A biblioteca de handlers contém as classes partilhadas pelos outros dois
(não faz sentido ter classes copiadas entre cliente e servidor).
Biblioteca ws-handlers
- contém:
O exemplo seguinte demonstra a forma como os handlers acedem às mensagens XML dos Web Services utilizando o LogHandler.
Para experimentar o exemplo:
O exemplo pode ser também usado para experimentar os outros handlers,
basta editar os ficheiros de configuração das cadeias de processamento.
Sugere-se, por exemplo, experimentar o MessageContextHandler para imprimir para a consola o contexto de processamento da mensagem.
Na aula passada vimos como se utiliza a biblioteca e o servidor Kerberos para implementar as partes cliente e servidor do protocolo sem que existisse real comunicação entre os dois, i.e. tudo se passava no mesmo processo.
Hoje vamos implementar o protocolo aproveitando as mensagens SOAP que já são trocadas entre o binas-ws-cli e o binas-ws.
Começar por adicionar a biblioteca ws-handlers ao projeto binas.
Prosseguir com o binas-ws:
@HandlerChain(file = "/binas-ws_handler-chain.xml")Para ver ficheiros de configuração semelhantes, consultar o servidor do exemplo acima.
Concluir com o binas-ws-cli:
Neste ponto, o cliente e o servidor têm as suas mensagens SOAP a ser capturadas e impressas para a consola.
Vai ser necessário criar dois handlers para interagir com o servidor Kerberos:
Para a interação com o Kerberos, deve-se reaproveitar o código produzido no laboratório anterior, colocado agora nos handlers e estendido com os passos referidos em destaque.
Parte cliente:
Parte servidor:
O que falta fazer?
Vai ser necessário ter mais handlers para os restantes mecanismos de segurança pedidos no projeto:
Bom trabalho!
© Docentes de Sistemas Distribuídos,
Dep. Eng. Informática,
Técnico Lisboa