12.1.4 データ変換APIの使用方法
データ変換APIの使用方法について説明します。
- 〈この項の構成〉
(1) クラスパスの設定
usrconf.cfg(J2EEサーバ用オプション定義ファイル)にcscdt_api.jarファイルのクラスパスを指定してください。
usrconf.cfgの詳細については,マニュアル「アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「2.2.2 usrconf.cfg(J2EEサーバ用オプション定義ファイル)」を参照してください。
(2) 定義ファイルのキャッシュ登録
データ変換APIでは定義ファイルのキャッシュの利用を推奨します。キャッシュ登録を実装する手順のシーケンスを次に示します。
全体を通した実装例は「12.1.5(1) 定義ファイルのキャッシュ登録」を参照してください。
キャッシュ登録を実装する手順を次に示します。
-
定義ファイルの読み込み
キャッシュを登録する定義ファイルをバイト配列で読み込みます。キャッシュできる定義ファイルの種類については,「12.1.2(2) キャッシュ操作」を参照してください。
-
FormatDefinitionインスタンスの生成
FormatDefinitionクラスのコンストラクタに次の引数を指定して,FormatDefinitionインスタンスを生成してください。
-
第一引数:定義ファイルの種別
-
第二引数:定義ファイルのキャッシュ名
-
第三引数:手順1で読み込んだ定義ファイルのバイト配列
FormatDefinitionインスタンスの生成の記述例を次に示します。
FormatDefinition formatDefinition = new FormatDefinition( FormatDataKind.FDX, cacheName, definitionBytes);
定義ファイルの種別はFormatDataKind列挙型で指定します。定義ファイルの種別とFormatDataKind列挙型の対応を次の表に示します。
表12‒18 定義ファイルの種別とFormatDataKind列挙型の対応表 定義ファイルの種別
FormatDataKind列挙型の指定値
バイナリフォーマット定義
FDX
データ変換定義(XSLTスタイルシート)
XSLT
なお,FormatDataKind列挙型の指定値でXSDを指定すると,キャッシュ登録処理でエラーになります。
-
-
FormatDataCacheControllerインスタンスの生成
DataTransformerCacheManagerクラスのcreateFormatDataCacheControllerメソッドを使用し,FormatDataCacheControllerインスタンスを生成します。createFormatDataCacheControllerメソッドの引数には,キャッシュの登録先であるDataTransformerインスタンスのグループ名を指定してください。
FormatDataCacheControllerインスタンスの生成の記述例を次に示します。
FormatDataCacheController formatDataCacheController = DataTransformerCacheManager.createFormatDataCacheController(groupName);
-
キャッシュ登録処理の呼び出し
手順3で生成したFormatDataCacheControllerインスタンスのregisterメソッドを使用し,キャッシュを登録します。registerメソッドの引数には,手順2で生成したFormatDefinitionインスタンスを指定してください。
キャッシュ登録処理の呼び出しの記述例を次に示します。
formatDataCacheController.register(formatDefinition);
-
ほかの定義ファイルのキャッシュ登録処理
キャッシュに登録する定義ファイルがほかに存在する場合は,手順1へ戻り,キャッシュの登録処理を実行してください。
(3) データ変換の呼び出し
データ変換を実装する手順のシーケンスを次に示します。
全体を通した実装例は「12.1.5(2) データ変換の呼び出し」を参照してください。
データ変換を実装する手順を次に示します。
-
要求電文の読み込み
データ変換の変換元データである要求電文をバイト配列として読み込みます。
-
定義ファイルの読み込み
データ変換で使用する定義ファイルをバイト配列として読み込みます。必要な定義ファイルを次に示します。
-
要求電文フォーマット定義
-
応答電文フォーマット定義
-
データ変換定義
次の場合,定義ファイルの読み込みは不要です。
-
該当する定義ファイルのキャッシュがDataTransformerインスタンスへ登録されている場合
-
要求電文,および応答電文のデータ形式がXMLの場合
-
-
FormatDefinitionインスタンスの生成
FormatDefinitionクラスのコンストラクタに次の引数を指定して,FormatDefinitionインスタンスを生成してください。
-
第一引数:定義ファイルの種別
-
第二引数:定義ファイルのキャッシュ名
FormatDefinitionインスタンスは,要求電文フォーマット定義,応答電文フォーマット定義,およびデータ変換定義のそれぞれの情報を格納するインスタンスが必要です。
FormatDefinitionインスタンスの生成の記述例(定義ファイルがキャッシュされている場合)を次に示します。
FormatDefinition inFormatDefinition = new FormatDefinition( FormatDataKind.FDX, cacheName);
第三引数の登録について次に示します。
-
定義ファイルのキャッシュがDataTransformerインスタンスへ登録されていない場合は第三引数の登録が必要です。
FormatDefinitionクラスのコンストラクタの第三引数に,手順2で読み込んだバイト配列を指定してください。定義ファイルのキャッシュが登録されている場合は,FormatDefinitionクラスのコンストラクタに定義ファイルのバイト配列を指定しても,データ変換時に無視されます。
-
要求電文,および応答電文のデータ形式がXMLの場合は第三引数の登録は不要です。
第三引数に定義ファイルのバイト配列を指定しても,データ変換時に無視されます。
FormatDefinitionインスタンスの生成の記述例(定義ファイルがキャッシュされていない場合)を次に示します。
FormatDefinition inFormatDefinition = new FormatDefinition( FormatDataKind.FDX, cacheName, definitionBytes);
-
-
InputDataDefinitionインスタンスの生成
InputDataDefinitionクラスのコンストラクタに次の引数を指定して,InputDataDefinitionインスタンスを生成してください。
-
第一引数:手順1で生成した要求電文
-
第二引数:手順3で生成した要求電文のFormatDefinitionインスタンス
InputDataDefinitionインスタンスの生成の記述例を次に示します。
InputDataDefinition[] inDataDefinition = new InputDataDefinition[3]; inDataDefinition[0] = new InputDataDefinition(inputData, inFormatDefinition); …
-
-
DataTransformerインスタンスの取得
DataTransformerCacheManagerクラスのgetDataTransformerメソッドを使用し,DataTransformerインスタンスを取得します。getDataTransformerメソッドの引数には,DataTransformerインスタンスを特定するグループ名を指定してください。
DataTransformerインスタンスの取得の記述例を次に示します。
DataTransformer dataTransformer = DataTransformerCacheManager.getDataTransformer(groupName);
-
データ変換の呼び出し
手順5で生成したDataTransformerインスタンスのtransformメソッドを使用し,データ変換を実行します。transformメソッドに次の引数を指定してください。
-
第一引数:手順4で作成したInputDataDefinitionインスタンス
-
第二引数:応答電文フォーマット定義のFormatDefinitionインスタンス
-
第三引数:データ変換定義のFormatDefinitionインスタンス
データ変換の呼び出しの記述例を次に示します。
byte[] outputData = dataTransformer.transform( inDataDefinition, outFormatDefinition, transformFormatDefinition);
-