4 カスタム・アサーションの高度な機能の実装
この章では、いくつかの一般的な機能と例外処理を実装するために、このAPIを使用する方法について説明します。この付録の内容は次のとおりです。
4.1 カスタム・アサーションのパラメータの指定
IAssertionBindings、IConfig、IPropertySet、getBindings、getConfigs、getPropertySets、getPropertyByNameおよびgetValueなどの様々なインタフェースおよびメソッドを使用して、カスタム・アサーション・エグゼキュータ内のパラメータにアクセスできます。
カスタム・アサーションのパラメータを指定する方法の段階的な手順は、「カスタム・アサーションへのパラメータの入力」を参照してください。
4.2 OWSMコンテキスト・プロパティの検査
IMessageContextインタフェースを使用してOWSMコンテキスト・プロパティにアクセスできます。
次に、インタフェースとメソッドの一覧を示します。
- 
                        IMessageContext 
- 
                        getServiceURL 
- 
                        getProperty 
- 
                        getAllProperty 
IMessageContextインタフェースを使用したプロパティへのアクセス方法の手順は、「OWSMコンテキスト・プロパティへのアクセス」を参照してください。
4.3 OWSMカスタム・セキュリティ・アサーションへのアクセス
様々なインタフェースを使用して、カスタム・アサーション・エグゼキュータの内部でステージにアクセスし、リクエスト・メッセージとレスポンス・メッセージを取得できます。
OWSMカスタム・セキュリティ・アサーションには、3つのステージがあります。
- 
                        リクエスト: クライアントがリクエストを実行し、そのリクエストがリクエスト先に配信中であるときに、リクエスト・ステージが発生します。 
- 
                        レスポンス: リクエスト先がメッセージを処理し、レスポンスを返しているときに、レスポンス・ステージが発生します。 
- 
                        フォルト: フォルトの場合に、フォルト・ステージが発生します。 
コンテキスト情報(ステージやメッセージなど)はコンテキスト・プロパティを使用して渡され、IMessageContextインタフェースによって取得されます。コンテキスト・プロパティへのアクセスに使用できるインタフェースとメソッドは、次のとおりです。
- 
                        IMessageContext 
- 
                        getStage 
- 
                        getRequestMessage 
- 
                        getResponseMessage 
カスタム・セキュリティ・アサーション・ステージおよびインタフェースにアクセスする方法の手順は、「リクエスト、レスポンスおよびフォルト・メッセージ・オブジェクトへのアクセス」を参照してください。
4.4 XPathによるメッセージのパーツへのアクセス
XPath式を使用すると、カスタム・アサーション・エグゼキュータの内部で、SOAPメッセージのパーツにアクセスできます。
次の各トピックで、さらに詳しく説明します。
4.4.1 XPath式について
カスタム・ポリシー・エグゼキュータ内のXPath式を使用して、SOAPメッセージのパーツにアクセスできます。
次のSOAPメッセージ例では、ノードarg0の値はjohnです。
         <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
           <S:Header/>
             <S:Body>
               <ns2:echo xmlns:ns2="http://project1/">
                <arg0>john</arg0>
               </ns2:echo>
             </S:Body>
         </S:Envelope>
XPathには、要素、属性、テキスト、ネームスペース、処理の指示、コメントおよびドキュメント・ノードの7種類のノードがあります。XPathでは、パス式を使用してXMLドキュメントのノードを選択します。表4-1は、XPath式の例を示しています。
表4-1 XPath式の例
| 式 | 説明 | 
|---|---|
| /S:Envelope | ルート要素S:Envelopeから選択します。 | 
| /S:Envelope/S:Body | S:Envelopeの子であるすべてのS:Body要素を選択します。 | 
| //S:Body | ドキュメント内のどこにあっても、すべてのS:Body要素を選択します。 | 
4.4.2 ノードの値の特定
XPath式を使用してノードarg0の値を特定するには、次の例を参照してください。
次に、例を示します。
//xpath expression that will be used to identify the node arg0
     String xpathStr = "/S:Envelope/S:Body/ns2:echo/arg0";
 4.4.3 名前空間コンテキストへの名前空間の追加
XPath式が参照するいずれかの名前空間に名前空間を定義して、その名前空間コンテキストに追加できます。
次に例を示します。
     final DefaultNamespaceContext nsContext = new DefaultNamespaceContext();
     nsContext.addEntry("S", "http://schemas.xmlsoap.org/soap/envelope/");
     nsContext.addEntry("ns2", "http://project1/");
              
     XPathFactory xpathFact = XPathFactory.newInstance();
     XPath xpath = xpathFact.newXPath();
     xpath.setNamespaceContext(nsContext);
4.5 SSLのコンテナで使用される証明書の取得
oracle.wsm.common.sdk.IMessageContextを使用して証明書の属性にアクセスすることで、SSLの証明書を取得できます。
                  
SSLの証明書を取得するには:
4.6 トランスポート・プロパティへのアクセス
次の例に示したものと同じメッセージ・コンテキストを使用し、メッセージ・コンテキストからTransportContextを取得することで、HTTPリクエストとHTTPレスポンスのトランスポート・プロパティにアクセスできます。
                  
HTTPリクエストとHTTPレスポンスのトランスポート・プロパティにアクセスするには:
4.7 資格証明ストア・フレームワークのキーへのアクセス
資格証明ストア・フレームワーク(CSF)を使用して、資格証明を安全に管理し、資格証明を保存、取得および維持できます。
CSFを構成して使用するには:
注意:
JARファイルoracle.jps_12.1.2/jps-api.jar、oracle.jps_12.1.2/jps-unsupported-api.jarがclasspathに含まれている必要があります。
                        
カスタム・ポリシー・エグゼキュータのjarに対して、CredentialAccessPermission権限を指定する必要があります。権限付与の詳細は、『Oracle Platform Security Servicesによるアプリケーションの保護』のJavaセキュリティ・ポリシーの権限の設定関する項を参照してください。
4.8 カスタム・アサーションでの例外処理
カスタム・アサーション・エグゼキュータでWSMExceptionメソッドを使用して例外を処理できます。
詳細は、以下のトピックを参照してください。
4.8.1 WSMExceptionメソッドについて
カスタム・アサーション実行中の例外は、すべてWSMExceptionがカスタム・アサーション・エグゼキュータで処理する必要があります。
IResult execute(IContext mcontext) throws WSMException
このメソッドは、常に、null以外のIResultオブジェクトを返します。ステータス・フィールドは、成功、失敗または他の状態を示します。IResult.getFault()メソッドは失敗の詳細な原因を返すために使用され、成功の場合はnullを返します。
4.8.2 WSMExceptionでの例外処理
カスタム・アサーション・エグゼキュータのexecuteメソッド内で発生する例外は、まず、WSMExceptionでラップして、実行ステータスをIResult.FAILEDに設定し、generateFaultメソッドでWSMExceptionをスローする必要があります。
この例を次に示します。
IResult execute(IContext mcontext) throws WSMException {
   IResult result = new Result();
   try {
      ....
      .....
 
   } catch (Exception e) {
      WSMException wsmException = new WSMException(e);
      result.setStatus(IResult.FAILED);
      generateFault(wsmException);
   }
}