このセクションでは、XML データ・ハンドラーが XML
文書をビジネス・オブジェクトに変換する方法に関して次のことを説明します。
XML データ・ハンドラーは、XML
文書について、次のことを前提としています。
- XML 文書は適切な形式になっている。
- XML 文書は SAX パーサー要件に対応している。XML
データ・ハンドラーで使用されるデフォルトのパーサーでは、XML 文書に XML
宣言が組み込まれていることが必要です。
- XML
文書の構造は、その対応するビジネス・オブジェクトの構造と一致しなければならない。さらに、文書内のエレメントの順序は、ビジネス・オブジェクト内の属性の順序と一致している必要があります。
XML 文書をビジネス・オブジェクトに変換する場合、XML データ・ハンドラーは、ビジネス・オブジェクトが XML 文書の構造に従い、ビジネス・オブジェクト定義の要件で説明されているビジネス・オブジェクト定義の要件に適合することを前提としています。ビジネス・オブジェクトに所定のエレメント名の属性が存在しない場合、XML
データ・ ハンドラーはエラーを返します。
XML 文書をビジネス・オブジェクトに変換するために、XML
データ・ハンドラーは次の手順を実行します。
- 呼び出し元コネクターが変換メソッドにビジネス・オブジェクトを引き渡すと、データ・ハンドラーはこのビジネス・オブジェクトを使用して処理を続行します。呼び出し元がビジネス・オブジェクトを引き渡さない
場合、データ・ハンドラーはビジネス・オブジェクト名を判別して、XML
文書内のデータを格納するビジネス・オブジェクトを作成します。
ビジネス・オブジェクト名を判別するために、データ・ハンドラーはネーム・ハンドラーを起動します。
デフォルトのネーム・ハンドラーは、BOPrefix
メタオブジェクト属性、アンダースコアー、および root
エレメントの値を組み合わせて、トップレベル・ビジネス・オブジェクト名を作成します。
例えば、XML 文書に <!DOCTYPE Customer>
が含まれ、BOPrefix 属性が MyApp であれば、名前は
MyApp_Customer
となります。別の動作を構成するカスタム・ネーム・ハンドラーを設定することができます。
- データ・ハンドラーは Parser
メタオブジェクト属性の値を検索して、XML 文書の構文解析に使用する SAX
パーサーを判別します。
XML データ・ハンドラーがどの SAX パーサーを使用するかについては、SAX パーサーを参照してください。データ・ハンドラーがパーサーの名前を判別する場合、パーサーをインスタンス化します。
- データ・ハンドラーは、イベント・ハンドラー (DTD に基づく XML
文書の場合は、エンティティー・リゾルバー) をパーサーに登録します。
イベント・ハンドラーは、各 XML
エレメントと属性を処理するコールバック・メソッドです。
- 注:
- エンティティー・リゾルバーは、DTD
文書内の外部エンティティー参照を処理します。
データ・ハンドラーが有効なクラス名を持つ EntityResolver
オプションを見つけられないない場合は、com.crossworlds.DataHandlers.xml.DefaultEntityResolver
を使用します。
このエンティティー・リゾルバーは、外部参照をすべて無視します。
- データ・ハンドラーは、パーサーを起動して XML 文書を構文解析します。
- ビジネス・オブジェクトが完了すると、データ・ハンドラーはビジネス・オブジェクトを呼び出し元に返します。
- 注:
- XML
文書内で検索されたすべてのエレメントと属性について、データ・ハンドラーはビジネス・オブジェクト内で属性が検出されることを予期します。ビジネス・オブジェクト定義に所定のエレメントまたは属性名に関する属性がない場合、データ・ハンドラーはエラーを返します。この規則の例外は
FIXED
タイプの属性です。この属性は、ビジネス・オブジェクト定義では必要ありません。FIXED
属性がビジネス・オブジェクト定義に存在しない場合、FIXED 属性が XML
文書内で検出されても実行は停止しません。
