Construction d'expressions XPath pour WS-Security
Les configurations JAX-RPC et JAX-WS WS-Security utilisent des messages SOAP reposant sur XML pour échanger des informations entre les applications. Vous pouvez vous servir d'une expression XPath pour sélectionner des éléments spécifiques dans un message SOAP en vue de leur signature ou de leur chiffrement.
Avant de commencer
Pour signer ou chiffrer des éléments dans un message SOAP (Simple Object Access Protocol), vous pouvez utiliser des expressions XPath afin de sélectionner les éléments de votre choix dans le message. Les messages SOAP 1.1 et SOAP 1.2 ont un format différent. Par conséquent, des expressions XPath distinctes sont requises pour la sélection des éléments dans chaque version de message. L'environnement d'exécution JAX-WS prend en charge SOAP 1.1 et SOAP 1.2. Ainsi, vous devez ajouter deux expressions XPath aux règles WS-Security pour chaque élément que vous voulez sélectionner : une pour SOAP 1.1 et une pour SOAP 1.2. L'environnement d'exécution JAX-RPC ne prend en charge que SOAP 1.1. Ainsi, il suffit d'ajouter la version SOAP 1.1 de l'expression XPath aux règles WS-Security.
Les différences de format entre les messages SOAP 1.1 et SOAP 1.2 sont mises en évidence dans le scénario ci-dessous, dans lequel l'élément Timestamp est sélectionné dans des messages SOAP, dans une configuration JAX-WS WS-Security.
L'exemple ci-dessous illustre un message SOAP 1.1 comportant un élément 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>
L'exemple ci-dessous illustre un message SOAP 1.2 comportant un élément 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>
Les expressions XPath qui sélectionnent des éléments de message SOAP se trouvent dans les règles WS-Security par défaut contenant des informations de configuration pour la signature numérique XML. Dans une configuration JAX-WS WS-Security, les expressions XPath apparaissent par paires (une expression XPath pour chaque version prise en charge de SOAP).
L'exemple ci-dessous illustre les expressions XPath qui sélectionnent l'élément Timestamp dans les messages SOAP 1.1 et SOAP 1.2 des exemples précédents. La première expression XPath sélectionne l'élément Timestamp dans le message SOAP 1.1 et la deuxième expression XPath sélectionne l'élément Timestamp dans le message 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']
Les deux premières lignes des expressions XPath sont différentes selon la version, et les deux dernières lignes sont identiques. La différence entre les deux expressions XPath est l'espace de nom dans les éléments Envelope et Header. Les espaces de nom dans les expressions XPath correspondent aux espaces de nom dans les messages SOAP 1.1 et SOAP 1.2.
Pourquoi et quand exécuter cette tâche
Cette tâche explique comment construire des expressions XPath permettant de sélectionner un élément à signer ou à chiffrer dans WS-Security. Les configurations de sécurité JAX-WS requièrent des expressions XPath distinctes pour SOAP 1.1 et SOAP 1.2, alors que les configurations de sécurité JAX-RPC requièrent des expressions XPath pour SOAP 1.1 seulement.
Si vous voulez sélectionner un élément de message SOAP souvent utilisé dans WS-Security, reportez-vous à l'option 1 afin de construire des expressions XPath avec des segments de code prégénérés. Sinon, passez à l'option 2 pour apprendre à construire des expressions XPath pour d'autres éléments.

Procédure
Résultats
Vous avez construit une expression XPath qui sélectionne un élément d'un en-tête de message SOAP 1.1 ou SOAP 1.2.
Exemple
/*[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']