Creación de expresiones XPath para WS-Security
Las configuraciones de WS-Security JAX-RPC y JAX-WS utilizan mensajes SOAP basados en XML para intercambiar información entre aplicaciones. Puede utilizar una expresión XPath para seleccionar elementos específicos en un mensaje SOAP a firmar o cifrar.
Antes de empezar
Si desea firmar o cifrar elementos en un mensaje SOAP (Simple Object Access Protocol - Protocolo de acceso a objetos simple), puede utilizar expresiones XPath para seleccionar los elementos específicos en el mensaje. Los mensajes SOAP 1.1 y SOAP 1.2 difieren en cuanto al formato y, por lo tanto, requieren distintas expresiones XPath para seleccionar elementos de cada versión del mensaje. El entorno de ejecución de JAX-WS admite tanto SOAP 1.1 como SOAP 1.2., por lo que deberá añadir dos expresiones XPath en las políticas de WS-Security para cada elemento que desee seleccionar: una para SOAP 1.1 y otra para SOAP 1.2. El entorno de ejecución de JAX-RPC solamente admite SOAP 1.1, por lo que deberá añadir sólo la versión de SOAP 1.1 de la expresión XPath en las políticas de WS-Security.
Las diferencias en el formato de los mensajes SOAP 1.1 y SOAP 1.2 se resaltan en el escenario siguiente para seleccionar el elemento de indicación de los mensajes SOAP en una configuración de JAX-WS WS-Security.
En el ejemplo siguiente se muestra un mensaje SOAP 1.1 con un elemento de indicación de fecha y hora.
<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>
En el ejemplo siguiente se muestra un mensaje SOAP 1.2 con un elemento de indicación de fecha y hora.
<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>
Las expresiones XPath que seleccionan elementos de mensajes SOAP se hallan en las políticas predeterminadas de WS-Security que contienen información de configuración para la Firma digital XML. En una configuración de JAX-WS WS-Security, las expresiones XPath aparecen en pares, con una expresión XPath para cada versión soportada de SOAP.
En el ejemplo siguiente se muestran las expresiones XPath que seleccionan el elemento de indicación de fecha y hora de los mensajes SOAP 1.1 y SOAP 1.2 en los ejemplos anteriores. La primera expresión XPath selecciona la indicación de fecha y hora del mensaje de SOAP 1.1 y la segunda expresión XPath selecciona la indicación de fecha y hora del mensaje SOAP 1.2.
/*[namespace-uri()='http://schemas.xmlsoap.org/soap/envelope/' y local-name()='Envelope']
/*[namespace-uri()='http://schemas.xmlsoap.org/soap/envelope/' y local-name()='Header']
/*[namespace-uri()='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' y local-name()='Security']
/*[namespace-uri()='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd' y local-name()='Timestamp']
/*[namespace-uri()='http://www.w3.org/2003/05/soap-envelope' y local-name()='Envelope']
/*[namespace-uri()='http://www.w3.org/2003/05/soap-envelope' y local-name()='Header']
/*[namespace-uri()='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' y local-name()='Security']
/*[namespace-uri()='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd' y local-name()='Timestamp']
Las dos primeras líneas de las expresiones XPath de cada versión son diferentes y las dos últimas líneas de las expresiones XPath son iguales. La diferencia entre las dos expresiones XPath es el espacio de nombres en los elementos Sobre y Cabecera. Los espacios de nombres en las expresiones XPath corresponden a los espacios de nombres en los mensajes SOAP 1.1 y SOAP 1.2.
Acerca de esta tarea
En esta tarea se describe cómo crear expresiones XPath que se utilizan para seleccionar un elemento para firmar o cifrar en WS-Security. Las configuraciones de seguridad JAX-WS requieren distintas expresiones XPath para SOAP 1.1 y SOAP 1.2, mientras que las configuraciones de seguridad JAX-RPC requieren expresiones XPath solamente para SOAP 1.1.
Si desea seleccionar un elemento de mensaje SOAP que se suele utilizar en WS-Security, consulte la opción 1 para crear expresiones XPath utilizando segmentos de código precompilado. De lo contrario, continúe con la opción 2 para obtener información sobre cómo crear expresiones XPath para otros elementos.

Procedimiento
Resultados
Ha creado una expresión XPath que selecciona un elemento de una cabecera de mensaje SOAP 1.1 o SOAP 1.2.
Ejemplo
/*[namespace-uri()='http://www.w3.org/2003/05/soap-envelope' y local-name()='Envelope']
/*[namespace-uri()='http://www.w3.org/2003/05/soap-envelope' y local-name()='Header']
/*[namespace-uri()='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' y local-name()='Security']
/*[namespace-uri()='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' y local-name()='UsernameToken']