Cosminexus V9 BPM/ESB基盤 サービスプラットフォーム 解説
ここでは,HTTP受付に返されたビジネスプロセスからの応答電文が,どのようにHTTPレスポンスへと処理されるかについて説明しています。
HTTPクライアントに応答を返すHTTPレスポンスは次のように分割してHTTP受付内で処理されます。
HTTPレスポンスのステータスラインは,次の形式で出力されます。
[HTTPバージョン※1][空白][ステータスコード※2][空白][理由フレーズ] |
HTTP受付に指定されたすべてのヘッダ情報はHTTPレスポンスヘッダに設定されます。
HTTPレスポンスヘッダの処理について説明します。
HTTPレスポンスヘッダに使用されるContent-Typeヘッダおよびcharset属性は,次の場合によって異なります。
表2-31 HTTPレスポンスヘッダに使用されるContent-Typeおよびcharset(応答電文フォーマット(ヘッダ変数用)が設定されている場合)
設定項目 | 応答電文にcontent-type要素が存在する場合※1 | 応答電文のhttp-header要素にcontent-type要素が存在する場合 | 応答電文にcontent-type要素およびcharset属性が存在しない場合 | ||
---|---|---|---|---|---|
content-type要素にcharset属性が存在するとき | content-type要素にcharset属性が存在しないとき | http-header要素にcharset属性が存在するとき | http-header要素にcharset属性が存在しないとき | ||
Content-Typeヘッダ | 応答電文のcontent-type要素の値が有効になります。 | 応答電文のcontent-type要素の値が有効になります。 | 応答電文のhttp-header要素のcontent-type要素の値が有効になります。※3 | 応答電文のhttp-header要素のcontent-type要素の値が有効になります。※3 | 「text/xml」が設定されます。 |
charset属性 | 応答電文のcontent-type要素のcharset属性の値が有効になります。※2 | HTTP受付定義ファイルの指定値が有効になります。 | 応答電文のhttp-header要素のcharset属性の値が有効になります。※3 | HTTP受付定義ファイルの指定値が有効になります。 | HTTP受付定義ファイルの指定値が有効になります。 |
表2-32 HTTPレスポンスヘッダに使用されるContent-Typeヘッダおよびcharset属性(応答電文フォーマット(ヘッダ変数用)を設定していない場合)
設定項目 | HTTPレスポンスヘッダ定義ファイルが存在している場合 | HTTPレスポンスヘッダ定義ファイルが存在しない場合 | ||
---|---|---|---|---|
HTTPレスポンスヘッダ定義ファイルにcontent-typeキーが存在するとき | HTTPレスポンスヘッダ定義ファイルにcontent-typeキーが存在しないとき | |||
content-typeキーの指定値にcharset属性が存在する | content-typeキーの指定値にcharset属性が存在しない | HTTPレスポンスヘッダ定義ファイルにcharsetキーが存在しない | ||
Content-Typeヘッダ | content-typeキーの指定値が有効になります。※ | content-typeキーの指定値が有効になります。※ | 「text/xml」が設定されます。 | 「text/xml」が設定されます。 |
charset属性 | content-typeキーの指定値に存在するcharset属性の値が有効になります。※ | HTTP受付定義ファイルの指定値が有効になります。 | HTTP受付定義ファイルの指定値が有効になります。 | HTTP受付定義ファイルの指定値が有効になります。 |
表2-33 HTTPレスポンスヘッダに使用されるContent-Typeヘッダおよびcharset属性
設定項目 | 応答電文のfile要素配下にcontent-type要素が存在する場合 | 応答電文のfile要素配下にcontent-type要素が存在しない場合 | |
---|---|---|---|
file要素配下のcontent-type要素にcharset属性が存在するとき | file要素配下のcontent-type要素にcharset属性が存在しないとき | ||
Content-Typeヘッダ | 応答電文のfile要素配下のcontent-type要素の値が有効になります。 | 応答電文のfile要素配下のcontent-type要素の値が有効になります。 | 設定されません。 |
charset属性 | 応答電文のfile要素配下のcontent-type要素のcharset属性の値が有効になります。 | 設定されません。 | 設定されません。 |
HTTPレスポンスのContent-Dispositionヘッダは,HTTPレスポンスのパート区分およびデータ数に応じて次の値が設定されます。ファイルをダウンロードしない場合,HTTPレスポンスにはContent-Dispositionヘッダが設定されません。
表2-34 HTTP受付が設定するContent-Dispositionヘッダの値
パート区分 | データ数 | 設定個所 | Content-Dispositionヘッダの値 | name属性 | filename属性 |
---|---|---|---|---|---|
単一パート型 | 1ファイル | HTTPレスポンスヘッダ | attachment※ | 設定されません。 | 応答電文(ヘッダ)のfilename 要素の値 |
マルチパート型 | 1ファイル+テキストデータ | HTTPレスポンスの各パートのヘッダ | form-data | 応答電文(ヘッダ)のpartID要素の値 | |
複数ファイル |
応答電文(ヘッダ)のhttp-header要素内にcontent-disposition要素が含まれていた場合,その値は無視されます。なお,HTTPレスポンスヘッダ定義ファイルでContent-Dispositionヘッダが指定されている場合はその値が有効になります。
テキストデータだけをHTTPレスポンスで返す場合,コンテンツ長を表すContent-LengthヘッダをHTTP受付で生成するかどうかは,HTTP受付定義ファイルのhttprecp.response.generate.content-lengthプロパティで指定できます。また,コンテンツ長を計算するときに使用する文字コードは,HTTP受付定義ファイルのhttprecp.http.charsetプロパティで指定できます。
HTTP受付定義ファイルの詳細は,マニュアル「サービスプラットフォーム リファレンス」の「HTTP受付定義ファイル」を参照してください。
HTTP受付定義ファイルの指定がある場合とない場合の,HTTPクライアントに渡されるContent-Lengthヘッダの値を次の表に示します。
表2-35 HTTPクライアントに渡されるContent-Lengthヘッダ
httprecp.response.generate.content-lengthプロパティの値 | HTTPレスポンスヘッダ定義ファイルのcontent-lengthキーまたは応答電文(ヘッダ)のhttp-header要素のcontent-length要素の指定有無 | HTTPクライアントに渡されるContent-Lengthヘッダの値 |
---|---|---|
true | ○ | HTTPレスポンス定義ファイルまたは応答電文(ヘッダ)で指定した値は,HTTP受付が計算したデータ長に上書きされます。 |
× | ||
false | ○ | HTTPレスポンスヘッダ定義ファイルまたは応答電文(ヘッダ)に指定したデータ長をContent-Lengthヘッダに設定します。※ |
× | HTTPクライアントにContent-Lengthヘッダを渡しません。 |
なお,ファイルを1つ以上ダウンロードする場合は,Content-Lengthヘッダをクライアントに送信する設定にしていた場合でも無効になります。また,ファイルをダウンロードしない場合でも,応答電文(ヘッダ)のignore-bodymsg要素またはHTTP受付定義ファイルのhttprecp.response.ignore-bodymsgプロパティで応答電文(ボディ)を無視する設定にしているときは,Content-Lengthヘッダが設定されません。
HTTPクライアントに送信するデータ形式ごとに,HTTPレスポンスボディの処理について説明します。
ビジネスプロセスの処理が完了したあと,HTTP受付には応答電文(ボディ)変数がXML型の文字列として返り,HTTPレスポンスボディにテキストデータとして設定されます。設定する際,指定された文字コードによってエンコードされます。
システム例外が発生した場合は,エラーメッセージIDとメッセージの内容が応答電文(ボディ)の要素に設定されます。
テキストデータで返せるデータは応答アクティビティで指定した応答電文(ボディ)の部分だけです。このため,マルチパート型のレスポンスを返す場合,テキストデータが存在するパートは1つだけとなります。
なお,ビジネスプロセスから受信した応答電文(ボディ)をHTTP受付が無視する(HTTPレスポンスに設定しない)かどうかを,応答電文(ヘッダ)のignore-bodymsg要素またはHTTP受付定義ファイルのhttprecp.response.ignore-bodymsgプロパティで設定できます。応答電文(ヘッダ)とHTTP受付定義ファイルの両方で指定した場合,応答電文(ヘッダ)の指定が優先されます。この要素(またはプロパティ)を指定し,かつダウンロードするファイルのデータが1つもない場合は,空のHTTPレスポンスボディをHTTPクライアントに返します。
ファイルのデータをダウンロードする場合,応答電文(ヘッダ)のfile要素内でダウンロード対象のファイル名などを指定します。応答電文(ヘッダ)で指定する要素と対応するHTTPレスポンスヘッダを次に示します。
表2-36 応答電文(ヘッダ)で指定する要素
応答電文(ヘッダ)で指定する要素名 | 説明 | 対応するHTTPレスポンスヘッダ (マルチパート型の場合は各パートに対応するヘッダ) |
省略した場合の値 |
---|---|---|---|
partID | マルチパート型の各パートを表すパート識別名です。 | Content-Dispositionヘッダのname属性 | local-file-name要素で指定した中間ファイル名が設定されます。マルチパート型にならない場合は指定しても無視され,name属性は付与されません。 |
file-name | HTTPクライアントにダウンロードする際のダウンロードファイル名です。 | Content-Dispositionヘッダのfilename属性 | なし(filename属性が設定されません)。 |
local-file-name | 作業フォルダ内のダウンロード対象の中間ファイル名です。指定した名称のファイルが存在しない場合はエラーになります。 | なし | 省略できません。 |
content-type※ | ダウンロードファイルのメディアタイプを指定します。 | Content-Typeヘッダ | なし(Content-Typeヘッダが設定されません)。 |
charset | ダウンロードファイルの文字コードを指定します。 | charset属性 | なし。 |
HTTP受付の応答電文の電文フォーマットにバイナリ形式または任意形式(any形式)を指定することで,HTTPレスポンスボディにバイナリデータを設定してクライアントに応答を返すことができます。
HTTPレスポンスボディにバイナリデータが設定されるのは,次の条件をすべて満たす場合だけです。
HTTPリクエストおよびHTTPレスポンスのステータスコードについて説明します。
応答時のステータスコードは,応答のタイミングおよび種類によって設定される値が異なります。ステータスコードの設定値と応答のタイミングを次の表に示します。
表2-37 設定されるステータスコード
タイミング | 応答の種類 | 応答電文(ヘッダ)でのstatus-code要素の指定 | |
---|---|---|---|
あり | なし | ||
ビジネスプロセスを呼び出す前 | HTTP受付の検証でエラーが発生した場合 | − | エラーの状況に応じてHTTP受付がステータスコードを設定します。 |
ビジネスプロセスを呼び出したあと | 正常終了の場合 | 応答電文(ヘッダ)のstatus-code要素で設定したステータスコードが使用されます。※1 | 200※2 |
フォルトの場合 | 応答電文(ヘッダ)のstatus-code要素で設定したステータスコードが使用されます。※1 | 200※3 | |
システム例外の場合 | − | HTTP受付定義ファイルのhttprecp.system-exception.status-codeプロパティの値が有効になります。※4 |
HTTPリクエストおよびHTTPレスポンスの処理でエラーが発生した場合の,メッセージIDとステータスコードの対応を次の表に示します。
表2-38 リクエスト処理でエラーが発生した場合のステータスコード一覧
メッセージID | エラー発生時の状況 | ステータスコード |
---|---|---|
KDEC80424 | 内部エラーが発生した場合(HTTPヘッダまたはHTTPボディのXML形式の変換時にエラーが発生した) | 500 |
KDEC80438 | HTTPメソッドがGETまたはPOST以外の場合 | 405 |
KDEC80439 | URLで指定されたオペレーション名が,HTTP受付で指定されたオペレーション名と一致しない場合 | 404 |
KDEC80440 | クエリ文字列,HTTPボディ,またはHTTPヘッダで無効な文字が指定された場合 | 400 |
KDEC80441 | パススルーモードの場合に,リクエストパラメタでmsgキーが指定されていない,または大文字で指定された場合 | 400 |
KDEC80442 | HTTPリクエストヘッダまたはHTTP受付定義ファイルで指定したエンコードに従ったURLのデコーディング中にエラーが発生した場合 | 500 |
KDEC80451 | 次のどちらかの原因で一意となるリクエストIDを生成できなかった場合
|
500 |
KDEC80452 | HCSCサーバランタイム定義ファイルで指定された作業フォルダルートのディレクトリが存在しない場合 | 500 |
KDEC80453 | 作業フォルダの作成に失敗した場合 | 500 |
KDEC80454 | マルチパート型HTTPリクエストのデータの受信・解析に失敗した場合 | 400 |
KDEC80457 | 中間ファイルの出力中にエラーが発生した場合 | 500 |
表2-39 レスポンス処理でエラーが発生した場合のステータスコード一覧
メッセージID | エラー発生時の状況 | ステータスコード |
---|---|---|
KDEC80424 | 内部エラーが発生した場合(HTTPレスポンスボディのストリーム取得に失敗した,またはHTTPレスポンスボディへの値の書き込み中に例外が発生した) | 500 |
KDEC80443 | 受付時に,HTTPヘッダまたはHTTPボディの解析でエラーが発生した場合 | 500 |
KDEC80444 | 応答電文のエンコーディング時にエラーが発生した場合 | 500 |
KDEC80445 | ビジネスプロセスから返されたステータスコードが,3桁より大きいか,または小さい桁数だった場合 | 500 |
KDEC80458 | 中間ファイルの読み込みに失敗した場合 | 500 |
KDEC80459 | 作業フォルダの削除に失敗した場合 | 200 |
All Rights Reserved. Copyright (C) 2012, 2019, Hitachi, Ltd.