Enviando Cabeçalhos SOAP Implícitos com JAX-RPC
É possível ativar um cliente de serviços da Web JAX-RPC (Java™ API for XML-based RPC) existente para enviar valores em cabeçalhos SOAP implícitos. Ao modificar seu código de cliente para enviar cabeçalhos SOAP implícitos, você pode enviar informações específicas dentro de um pedido de serviço da Web de saída.
Antes de Iniciar
- Uma parte da mensagem que é declarada como um cabeçalho SOAP na ligação no arquivo WSDL (Web Services Description Language), mas a definição da mensagem não é referenciada por um elemento portType em um arquivo WSDL.
- Um elemento não está contido no arquivo WSDL.
Manipuladores e terminais de serviço podem manipular cabeçalhos SOAP implícitos ou explícitos utilizando o SOAP com a API Attachments para o modelo de dados Java (SAAJ).
Você não pode manipular os cabeçalhos SOAP protegidos. Um cabeçalho SOAP que é declarado como protegido por seu componente de propriedade, por exemplo, Segurança de Serviços da Web, não pode ser acessado pelos aplicativos do cliente. Ocorrerá uma exceção, se você tentar manipular os cabeçalhos SOAP protegidos.
Sobre Esta Tarefa
O aplicativo cliente configura as propriedades no objeto Stub ou Call para enviar e receber cabeçalhos SOAP implícitos.
Procedimento
Resultados
Você tem um cliente de serviços da Web JAX-RPC que está configurado para enviar cabeçalhos SOAP implícitos.
Exemplo
O seguinte exemplo de programação ilustra como enviar dois cabeçalhos SOAP de pedido e receber um cabeçalho SOAP de resposta dentro de um pedido e resposta de serviços da Web:
1 //Criar o pedido e os hashmaps de resposta.
2 HashMap requestHeaders=new HashMap();
3 HashMap responseHeaders=new HashMap();
4
5 //Incluir "AtmUuid1" e "AtmUuid2" ao hashmap de pedido.
6 requestHeaders.put(new QName("com.rotbank.security", "AtmUuid1"),
7 "<AtmUuid1 xmlns=\"><uuid>ROTB-0A01254385FCA09</uuid></AtmUuid1>");
8 requestHeaders.put(new QName("com.rotbank.security", "AtmUuid2"),
9 ((IBMSOAPFactory)SOAPFactory.newInstance()).createElementFromXMLString(
10 "x:AtmUuid2 xmlns:x=\"com.rotbank.security\"><x:uuid>ROTB-0A01254385FCA09
</x:uuid><x:AtmUuid2>"));
11
12 //Incluir "ServerUuid" ao hashmap de resposta.
13 //Se "responseHeaders" estiverem vazios, todos os cabeçalhos SOAP são
14 //extraídos da mensagem de resposta.
15 responseHeaders.put(new QName("com.rotbank.security","ServerUuid"), null);
16
17 //Configurar as propriedade no objeto Stub.
18 stub.setProperty(Constants.REQUEST_SOAP_HEADERS.requestHeaders);
19 stub.setProperty(Constants.RESPONSE_SOAP_HEADERS.responseHeaders);
20
21 //Chamar a operação no Stub.
22 stub.foo(parm2, parm2);
23
24 //Recuperar "ServerUuid" a partir do hashmap de resposta.
25 SOAPElement serverUuid =
26 (SOAPElement) responseHeaders.get(new QName("com.rotbank.security","ServerUuid"));
27
28 //Nota: "serverUuid" agora iguala um objeto SOAPElement que representa o
29 //código a seguir:
30//"<y:ServerUuid xmlns:y=\"com.rotbank.security\"><:uuid>ROTB-0A03519322FSA01
</y:uuid></y:ServerUuid.");
Nas linhas 2-3, novos HashMaps são criados que são utilizados para os cabeçalhos SOAP de pedido e de resposta.
Nas linhas 6-10, os elementos de cabeçalho AtmUuid1 e AtmUuid2 são incluídos para o pedido HashMap.
Na linha 15, o nome do elemento do cabeçalho ServerUuid, junto com um valor válido, é incluído no HashMap de resposta.
Na linha 18, o pedido HashMap está configurado como uma propriedades no objeto Stub. Isso faz com que os cabeçalhos AtmUuid1 e AtmUuid2 a serem incluídos em cada mensagem de pedido associada a uma operação chamada no objeto Stub.
Na linha 19, o HashMap está configurado como uma propriedade no objeto Stub. Isso faz com que o cabeçalho ServerUuid seja extraído a partir de cada mensagem de resposta associada a uma operação chamada no objeto Stub.
Na linha 22, a operação do serviço da Web é chamada no objeto Stub.
Nas linhas 25-26, o cabeçalho ServerUuid é recuperado do HashMap de resposta. O cabeçalho foi extraído da mensagem de resposta e inserido no HashMap pelo mecanismo de serviços da Web.