Construindo Expressões XPath para WS-Security
As configurações do JAX-RPC e do WS-Security do JAX-WS usam mensagens SOAP baseada em XML para trocar informações entre os aplicativos. É possível usar uma expressão XPath para selecionar elementos específicos em uma mensagem SOAP a ser assinada ou criptografada.
Antes de Iniciar
Se desejar assinar ou criptografar elementos em uma mensagem SOAP (Simple Object Access Protocol), será possível usar as expressões XPath para selecionar os elementos específicos na mensagem. As mensagens SOAP 1.1 e SOAP 1.2 diferem em formato e, portanto, requerem expressões XPath separadas para selecionar elementos de cada versão da mensagem. O ambiente de tempo de execução JAX-WS suporta o SOAP 1.1 e SOAP 1.2., portanto você deve incluir duas expressões XPath nas políticas do WS-Security de cada elemento que deseja selecionar: um para o SOAP 1.1 e um para SOAP 1.2. O ambiente de tempo de execução JAX-RPC suporta somente o SOAP 1.1, portanto você deve incluir somente a versão SOAP 1.1 da expressão XPath para as políticas do WS-Security.
As diferenças no formato das mensagens SOAP 1.1 e SOAP 1.2 são destacadas no seguinte cenário de seleção do elemento Timestamp das mensagens SOAP em uma configuração do WS-Security do JAX-WS.
O seguinte exemplo mostra uma mensagem SOAP 1.1 com um elemento Timestamp.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsu:Timestamp wsu:Id="Timestamp-16" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsu:Created>2012-01-11T12:55:41.781Z</wsu:Created>
<wsu:Expires>2012-01-11T15:42:21.781Z</wsu:Expires>
</wsu:Timestamp>
</wsse:Security>
</soapenv:Header>
</soapenv:Envelope>
O seguinte exemplo mostra uma mensagem SOAP 1.2 com um elemento Timestamp.
<soapenv:Envelope xmlns:soapenv=" http://www.w3.org/2003/05/soap-envelope">
<soapenv:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsu:Timestamp u:Id="uuid-169b0950-217e-48af-9057-ea832e0c7e19-14" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsu:Created>2009-09-08T14:08:36.224Z</wsu:Created>
<wsu:Expires>2009-09-08T14:13:36.224Z</wsu:Expires>
</wsu:Timestamp>
</wsse:Security>
</soapenv:Header>
</soapenv:Envelope>
As expressões XPath que selecionam os elementos da mensagem SOAP estão nas políticas padrão do WS-Security que contêm informações de configuração para a Assinatura Digital XML. Em uma configuração do WS-Security do JAX-WS, as expressões XPath aparecem em pares, com uma expressão XPath para cada versão suportada do SOAP.
O seguinte exemplo mostra as expressões XPath que selecionam o elemento Timestamp a partir das mensagens SOAP 1.1 e SOAP 1.2 nos exemplos anteriores. A primeira expressão XPath seleciona o Timestamp da mensagem SOAP 1.1 e a segunda expressão XPath seleciona o Timestamp da mensagem SOAP 1.2.
/*[namespace-uri()='http://schemas.xmlsoap.org/soap/envelope/' and local-name()='Envelope']
/*[namespace-uri()='http://schemas.xmlsoap.org/soap/envelope/' and local-name()='Header']
/*[namespace-uri()='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' and local-name()='Security']
/*[namespace-uri()='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd' and local-name()='Timestamp']
/*[namespace-uri()='http://www.w3.org/2003/05/soap-envelope' and local-name()='Envelope']
/*[namespace-uri()='http://www.w3.org/2003/05/soap-envelope' and local-name()='Header']
/*[namespace-uri()='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' and local-name()='Security']
/*[namespace-uri()='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd' and local-name()='Timestamp']
As duas primeiras linhas das expressões XPath de cada versão são diferentes e as duas últimas linhas das expressões XPath são as mesmas. A diferença entre as duas expressões XPath é o namespace nos elementos Envelope e Header. Os namespaces nas expressões XPath correspondem aos namespaces nas mensagens SOAP 1.1 e SOAP 1.2.
Sobre Esta Tarefa
Esta tarefa descreve como construir expressões XPath usadas para selecionar um elemento para assinar ou criptografar no WS-Security. As configurações de segurança do JAX-WS separam as expressões XPath do SOAP 1.1 e SOAP 1.2, enquanto as configurações de segurança do JAX-RPC requerem expressões XPath somente para o SOAP 1.1.
Se desejar selecionar um elemento de mensagem SOAP normalmente usado no WS-Security, consulte a opção 1 para construir expressões XPath usando os segmentos do código pré-construídos. Do contrário, continue até a 2 para saber como construir expressões XPath customizadas para outros elementos.

Procedimento
Resultados
Você constrói uma expressão XPath que seleciona um elemento do cabeçalho da mensagem SOAP 1.1 ou SOAP 1.2.
Exemplo
/*[namespace-uri()='http://www.w3.org/2003/05/soap-envelope' and local-name()='Envelope']
/*[namespace-uri()='http://www.w3.org/2003/05/soap-envelope' and local-name()='Header']
/*[namespace-uri()='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' and local-name()='Security']
/*[namespace-uri()='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' and local-name()='UsernameToken']