O Web Services Invocation Framework (WSIF) fornece uma API Java™ para
chamar serviços da Web, independentemente do formato do serviço ou do protocolo de transporte por meio do qual ele é
chamado.
Antes de Iniciar
O WSIF inclui um provedor EJB para a
chamada EJB que usa a Chamada de Método Remoto por meio do Internet
Inter-ORB Protocol (RMI-IIOP). No entanto, para a invocação de serviço da Web baseada em EJB(IIOP),
chame os serviços da Web RMI-IIOP usando JAX-RPC no lugar.
Assegure-se de que seu aplicativo
use apenas um encadeamento para chamar WSIF.
Sobre Esta Tarefa
A API WSIF suporta a chamada de serviços da Web definidos por Web Services Description Language (WSDL). O
WSIF é para ser usado nos clientes WSIF e nos intermediários de serviços da Web.
A API
WSIF é orientada pela descrição do serviço abstrato no WSDL; ela é
totalmente independente da ligação usada. Essa independência faz com que
o trabalho com a API seja mais natural, porque usa termos WSDL para se referir
a partes da mensagem, operações e outros itens.
A API WSIF foi
projetada para o modelo de uso do WSDL:
- Selecione uma porta que suporte o tipo de porta necessário.
- Chame a operação fornecendo a mensagem de entrada abstrata necessária que consiste
nas partes obrigatórias, sem se preocupar como a mensagem será mapeada para um protocolo
de ligação específico.
As outras APIs de serviço da Web, por exemplo as APIs SOAP, não foram projetadas em
WSDL, mas para um protocolo de ligação específico com sua sintaxe associada; por exemplo, URIs de destino e estilos de
codificação.
As principais
interfaces API WSIF são descritas no procedimento a seguir.
Nota: O Apache não suporta mais o WSIF.
- Crie uma mensagem para envio a uma porta por meio da interface WSIFMessage.
No WSDL, uma mensagem descreve o tipo abstrato da entrada ou saída para
uma operação. A classe WSIF correspondente
é WSIFMessage, que representa na memória a entrada ou saída
de uma operação. A interface WSIFMessage separa a representação
dos dados do tipo abstrato definido pelo
WSDL.
Uma classe WSIFMessage
é um contêiner para um conjunto de partes denominadas. As classes WSIFMessage podem ser enviadas entre JVMs (Java Virtual
Machines).
- Escolha se deseja representar a mensagem WSIF no tempo de execução como uma classe
Java ou
como XML.
Existem duas maneiras naturais
para representar uma mensagem WSDL em um ambiente de tempo de execução:
- A classe Java gerada, com base em um WSDL para mapeamento Java, como aquela fornecida
por uma API Java para chamada de procedimento remoto baseada em XML
(JAX-RPC).
- A representação XML dos dados, por exemplo, utilizando a Codificação SOAP.
Cada opção oferece benefícios em cenários diferentes. A classe Java é a abordagem
natural quando o WSIF é utilizado em um cliente Java padrão.
No entanto,
em outros cenários onde o WSIF é utilizado em um intermediário, pode ser mais eficiente
manter uma mensagem WSDL no formato codificado SOAP. O estilo utilizado para definir mensagens deve ser consistente na mensagem, para que todas as partes de uma mensagem devam ser consistentes. Uma cadeia -
getRepresentationStyle() - sempre retorna
null.
Isso indica que partes dessa classe WSIFMessage
são representadas como objetos Java.
- Obtenha e defina as partes da mensagem WSIF.
Você adiciona partes a uma classe WSIFMessage com os métodos setObjectPart ou
setTypePart. Cada parte é denominada. Os nomes das partes de uma mensagem são exclusivos.
Se você
definir uma parte mais de uma vez, a última definição é a utilizada.
Você recupera as partes por nome a partir de uma classe WSIFMessage com os métodos getObjectPart
ou getTypePart.
Se a parte nomeada não existir, o método retornará um erro
WSIFException.
É possível utilizar Repetidores para recuperar partes da mensagem por meio dos métodos getParts()
e getPartNames().
A ordem em que as partes são definidas não é importante, mas a implementação
da mensagem pode ser mais eficiente se as partes forem definidas na ordem de
parâmetro especificada pelo WSDL.
As classes WSIFMessage são clonáveis e seriáveis.
Se as partes definidas não
forem clonáveis, a implementação poderá tentar cloná-las por meio da serialização. Se as partes também não forem seriáveis, uma exceção CloneNotSupportedException
será emitida se houver tentativa de clonagem.
- Defina o nome da mensagem WSIF.
Além das partes contidas, uma classe WSIFMessage também tem um nome de
mensagem.
Isso é requerido para a sobrecarga de operação que é suportada pelo
WSDL e WSIF.
Para obter informações adicionais sobre a interface WSIFMessage (/wsi/org/apache/wsif/WSIFMessage.html)
consulte a documentação da API gerada fornecida com o WSIF.
- Localize um depósito de informações ou um serviço de porta por meio da
interface WSIFService e da classe WSIFServiceFactory.
A interface
WSIFService é um depósito de informações de porta que modela e suporta a abordagem WSDL
na qual um serviço está disponível em uma ou mais portas. O depósito de informações
oculta a implementação da porta. O WSIF suporta portas dinâmicas que estão baseadas em um
determinado protocolo e transporte e configuradas utilizando o WSDL no tempo de execução. Por
exemplo, a porta SOAP dinâmica pode chamar qualquer serviço SOAP com base na descrição do
WSDL desse serviço, de modo que você possa ocultar e modificar o conjunto de portas
disponíveis no tempo de execução.
Para localizar um serviço a partir de um documento WSDL em um endereço da Web, ou de uma base de código gerada por
código, use a classe WSIFServiceFactory.
- Chame uma operação por meio das interfaces WSIFPort e WSIFOperation.
Uma interface WSIFPort trata dos detalhes de chamar uma operação. A porta fornece acesso à implementação
do serviço.
Um documento WSDL pode fornecer muitas ligações WSDL diferentes, e essas ligações
podem orientar diversas portas. O cliente pode escolher uma porta, o stub de serviço
pode escolher uma porta ou o WSIF pode escolher uma porta padrão.
A porta oferece uma interface para recuperar um objeto Operation. Uma interface WSIFOperation
oferece a capacidade de executar a operação especificada.
Se a porta
for serializada e desserializada posteriormente, o WSIF garante que
o cliente fornecerá as informações corretas para o servidor para identificar
a instância. Se a instância do servidor não estiver mais disponível, o servidor deverá
decidir se criará uma falha ou se fornecerá uma nova instância. O comportamento pode depender do tipo de serviço. Por exemplo, para um enterprise
bean, a interface WSIFPort armazena o Início EJB e o utiliza para selecionar
o bean antes de cada chamada. O cliente é responsável por serializar
ou manter a instância da porta se precisar de suporte à instância.
O cliente deve criar uma nova operação e mensagens para cada chamada.