5 コールアウトの操作
この章では、Oracle SOA Suite for healthcare integrationでJavaコールアウトを作成および使用する方法について説明します。Oracle SOA Suite for healthcare integrationでは、ヘルスケア・コンポジットの作成に必要なほとんどの機能を、Oracle Healthcareコンソールで使用できる様々な構成を使用して提供します。ただし、Javaコールアウトを使用して構成を拡張したり、Javaで記述された機能を追加できます。たとえば、Javaコールアウトを使用して、HL7メッセージ内の非標準デリミタをプログラムで処理できます。Javaコールアウトを使用してPGP暗号化/復号化ロジックを記述することもできます。
この章のトピックは、次のとおりです:
5.1 コールアウトの概要
コールアウトは、リモート取引パートナとは異なるメッセージ書式をホスト・エンドポイントで使用している環境で使用されます。
また、コールアウトは、メッセージのヘッダー情報をカスタマイズするためにも使用されます。
5.1.1 コールアウト・ライブラリJARファイルの作成
Oracle SOA Suite for healthcare integrationに用意されているコールアウトJARファイルがユーザーのニーズを十分に満たさない場合は、Oracle Fusion Middleware B2B Callout Java APIリファレンスに記載されている標準に従って、Oracle SOA Suite for healthcare integrationの外部で独自のコールアウトJARファイルを作成できます。外部JARファイルのディレクトリの場所は、「コールアウト・ディレクトリ」フィールドに指定できます。このフィールドにアクセスするには、図5-1に示すように、Oracle SOA Suite for healthcare integrationユーザー・インタフェースで、「管理」タブ→「設定」→「ランタイム」リンクの順に選択します。独自のコールアウト用には、外部JARファイルを作成することをお薦めします。独自のコールアウトはb2b.jar
にバンドルしないでください。
注意:
MySampleCalloutは制限されたキーワードであるため使用しないでください。すでにb2b.jar
にパッケージされています。
5.2 コールアウトのタイプ
Oracle SOA Suite for healthcare integrationでは次の2タイプのコールアウトが提供されます。
5.2.1 トランスポート・コールアウト
トランスポート・コールアウトはエンドポイントに関連付けられます。インバウンド・メッセージの場合、Oracle SOA Suite for healthcare integrationはリモート・エンドポイントからメッセージを受信するとすぐにトランスポート・コールアウトを呼び出します。アウトバウンド・メッセージの場合、Oracle SOA Suite for healthcare integrationはリモート・エンドポイントにメッセージを送信する直前にトランスポート・コールアウトを呼び出します。トランスポート・コールアウトは、図5-2で示されているようにエンドポイント構成で選択でき、サポートされている任意のプロトコル(一般的なTCPやMLLP 1.0など)で使用できます。
トランスポート・コールアウトを使用すると、インバウンド・メッセージのトランスポート・カスタム・ヘッダーを抽出して、アウトバウンド・メッセージのトランスポート・ヘッダーを設定できます。例 - CUSTOM_HEADERプロパティの設定と取得では、コールアウトでCUSTOM_HEADER
プロパティを設定および取得する方法を示します。
例 - CUSTOM_HEADERプロパティの設定と取得
import java.util.*;
import oracle.tip.b2b.callout.*;
import oracle.tip.b2b.callout.exception.*;
public class SampleCallout implements Callout {
public void execute(CalloutContext context,List input,List output)
throws CalloutDomainException, CalloutSystemException {
try {
CalloutMessage cmIn = (CalloutMessage)input.get(0);
String s =cmIn.getBodyAsString();
//for getting the CUSTOM_HEADER
Properties params = (Properties)cmIn.getParameters();
String customHeader = (String)params.get("CUSTOM_HEADER");
//for setting the CUSTOM_HEADER
CalloutMessage cmOut = new CalloutMessage(s);
cmOut.setParameter("CUSTOM_HEADER", "your_value");
output.add(cmOut);
} catch (Exception e) {
throw new CalloutDomainException(e);
}
}
}
トランスポート・コールアウトはPGP暗号化/復号化にも使用できます。Javaコールアウトでは、外部システムまたはエンドポイントに送信されるHL7メッセージを暗号化できます。受信者側で、Javaコールアウトは受信したデータを復号化できます。
詳細は、Oracle Fusion Middleware Oracle B2Bユーザーズ・ガイドのトランスポート・コールアウトを使用したカスタム・ヘッダーの抽出を参照してください。
トランスポート・コールアウトは、コールアウトの作成で説明するように、「デザイナ」の「構成」タブで作成しますすべてのトランスポート・コールアウトは、エンドポイント・ページの「トランスポート・コールアウト」リストと「ドキュメント・コールアウト」リストの両方に表示され、選択できます。混乱を回避するには、トランスポート・コールアウトの作成時にタイプがわかる名前を付けて、「ドキュメント・コールアウト」リストから選択しないようにしてください。
5.2.2 ドキュメント・コールアウト
ドキュメント・コールアウトは、同じメッセージ書式を使用していないエンドポイント間で通信を行うために使用されます。たとえば、リモート・エンドポイントがHL7 2.3.1 XML書式のメッセージをホスト・エンドポイントに送信するとします。ホスト・エンドポイントはHL7 2.5 XML書式メッセージを使用しています。
2つの異なる書式間での通信を可能にするには、次のように2つのコールアウトを作成します。
-
たとえば、1つ目のコールアウト
callout_inbound
によって、リモートのメッセージがホスト・エンドポイントで認識される書式に変換されます。これに対して、ホスト・エンドポイントは、HL7 2.5 XML書式の発注受入れメッセージを使用して、リクエスト・メッセージに応答します。 -
たとえば、2つ目のコールアウト
callout_outbound
では、HL7 2.5 XML書式がリモート・エンドポイントのためにHL7 2.3.1 XML書式のメッセージに戻されます。
これら2つのコールアウトを、次のように2つのエンドポイントに関連付けます。
-
callout_outbound
は、アウトバウンド・メッセージのエンドポイント(メッセージ・リクエストを送信するエンドポイント)に関連付けます。 -
callout_inbound
は、インバウンド・メッセージのエンドポイント(メッセージ受入れを応答するエンドポイント)に関連付けます。
ドキュメント定義はエンドポイントのコンポーネントであるため、コールアウトは特定のドキュメント定義に関連付けられます。
この例は、1つのコールアウトから1つのエンドポイントへの単純なアソシエーションを示しています。しかし、実際には、1つ以上のコールアウト・パラメータの値を変更することによって、同じコールアウトを多数の異なるエンドポイントにインクルードできます。パラメータを追加する場所については、図5-4を参照してください。パラメータ属性のリストは、表5-2を参照してください。
ドキュメント・コールアウトを使用して、HL7メッセージ内の非標準デリミタを処理することもできます。たとえば、受信者側システムが、healthcareコンポーネントが想定する"|"ではなく非標準の"^"をデリミタとして使用してHL7メッセージを送信した場合、非標準デリミタを標準デリミタに変換するJavaコールアウトを記述できます。
5.3 コールアウトの作成
コールアウトを作成するには、コールアウトの詳細(ライブラリ名と実装クラス名)およびコールアウト・パラメータを指定します。
図5-4は、コールアウトを示しています。
注意:
外部コールアウト・ライブラリJARファイルからコールアウトを作成するには、コールアウト・ライブラリJARファイルの作成を参照してください
コールアウトを作成するには:
表5-1に、指定するコールアウトの詳細を示します。
表5-1 コールアウトの詳細
フィールド | 説明 |
---|---|
Jarファイル名 |
コールアウト実装クラスを含むライブラリ名を選択します。 注意: 独自のコールアウトJARファイルを1つ以上指定する場合は、ディレクトリの場所を指定する必要があります。「管理」リンクの「設定」の下の「ランタイム」リンクを使用します。Oracle Healthcareに付属するデフォルトの コールアウト・ライブラリを環境間で移行するには、手動で行う必要があります。Oracle SOA Suite for healthcare integrationのエクスポートおよびインポート機能では、コールアウト・ライブラリJARは移行されません。 |
実装クラス |
実装クラス名を選択します。 注意: Oracle SOA Suite for healthcare integrationには、XML間のトランスフォーメーションに使用できる |
注意:
エンドポイントにインクルードされているコールアウトは削除できません。
コールアウトを作成したら、図5-4に示すようにタイムアウト値とオプション・パラメータを指定して構成できます。
コールアウト・パラメータは、グローバル変数の概念に似ており、特定のコールアウト使用にのみ適用可能なローカル値を指定できます。また、作成したコールアウト・パラメータは、すべてのコールアウト使用に適用可能なデフォルト値として指定できます。既存のコールアウトのコールアウト・パラメータを変更すると、そのコールアウトを使用するすべてのエンドポイントに影響を与えます。
表5-2に、オプションのコールアウト・パラメータ属性を示します。
表5-2 コールアウト・パラメータの属性
フィールド | 説明 |
---|---|
名前 |
パラメータ名を入力します。 |
タイプ |
「整数」、「浮動小数」、「文字列」、「ブール」、「日付」の中から選択します。「日付」タイプの書式はMM/DD/YYYYです。 注意: タイプを変更すると、パラメータのデフォルト値が無効になることがあります。 |
値 |
値を入力します。「暗号化」が「True」に設定されている場合、この値は暗号化されます。 |
必須 |
「True」または「False」を選択します。 |
暗号化 |
「True」または「False」を選択します。 |
説明 |
説明を入力します(オプション)。 |
作成したコールアウトは、エンドポイントへのインクルードが可能になります。詳細は、「エンドポイントへのコールアウトのインクルード」を参照してください。エンドポイントへのデプロイ後にコールアウトを変更した場合は、サーバーを再起動する必要があります。
5.4 PGPを使用したメッセージの保護
Oracle B2BおよびHealthcareでは、PGP (Pretty Good Privacy)を使用したメッセージ・レベルのセキュリティがサポートされます。PGPには、対称キーと公開キーの両方の暗号化機能が統合されています。PGPは、1回かぎりの、ランダムに生成されるセッション・キーをテキスト用に作成します。プレーン・テキストはセッション・キーによって暗号化され、次に、セッション・キーは受信者の公開キーによって暗号化されます。復号化は逆に動作します。
B2BとHealthcareでのみ、提供されるPGPコールアウトjarを使用して、この機能をトランスポート・コールアウトとして使用できます。PGPキーを作成する機能があることが必要です。
使用方法のシナリオ
インバウンド: Oracle B2B/Healthcareは外部の取引パートナから暗号化されたPGPメッセージを受信します。メッセージ処理の一部として、暗号化されたPGPメッセージは企業の秘密キーを使用して復号化されます。PGPの暗号化されたメッセージにデジタル署名が含まれている場合、デジタル署名は送信者の公開キーを使用して検証されます。また、PGPの暗号化されたメッセージにメッセージ・ダイジェストが含まれている場合、復号化の一部としてデータの整合性が検証されます。
アウトバウンド: Oracle B2B/Healthcareは外部の取引パートナに暗号化されたPGPメッセージを送信します。処理の一部として、メッセージはPGPのAPIによって外部の取引パートナの公開キーを使用して暗号化されます。暗号化の際に、企業はメッセージ・オリジン認証のためのデジタル署名と、整合性チェックのためのメッセージ・ダイジェストを追加することもできます。メッセージの署名には、企業の秘密キーが使用されます。
コールアウト・パラメータ
コールアウトを構成する際、PGPコールアウトには次のコールアウト・パラメータが必要です。
-
publicKeyLocation
-
secretKeyLocation
-
password
-
direction
-
encryptionType
EncryptionTypeは、暗号化に使用するアルゴリズムのタイプを指定するために使用します。次の表に、サポートされるタイプと、コールアウトに指定する必要がある整数値をリストします。たとえば、AES_256アルゴリズムを使用するためのencryptionTypeのコールアウト・パラメータ値は9です。
EncryptionType | 整数値 |
---|---|
TRIPLE_DES |
2 |
CAST5 |
3 |
BLOWFISH |
4 |
DES |
6 |
AES_128 |
7 |
AES_192 |
8 |
AES_256 |
9 |
TWOFISH |
10 |