Cosminexus V9 BPM/ESB基盤 サービスプラットフォーム 解説

[目次][用語][索引][前へ][次へ]

2.14.5 HTTPアダプタを使用したCookie情報の引き継ぎ

HTTPアダプタでは,ビジネスプロセスから複数のサービスを呼び出す場合に,サービス呼び出し間のセッション維持(Cookie情報の引き継ぎ)ができます。

HTTPアダプタを利用したCookie情報の引き継ぎの概要を次の図に示します。

図2-120  HTTPアダプタを利用したCookie情報の引き継ぎ

[図データ]

HTTPアダプタのCookie情報の引き継ぎについて,上図を例に説明します。なお,ここで説明する電文の例では,名前空間接頭辞を省略しています。

<この項の構成>
(1) Cookie情報の引き継ぎ方法
(2) HTTPレスポンス・HTTPリクエストの変換

(1) Cookie情報の引き継ぎ方法

2つのサービス間でCookie情報を引き継ぐ場合,Cookie情報を一括して引き継ぐか,Cookie名ごとに個別に引き継ぐかを選択できます。どちらの方法を選択するかによって,使用するヘッダ変数用の電文フォーマットが異なります。

Cookie情報を一括して引き継ぐ場合
  • 要求電文フォーマットにadphttp_header_request1.xsdを使用します。
  • 応答電文フォーマットにadphttp_header_response1.xsdを使用します。

Cookie名ごとに編集できる状態で個別に引き継ぐ場合
  • 要求電文フォーマットにadphttp_header_request2.xsdを使用します。
  • 応答電文フォーマットにadphttp_header_response2.xsdを使用します。

どちらの場合も,サービス部品Aからサービス部品BにCookie情報を引き継ぐには,サービス部品Aの応答電文に含まれるCookie情報(Cookie要素)を,サービス部品Bの要求電文にマッピングしてHTTPアダプタを呼び出します。

それぞれの場合の引き継ぎ方法について説明します。

(a) Cookie情報を一括して引き継ぐ場合

電文フォーマットでは,次のようにCookie情報がすべてany型で表現されます。なお,Cookie要素を表す要素名は「Cookie_types」としています。

 
<xsd:complexType name="http-header-Cookies-type">
  <xsd:sequence>
    <xsd:any namespace="##any"
        processContents="skip" minOccurs="0" maxOccurs="unbounded" />
  </xsd:sequence>
</xsd:complexType>
 

any型の要素部分同士をサービス部品Aの応答電文からサービス部品Bの要求電文にマッピングすることで,Cookie情報を一括して引き継ぐことができます。

(b) Cookie名ごとに編集できる状態で個別に引き継ぐ場合

電文フォーマットでは,次のようにCookie情報の各属性がXML要素の属性に分割されます。なお,Cookie要素を表す要素名は「Cookie_types」としています。

 
<xsd:complexType name="cookie-type">
  <xsd:simpleContent>
    <xsd:extension base="xsd:string">
      <xsd:attribute name="name" type="xsd:string" use="required"></xsd:attribute>
      <xsd:attribute name="host" type="xsd:string" use="required"></xsd:attribute>
      <xsd:attribute name="path" type="xsd:string" use="optional"></xsd:attribute>
    </xsd:extension>
  </xsd:simpleContent>
</xsd:complexType>
 

サービス部品Aの応答電文からサービス部品Bの要求電文へのマッピング時に,Cookie名などを参照して個別に引き継ぐことができます。

(2) HTTPレスポンス・HTTPリクエストの変換

HTTPレスポンスヘッダから応答電文への変換,および要求電文からHTTPリクエストヘッダへの変換処理について説明します。

HTTPレスポンスヘッダから応答電文への変換処理
サービス部品AからHTTPレスポンスヘッダとして渡された各Set-Cookieヘッダの値は,応答電文のCookie要素に格納されます。また,Set-Cookieヘッダの各属性はCookie要素の属性値に設定されます。
複数のSet-Cookieヘッダが存在した場合は,それぞれのSet-CookieヘッダについてCookie要素が生成されます。
HTTPレスポンスヘッダから応答電文(ヘッダ)への変換例を次に示します。
  • HTTPレスポンスヘッダのSet-Cookieヘッダ
     
    Set-Cookie: AAA=1234; expires=Sat, 27-Oct -2012 10:00:00 GMT; path=/
    Set-Cookie: BBB=5678; expires=Sat, 27-Oct -2012 10:00:00 GMT;
     
  • 生成後の応答電文(ヘッダ)
     
    <Cookies>
      <Cookie name="AAA" path="/" host="hostname:80">AAA=1234; expires=Sat, 27-Aug-2011 10:00:00 GMT; path=/</Cookie>
      <Cookie name="BBB" host="hostname:80">BBB=5678; expires=Sat, 27-Aug-2011 10:00:00 GMT</Cookie>
    </Cookies>
     
注※
host属性には,サービス部品への接続に使用したホスト名とポート番号が格納されます。
Set-Cookieヘッダからpath属性を取得できなかった場合は,応答電文(ヘッダ)にpath属性を付加しないで処理されます。この場合,path属性値は"/"として扱われます。

要求電文からHTTPリクエストヘッダへの変換処理
HTTPアダプタの要求電文として渡されたCookie情報は,次の両方の条件を満たすものが送信対象としてHTTPリクエストヘッダに設定されます。
  • サービス部品のURIとCookie要素のhost属性に設定された値(ホスト名とポート番号)が完全一致する。
  • サービス部品のURIに対してCookie要素のpath属性に設定されたパスが前方一致する。
例:サービス部品のURIがhttp://localhost:80/abc/xyzの場合
  • Cookie情報のhost属性値=localhost:80, path属性値=/abc → 送信される
  • Cookie情報のhost属性値=somehost:80, path属性値=/abc → 送信されない
  • Cookie情報のhost属性値=localhost:443, path属性値=/abc → 送信されない
  • Cookie情報のhost属性値=localhost:80, path属性値=/xyz → 送信されない
  • Cookie情報のhost属性値=localhost:80, path属性値=/abc/xyz/def → 送信されない
Cookie情報が複数ある場合は,次のようにひとまとめのCookieヘッダに変換されます。
要求電文(ヘッダ)からHTTPリクエストヘッダへの変換例を次に示します。
  • 要求電文(ヘッダ)のCookie要素
     
    <Cookies>
      <Cookie name="AAA" path="/" host="hostname:80">AAA=1234; expires=Sat, 27-Oct-2012 10:00:00 GMT; path=/</Cookie>
      <Cookie name="BBB" host="hostname:80">BBB=5678; expires=Sat, 27-Oct-2012 10:00:00 GMT</Cookie>
    </Cookies>
     
    Cookieの要素名はローカル名だけ使用します。ヘッダ応答電文からヘッダ要求電文にCookie情報を一括引継した場合,ヘッダ要求電文のCookie要素の名前空間はヘッダ応答電文になりますが,名前空間を参照しないため,送信対象として正しく扱われます。
  • 生成後のHTTPリクエストヘッダ
     
    Cookie: AAA=1234; BBB=5678
     

 

注意
  • 異なるpath属性値を持つ複数のCookie要素を設定した場合,path属性値が詳細な順に,HTTPヘッダにCookie情報が設定されます。
    (例)NAME1=VALUE1 path=/, NAME2=VALUE2 path=/xyzの値を持つCookie要素を設定した場合:
    Cookie: NAME2=VALUE2; NAME1=VALUE1
  • 正常に処理できないCookie情報を受信した場合は,解析をスキップし,処理を続行します。
  • このほかに「2.2.4(4) 注意事項」に示す注意事項も参照してください。