Cosminexus V9 BPM/ESB基盤 サービスプラットフォーム 解説
ここでは,HTTP受付を実行するときにHTTPリクエストがどのように処理されるかについて説明しています。
HTTPクライアントが送信するHTTPリクエストは,次のように分割してHTTP受付内で処理されます。
HTTP受付では,電文フォーマットと定義ファイルを使用してHTTPリクエストのリクエストライン,HTTPリクエストヘッダ,およびHTTPリクエストボディを処理できます。
なお,ここで説明する電文の例では,名前空間接頭辞を省略しています。
HTTP受付のリクエストラインの処理について説明します。
URLのコンテキストルートは,HTTP受付定義ファイルのurecp-http.context-rootプロパティで指定できます。
urecp-http.context-rootプロパティの指定がない場合,ユーザ定義受付定義画面で設定するHTTP受付の受付IDがコンテキストルートとして使われます。HTTP受付定義ファイルの詳細は,マニュアル「サービスプラットフォーム リファレンス」の「HTTP受付定義ファイル」を参照してください。
HTTPリクエストの送信時,URLは次の形式で指定します。
URLの指定例を次に示します。
http://<ホスト名またはIPアドレス>/Test001/get?type=A&size=7 |
http://<ホスト名またはIPアドレス>/Test002/post |
オペレーション名とは,ユーザ定義受付定義画面で設定するHTTP受付のオペレーションの名称です。オペレーション名はビジネスプロセスを呼び出すときに使用されます。
なお,オペレーション名のあとに「/」が指定された場合,「/」の後ろに文字列があるときは,「/」の後ろの部分もパスとして扱われます。例えば,URLに「http://localhost/contextroot/get/abc123?type=A&size=7」が指定された場合,「/contextroot/get/abc123」がロケーション情報(<location>)にパスとして格納されます。
リクエストラインで指定されたURLは,次の要素に分割して要求電文(ヘッダ)に格納されます。
例えば,リクエストラインが「http://localhost/httprecp/get?type=A&size=7」の場合,要求電文には次のように変換されます。
<url> <location>/httprecp/get</location> <query>type=A&size=7</query> </url> |
HTTP受付で受け付けられたHTTPヘッダ部分のすべての情報は,any型で定義されたhttp-header要素に格納して,ビジネスプロセスに渡されます。
HTTPヘッダ部分の変換例を次に示します。
Accept-Language: ja Host: aaa.bbb.ccc.ddd Connection: Keep-Alive Authorization: Basic aG9nZTpmdWdh |
<http-header> <content-type>application/x-www-form-urlencoded; charset=utf-8</content-type> <Accept-Language> ja</Accept-Language> <Host> aaa.bbb.ccc.ddd </Host> <Connection> Keep-Alive</Connection> <Authorization> Basic aG9nZTpmdWdh</Authorization> </http-header> |
HTTP受付で変換されたHTTPヘッダ部分のXML要素は,SOAPアダプタのHTTPヘッダ部とany種別同士でマッピングできます。
ユーザの認証情報を格納するHTTPリクエストヘッダのAuthorizationヘッダフィールドは,Base64形式にエンコーディングされます。このため,HTTP受付は,AuthorizationヘッダフィールドをBase64形式からプレーン形式にデコードし,要求電文のXML要素に設定します。
受信したContent-Typeヘッダの値のメディアタイプをcontent-type要素として要求電文(ヘッダ)に格納します。このとき,charset属性がある場合は,content-type要素のcharset属性として格納します。
Content-Typeヘッダがない場合は,content-type要素は生成しません。また,Content-Typeヘッダのメディアタイプの指定だけがあって,charset属性がない場合は,属性を生成しません。
Content-Typeヘッダのcharset属性は,クエリまたはフォームデータのテキストデータの文字コードとして使用します。Content-Typeヘッダのcharset属性が存在しない場合,またはContent-Typeヘッダがリクエストに存在しない場合は,HTTP受付定義ファイルのhttprecp.http.charsetプロパティの値によって処理されます。ただし,この場合も,charset属性がないため,content-type要素のcharset属性を生成しません。
HTTPリクエストのパート区分およびデータ形式は,HTTPリクエストヘッダの指定に応じて次のようにHTTP受付で処理されます。
HTTP受付で扱うデータ形式ごとに,HTTPリクエストボディの処理について説明します。
HTTP受付は,クエリ,フォームデータ,マルチパート型の形式でContent-Dispositionヘッダのfilename属性がないパート部分をテキストデータとして扱います。テキストデータとして扱う場合,XML形式の要求電文(ボディ)に格納されたあと,ボディ変数としてビジネスプロセスに渡されます。
HTTPリクエストのデータ形式がテキストデータだけの場合は,メッセージボディをビジネスプロセスに渡すときのモードとして,次のどちらかを選択できます。
メッセージボディをビジネスプロセスに渡すときのモードは,HTTP受付定義ファイルのhttprecp.switchover.pass-through.modeプロパティで選択できます。HTTP受付定義ファイルの詳細は,マニュアル「サービスプラットフォーム リファレンス」の「HTTP受付定義ファイル」を参照してください。
標準モードとパススルーモードの変換例を次の表に示します。
表2-29 標準モードとパススルーモードの変換例
モード | 説明 | HTTPリクエスト(メッセージボディ) | 変換後の要求電文(ボディ) |
---|---|---|---|
標準モード | メッセージボディは「キー名=値」から「<キー名>値</キー名>」の形式に変換されます。 | product1=uCSP&product2=HiRDB%20Single%20Server | <HTTPBody> <product1>uCSP</product1> <product2>HiRDB Single Server</product2> </HTTPBody> |
パススルーモード | メッセージボディ部分は「msg(固定)=値」形式で指定します。※ 値部分は,メッセージボディのままXML形式の要求電文(ボディ)に設定されます。 |
msg=%3cHTTPBody%3e%3cproduct1%3euCSP%3c%2fproduct1%3e%3cproduct2%3eHiRDB%20Single%20Server%3c%2fproduct2%3e%3c%2fHTTPBody%3e | <HTTPBody> <product1>uCSP</product1> <product2>HiRDB Single Server</product2> </HTTPBody> |
標準モードの場合,HTTPリクエストは要求電文の変換時にHTTP受付でサニタイズされてビジネスプロセスに渡されます。
パススルーモードの場合,HTTPリクエストはサニタイズされません。このため,あらかじめユーザ自身でサニタイズする必要があります。
HTTPリクエストのパート区分がマルチパート型で,かつパート内のContent-Dispositionヘッダのfilename属性が存在するパートのデータは,HTTP受付で各パートに分割され,パートごとに中間ファイルとして作業フォルダに格納されます。
なお,ファイルのデータとして処理した場合,各パートのヘッダ情報は,次の表に示すように要求電文(ヘッダ)のfile要素にファイルのメタ情報として格納されます。
表2-30 要求電文(ヘッダ)に格納される各パートのヘッダ情報
HTTPリクエストのヘッダ | ヘッダの属性 | 任意/必須 | 説明 |
---|---|---|---|
Content-Type | − | 任意 | 各パートに指定されているファイルのメディアタイプです。 このヘッダは省略できます。 |
char-set | 任意 | 各パートに指定されているファイルの文字コードです。 この属性は省略できます。 |
|
Content-Disposition※1 | − | 必須 | Dispositionタイプを示すヘッダです。 必ず「form-data」を指定します。※2 |
name | 必須 | 各パートの名称を示す属性です。 この属性は必ず指定します。※3 |
|
filename | 任意 | アップロードするファイルのデータのファイル名を示す属性です。 この属性は省略できます。この属性を省略した場合,テキストデータ扱いになります。 |
なお,複数のファイルのデータをアップロードする場合,これらのメタ情報はファイルごとに要求電文のfile要素に繰り返して格納されます。
HTTPリクエストボディにバイナリデータを設定することで,バイナリ形式の要求電文をビジネスプロセスに送信できます。CSV形式のデータをビジネスプロセスで処理したい場合などに活用できます。
HTTP受付でバイナリデータとして扱うには,次の条件をすべて満たす必要があります。
バイナリ形式の要求電文の文字エンコーディングは,ビジネスプロセスのデータ変換時に行われます。
All Rights Reserved. Copyright (C) 2012, 2019, Hitachi, Ltd.