Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 » SQL Anywhere サーバー プログラミング » HTTP Web サービス » HTTP Web サーバーとしての SQL Anywhere » HTTP Web サーバーでの Web サービスアプリケーションの開発

 

クライアント提供の SOAP 要求ヘッダーのアクセス

SOAP 要求のヘッダーは、NEXT_SOAP_HEADER 関数と SOAP_HEADER 関数を組み合わせて使用することによって取得できます。NEXT_SOAP_HEADER 関数は、SOAP 要求エンベロープに含まれる SOAP ヘッダーに対して反復され、次の SOAP ヘッダー名を返します。NULL を指定して呼び出すと、最初のヘッダーの名前が返されます。後続のヘッダーは、NEXT_SOAP_HEADER 関数に前のヘッダーの名前を渡すことによって取得されます。最後のヘッダーの名前を指定して呼び出すと、NULL が返されます。

次の例は、SOAP ヘッダーの取得を示しています。

SET hd_key = NEXT_SOAP_HEADER( hd_key );
    IF hd_key IS NULL THEN
      -- no more header entries
      LEAVE header_loop;
    END IF;

この関数を繰り返し呼び出すと、すべてのヘッダーフィールドが一度だけ返されます。ただし、必ずしも SOAP 要求での表示順に表示されるとはかぎりません。

SOAP_HEADER 関数は、名前付きの SOAP ヘッダーフィールドの値を返します。SOAP サービスから呼び出されていない場合は NULL を返します。Web サービスを介して SOAP 要求を処理する場合に使用します。指定したフィールド名のヘッダーが存在しない場合、戻り値は NULL です。

この例は、Authentication という SOAP ヘッダーを探します。このヘッダーが見つかると、SOAP ヘッダー全体の値を抽出し、さらに @namespace 属性と mustUnderstand 属性の値を抽出します。SOAP ヘッダーの値は、次の XML 文字列のようになります。

<Authentication xmlns="CustomerOrderURN" mustUnderstand="1">
  <userName pwd="none">
    <first>John</first>
    <last>Smith</last>
  </userName>
</Authentication>

このヘッダーの場合、@namespace 属性値は CustomerOrderURN になります。

また、mustUnderstand 属性値は 1 になります。

この XML 文字列の内部構造を、XPath 文字列に /*:Authentication/*:userName を設定した OPENXML 関数を使用して解析します。

SELECT * FROM OPENXML( hd_entry, xpath )
    WITH ( pwd LONG VARCHAR '@*:pwd',
        first_name LONG VARCHAR '*:first/text()',
        last_name LONG VARCHAR '*:last/text()' );

上記のサンプル SOAP ヘッダー値を使用した場合、SELECT 文は次のような結果セットを作成します。

pwd first_name last_name
none John Smith

この結果セットに対してカーソルが宣言され、3 つのカラム値が 3 つの変数にフェッチされます。この時点で、Web サービスに渡された関連性のある情報すべてが手中にあります。

 例