生成されるコードを正しくオーバーライドする、または Java™ からサービス・データ・オブジェクト (SDO) への変換に関連して起こりうるランタイム例外を判別するには、関係のあるルールを理解することが重要です。変換の大部分は簡単なものですが、生成されたコードを変換するときに、ランタイムが最適な方法を提供するという、複雑なケースもあります。
Java クラスまたは配列から SDO に変換する場合、ランタイムが作成するデータ・オブジェクトは、Java 型のパッケージ名を反転して生成される URI を持ち、Java クラス名と同じ型を持ちます。 例えば、Java クラス com.ibm.xsd.Customer が SDO に変換されると、URI は http://xsd.ibm.com であり、Customer 型を持ちます。次にランタイムは Java クラス・メンバーのコンテンツを検査し、値を SDO 内のプロパティーに割り当てます。
SDO から Java 型に変換する場合、ランタイムは URI を反転させてパッケージ名を生成し、SDO の型と同じ型の名前を生成します。例えば、型 Customer と、URI http://xsd.ibm.com を持つデータ・オブジェクトは、Java パッケージ com.ibm.xsd.Customer のインスタンスを生成します。 次にランタイムは、SDO のプロパティーから値を抽出し、それらのプロパティーを Java クラスのインスタンス内のフィールドに割り当てます。
Java クラスがユーザー定義のインターフェースである場合、生成されるコードをオーバーライドして、ランタイムがインスタンス化できる具象クラスを作成する必要があります。ランタイムが具象クラスを作成できない場合、例外が発生します。
Java 型が java.lang.Object の場合、生成される型は xsd:anyType です。モジュールは、すべての SDO で、このインターフェースを呼び出すことができます。ランタイムは、具象クラスを見つけることができる場合は、ユーザー定義の Java クラスと配列の場合と同様にその具象クラスをインスタンス化しようとします。見つからない場合、ランタイムは SDO を Java インターフェースに渡します。
メソッドが java.lang.Object 型を戻しても、ランタイムは、メソッドが具象型を戻す場合のみ、SDO に変換します。ランタイムは、ユーザー定義の Java クラスおよび配列から SDO への変換でも同様の変換を使用します (次の段落を参照)。
Java クラスまたは配列から SDO に変換する場合、ランタイムが作成するデータ・オブジェクトは、Java 型のパッケージ名を反転して生成される URI を持ち、Java クラス名と同じ型を持ちます。 例えば、Java クラス com.ibm.xsd.Customer が SDO に変換されると、URI は http://xsd.ibm.com であり、Customer 型を持ちます。次にランタイムは Java クラス・メンバーのコンテンツを検査し、値を SDO 内のプロパティーに割り当てます。
Vector、HashMap、HashSet などのような具象 Java コンテナー・クラスに変換する場合、ランタイムは該当するコンテナー・クラスをインスタンス化します。ランタイムは、ユーザー定義の Java クラスおよび配列で使用したのと同様の方法で、コンテナー・クラスにデータを取り込みます。ランタイムが具象 Java クラスを見つけられない場合、ランタイムはコンテナー・クラスに SDO を取り込みます。
具象 Java コンテナー・クラスから SDO に変換する場合、ランタイムは、『Java から XML への変換』に示される、生成されたスキーマを使用します。
インターフェース | デフォルトの具象クラス |
---|---|
コレクション | HashSet |
マップ | HashMap |
リスト | ArrayList |
セット | HashSet |