Cosminexus V9 BPM/ESB基盤 サービスプラットフォーム 解説
ここでは,HTTPアダプタの要求電文からHTTPリクエストへの変換の仕組みについて説明します。
ビジネスプロセスから渡された要求電文は,HTTPアダプタで次のように分割してHTTPリクエストに変換されます。
HTTPリクエストの設定方法および各項目の詳細について説明します。
なお,ここで説明する電文の例では,名前空間接頭辞を省略しています。
HTTPリクエストは,HTTPリクエストの構成要素ごとに,次の場所で設定します。
リクエストラインとリクエストヘッダは,上記3つの設定場所の中から任意の場所(単一の場所でも複数の場所の組み合わせでも可能)を使用して設定します。リクエストボディは要求電文(ボディ),または作業フォルダ・共通フォルダ内のファイルを使用して設定します。
図2-113 HTTPリクエストの設定例
リクエストラインとリクエストヘッダは,要求電文(ヘッダ),HTTPアダプタ実行環境プロパティファイル,HTTPアダプタ実行環境共通プロパティファイルの3つの場所で設定します。複数の場所に設定がある場合は,HTTPアダプタは優先度が高い設定を使用して処理をします。
それぞれの設定場所の優先度は次のとおりです。
表2-47 リクエストラインとリクエストヘッダの設定場所と優先度
優先度 | 設定場所 | |
---|---|---|
高 | 優先度1 | 要求電文(ヘッダ) |
| | 優先度2 | HTTPアダプタ実行環境プロパティファイル |
低 | 優先度3 | HTTPアダプタ実行環境共通プロパティファイル |
HTTPリクエストの設定は,要求電文(ヘッダ)や各プロパティファイルの中のパラメタ(要求電文(ヘッダ)の各要素やプロパティファイルの個々のプロパティ)単位で有効になります。
それぞれの設定場所には,次のような特長があります。システムの要件に合わせてこれらを適切に組み合わせることで,開発工数の削減や運用の容易化を図れます。
表2-48 リクエストラインとリクエストヘッダの設定場所と特長
設定場所 | 特長 |
---|---|
要求電文(ヘッダ) | HTTPアダプタの実行時に設定できるため,リクエストごとに動的に値を変更する必要があるパラメタの定義に適しています。 (例)リクエストメソッドやURIの指定,など |
HTTPアダプタ実行環境プロパティファイル | HTTPアダプタの1定義ごとに固定のパラメタを設定することができるため,アダプタ開発時(または運用時)に静的に決まるパラメタの設定に適しています。 (例)ファイル受信(ダウンロード)時の出力先フォルダの指定,など |
HTTPアダプタ実行環境共通プロパティファイル | すべてのHTTPアダプタに共通のパラメタを設定することができるため,システム共通の静的なパラメタの設定に適しています。 (例)認証情報やログファイルの出力先の指定,など |
図2-114 HTTPリクエストの設定例(常に固定のHTTPリクエストを発行する場合)
図2-115 HTTPリクエストの設定例(複数のHTTPアダプタの間で一部の設定を共有する場合)
このような設定方法にすることで,共有するパラメタを重複して定義する必要がなくなるため,開発工数を削減できます。また,共通のパラメタが1つのプロパティファイルで一元管理されるため,設定の確認や変更作業(本例ではサービス1の認証情報の更新に伴うHTTPアダプタの設定変更作業)が容易になります。図2-116 HTTPリクエストの設定例(HTTPリクエストの内容を動的に設定する場合)
リクエストボディは,リクエストボディに格納するデータと,データ送信種別(データの格納方法)のペアで指定します。それぞれ,次の場所で設定します。
データ送信種別に応じて,要求電文(ボディ),または作業フォルダ・共通フォルダ内のファイルが適切な形に変換された上でリクエストボディに格納され,リクエストとして発行されます。リクエストボディを発行する際の設定イメージを次に示します。
具体的な設定項目や設定方法については,「(4) HTTPリクエストボディ」を参照してください。
要求電文(ボディ)で設定できる要素の詳細については,マニュアル「サービスプラットフォーム 開発ガイド 受付・アダプタ定義編」の「3.3.13 HTTPアダプタを定義する」を参照してください。
HTTPリクエストの先頭行に記述するリクエストラインは次の形式で送信されます。
HTTPメソッド△URI△プロトコル※ |
HTTPメソッドおよびURIの指定方法について説明します。
リクエストラインのHTTPメソッドは,要求電文(ヘッダ),HTTPアダプタ実行環境プロパティファイル,およびHTTPアダプタ実行環境共通プロパティファイルに指定します。
HTTPメソッドの指定個所を次に示します。
表2-49 HTTPメソッドの指定個所
指定方法 | 項目 | 指定個所 |
---|---|---|
要求電文(ヘッダ) | HTTPメソッド | method要素 |
HTTPアダプタ実行環境プロパティファイル,HTTPアダプタ実行環境共通プロパティファイル | HTTPメソッド | adphttp.request.methodプロパティ |
要求電文(ヘッダ),HTTPアダプタ実行環境プロパティファイル,およびHTTPアダプタ実行環境共通プロパティファイルのどれにもHTTPメソッドが指定されなかった場合はエラーになります。
リクエストラインのURIは,スキーム・オーソリティ部分,パス部分,クエリ部分に分割して,要求電文(ヘッダ),HTTPアダプタ実行環境プロパティファイル,およびHTTPアダプタ実行環境共通プロパティファイルに指定します。
URIの指定個所を次に示します。
表2-50 URIの指定個所
指定方法 | 項目 | 指定個所 |
---|---|---|
要求電文(ヘッダ) | スキーム・オーソリティ | uri-scheme-authority要素 |
パス | uri-path要素 | |
クエリ | uri-query要素 | |
HTTPアダプタ実行環境プロパティファイル,HTTPアダプタ実行環境共通プロパティファイル | スキーム・オーソリティ | adphttp.request.uri-scheme-authorityプロパティ |
パス | adphttp.request.uri-pathプロパティ | |
クエリ | adphttp.request.uri-query.<追番>プロパティ |
要求電文(ヘッダ),HTTPアダプタ実行環境プロパティファイル,およびHTTPアダプタ実行環境共通プロパティファイルのどれにもスキーム・オーソリティとパスが指定されなかった場合はエラーになります。
スキーム・オーソリティのスキーム部分に「https」を指定した場合,HTTPSを使用して通信します。ただし,HTTPSを使用するには設定が必要です。詳細は,マニュアル「サービスプラットフォーム 開発ガイド 受付・アダプタ定義編」の「付録I HTTPアダプタで必要なセキュリティの設定」を参照してください。
URIの指定例を次に示します。どちらの場合も生成されるURIは「http://localhost:80/test/selectdata?name=sample&id=001」です。
<http-header-request> <uri-scheme-authority>http://localhost:80</uri-scheme-authority> <uri-path>/test/selectdata</uri-path> <uri-query> <name>sample</name> <id>001</id> </uri-query> </http-header-request> |
adphttp.request.uri-scheme-authority=http://localhost:80 adphttp.request.uri-path=/test/selectdata adphttp.request.uri-query.1=name=sample adphttp.request.uri-query.2=id=001 |
URIのクエリ部分は,要求電文(ヘッダ)に内包されるクエリ用詳細電文フォーマットをカスタマイズして指定できます。
クエリの指定例を次に示します。
<xsd:complexType name="uri-query-type"> <xsd:sequence> <xsd:any namespace="##any" processContents="skip" minOccurs="0" maxOccurs="1024" /> </xsd:sequence> </xsd:complexType> |
<xsd:complexType name="uri-query-type"> <xsd:sequence> <xsd:element name="parameter1" type="xsd:string" minOccurs="0"/> <xsd:element name="parameter2" type="xsd:string" minOccurs="0"/> </xsd:sequence> </xsd:complexType> |
<http-header-request> <uri-scheme-authority>http://localhost:80</uri-scheme-authority> <uri-path>/test/selectdata</uri-path> <uri-query> <parameter1>value1</parameter1> <parameter2>value2</parameter2> </uri-query> </http-header-request> |
http://localhost:80/test/selectdata?parameter1=value1¶meter2=value2 |
HTTPリクエストヘッダは,要求電文(ヘッダ)のhttp-header要素(any型),およびHTTPアダプタ実行環境プロパティファイル(またはHTTPアダプタ実行環境共通プロパティファイル)のadphttp.request.header.userdef.<追番>プロパティによって任意の拡張ヘッダを指定できます。
要素名はローカル名の部分だけ使用するため,任意の名前空間を指定できます。
要求電文(ヘッダ)とHTTPアダプタ実行環境プロパティファイル(またはHTTPアダプタ実行環境共通プロパティファイル)で別々のヘッダを指定した場合,要求電文(ヘッダ)の指定だけが有効になります。HTTPアダプタ実行環境プロパティファイルで指定したヘッダが要求電文(ヘッダ)の指定に追加されることはありません。
HTTPヘッダの指定例を次に示します。
<http-header-request> <http-header> <X-PRIORITY>HIGH</X-PRIORITY> <X-DOCUMENT-ID>12345-67890</X-DOCUMENT-ID> </http-header> </http-header-request> |
adphttp.request.header.userdef.1=X-PRIORITY:HIGH adphttp.request.header.userdef.2=X-DOCUMENT-ID:12345-67890 |
X-PRIORITY:HIGH X-DOCUMENT-ID:12345-67890 |
次に示すHTTPヘッダは,要求電文(ヘッダ)のhttp-header要素,およびHTTPアダプタ実行環境プロパティファイル(またはHTTPアダプタ実行環境共通プロパティファイル)のadphttp.request.header.userdef.<追番>プロパティに指定しても無視されます。
表2-51 特殊なHTTPヘッダの指定方法
ヘッダフィールド名 | 説明 |
---|---|
Content-Type | 次の個所で指定します。
|
Cookie | 次の個所で指定します。
|
Proxy-Authorization | プロキシサーバへの接続に使用するProxy-AuthorizationヘッダはJavaVMのシステムプロパティで設定します。 詳細は,「2.14.6 プロキシサーバを経由した通信」を参照してください。 |
Connection | Connection: Keep-Aliveなど,コネクション制御に関するヘッダはJavaVMのシステムプロパティで設定します。詳細は,「2.14.7 コネクション継続(Keep-Alive)を使用した通信」を参照してください。 |
Content-Length | HTTPアダプタが自動的に設定します。 |
Accept-Encoding | HTTPアダプタが自動的に設定します。 |
Authorization | 次の個所で指定します。
|
HTTPヘッダ指定時の注意事項を次に示します。
HTTPリクエストボディで送信するデータ種別は次の中から選択できます。
HTTPリクエストボディのデータ種別は,要求電文(ヘッダ)のbinding要素,およびHTTPアダプタ実行環境プロパティファイル(またはHTTPアダプタ実行環境共通プロパティファイル)のadphttp.request.part.message.bindingプロパティで指定できます。
ただし,要求電文(ヘッダ)にfiles要素が存在する場合は,上記の要素(またはプロパティ)が指定されていてもファイルデータとして扱われます。同様に,HTTPアダプタ実行環境プロパティファイル(またはHTTPアダプタ実行環境共通プロパティファイル)のadphttp.request.part.file.<追番>.input-folder-nameプロパティが存在する場合は,adphttp.request.part.message.bindingプロパティが指定されていてもファイルデータとして扱われます。
ノーマルモードでフォームデータを送信する場合,サービスプラットフォームが提供するフォームデータ用電文フォーマットをカスタマイズして指定します。
フォームデータの指定例を次に示します。
<xsd:complexType name="http-body-form-data-type"> <xsd:sequence> <xsd:any namespace="##any" processContents="skip" minOccurs="0" maxOccurs="unbounded" /> </xsd:sequence> </xsd:complexType> |
<xsd:complexType name="http-body-form-data-type"> <xsd:sequence> <xsd:element name="parameter1" type="xsd:string" minOccurs="0"/> <xsd:element name="parameter2" type="xsd:string" minOccurs="0"/> </xsd:sequence> </xsd:complexType> |
<http-body-form-data> <parameter1>value1<parameter1> <parameter2>value2<parameter2> </http-body-form-data> |
Content-Type: application/x-www-form-urlencoded parameter1=value1¶meter2=value2 |
指定したフォームデータはURLエンコードされます。デフォルトの文字コードはUTF-8です。
パススルーモードで要求電文(ボディ)で指定したデータをそのままHTTPリクエストボディに設定する場合,送信するHTTPリクエストボディの形式に合わせて要求電文(ボディ)の電文フォーマットを作成します。
HTTPアダプタでは,作業フォルダまたは共通フォルダ内のファイルを対象のサーバに送信できます。
作業フォルダとは,HTTP受付またはFTP受付がリクエストごとにHCSCサーバ内に作成する一時フォルダです。作業フォルダは,作成した受付から呼び出されたビジネスプロセス以外からは参照できません。
共通フォルダとは,システム構築時にユーザが作成する任意のフォルダです。複数のビジネスプロセスで共通して利用するファイルを格納することができます。また,共通フォルダの場合,配下のサブフォルダを使用できます。
ファイルデータを送信する場合,要求電文(ヘッダ),およびHTTPアダプタ実行環境プロパティファイル(またはHTTPアダプタ実行環境共通プロパティファイル)でファイルデータに関する情報を指定します。プロパティファイルで指定する場合は共通フォルダだけ使用できます。
ファイルデータの指定個所を次に示します。
表2-52 ファイルデータの指定方法
指定方法 | 項目 | 指定個所 |
---|---|---|
要求電文(ヘッダ) | 作業フォルダのリクエストID | request-id要素 |
使用するフォルダ | input-folder-name要素のcommon属性 | |
共通フォルダ定義名 | input-folder-name要素 | |
送信対象のファイル名※ | local-file-name要素 | |
送信データのContent-Typeヘッダフィールドのメディアタイプ | http-header-Content-Type要素 | |
送信データのContent-Typeヘッダフィールドのcharset属性値 | http-header-Content-Type要素のcharset属性 | |
HTTPアダプタ実行環境プロパティファイル,HTTPアダプタ実行環境共通プロパティファイル | 作業フォルダのリクエストID | − |
使用するフォルダ | − | |
共通フォルダ定義名 | adphttp.request.part.file.<追番>.input-folder-name | |
送信対象のファイル名※ | adphttp.request.part.file.<追番>.local-file-name | |
送信データのContent-Typeヘッダフィールドのメディアタイプ | adphttp.request.header.content-type | |
送信データのContent-Typeヘッダフィールドのcharset属性値 | adphttp.request.header.content-type.charset |
HTTPアダプタを利用したファイル送信の例を次に示します。
図2-117 HTTPアダプタを利用したファイル送信の例(共通フォルダを使用する場合)
ファイルデータを送信する場合,HTTPアダプタに渡された要求電文(ボディ)の値は無視されます。このため,指定する要求電文(ボディ)の電文フォーマットには,空のボディデータを格納するためのファイルデータ用電文フォーマットを使用します。
次に,共通フォルダのサブフォルダを使用して,HTTPリクエストでファイルを送信する場合の指定例を示します。
HTTPアダプタ要求電文(ヘッダ)の/http-header-request/http-part/files/file/local-file-name,またはHTTPアダプタ実行環境プロパティファイルのadphttp.request.part.file.<追番>.local-file-nameに共通フォルダルートからファイル名までの相対パスを指定します。
<http-header-request> : <input-folder-name common="true">com</input-folder-name> <local-file-name>/folder1/folder2/file1.doc</local-file-name> : </http-header-request> |
adphttp.request.part.file.<追番>.input-folder-name=com adphttp.request.part.file.<追番>.local-file-name=/folder1/folder2/file1.doc |
All Rights Reserved. Copyright (C) 2012, 2019, Hitachi, Ltd.