WS-Security の XPath 式の作成
JAX-RPC および JAX-WS WS-Security 構成は XML ベースの SOAP メッセージを使用して、アプリケーション間で情報を交換します。XPath 式を使用して、SOAP メッセージ内の署名または暗号化する特定のエレメントを選択できます。
始める前に
Simple Object Access Protocol (SOAP) メッセージ内のエレメントに対して署名または暗号化を行う場合は、XPath 式を使用して、メッセージ内の特定のエレメントを選択できます。SOAP 1.1 メッセージと SOAP 1.2 メッセージではフォーマットが異なるため、各バージョンのメッセージからエレメントを選択するには別個の XPath 式が必要になります。JAX-WS ランタイム環境では SOAP 1.1 と SOAP 1.2 の両方がサポートされるため、選択するエレメントごとに 2 つの XPath 式 (SOAP 1.1 用に 1 つ、SOAP 1.2 用に 1 つ) を WS-Security ポリシーに追加する必要があります。JAX-RPC ランタイム環境では SOAP 1.1 しかサポートされないため、WS-Security ポリシーに追加する必要があるのは、SOAP 1.1 バージョンの XPath 式のみです。
JAX-WS WS-Security 構成で SOAP メッセージから Timestamp エレメントを選択する以下のシナリオでは、SOAP 1.1 メッセージと SOAP 1.2 メッセージのフォーマットの違いにハイライトを当てます。
以下の例では、Timestamp エレメントが含まれた SOAP 1.1 メッセージを示します。
<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>
以下の例では、Timestamp エレメントが含まれた SOAP 1.2 メッセージを示します。
<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>
SOAP メッセージ・エレメントを選択する XPath 式は、XML デジタル署名の構成情報が含まれている、WS-Security のデフォルト・ポリシーに配置されます。JAX-WS WS-Security 構成では、XPath 式はペアで記述されます (サポートされる SOAP バージョンごとに 1 つの XPath 式)。
以下の例では、前の例の SOAP 1.1 メッセージと SOAP 1.2 メッセージから Timestamp エレメントを選択する XPath 式を示します。 最初の XPath 式は、SOAP 1.1 メッセージから Timestamp を選択します。2 番目の XPath 式は、SOAP 1.2 メッセージから Timestamp を選択します。
/*[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']
各バージョンの XPath 式の最初の 2 行は異なり、XPath 式の最後の 2 行は同じです。2 つの XPath 式の違いは、Envelope エレメントと Header エレメントの名前空間です。XPath 式の名前空間は、SOAP 1.1 メッセージと SOAP 1.2 メッセージの名前空間に対応しています。
このタスクについて
このタスクでは、WS-Security で署名または暗号化するエレメントを選択するために使用する XPath 式を作成する方法について説明します。JAX-WS セキュリティー構成では、SOAP 1.1 と SOAP 1.2 の両方にそれぞれ別個の XPath 式が必要ですが、JAX-RPC セキュリティー構成では、SOAP 1.1 用の XPath 式のみが必要になります。
WS-Security で一般的に使用される SOAP メッセージ・エレメントを選択する場合は、オプション 1 を参照して、事前作成されたコード・セグメントを使用して XPath 式を作成します。それ以外の場合は、オプション 2 に進んで、他のエレメント用のカスタム XPath 式の作成方法を参照してください。

手順
タスクの結果
SOAP 1.1 メッセージ・ヘッダーまたは SOAP 1.2 メッセージ・ヘッダーのエレメントを選択する XPath 式を作成しました。
例
/*[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']