3.8.3 DIIでのユーザ定義のデータ型クラスの使用

ユーザ定義のデータ型クラスとは,任意のデータ型を持つデータ型です。DIIでユーザ定義のデータ型クラスを使用する場合,データ数やデータの型は,WSDLの複合型として自由に定義できます。

ここでは,DIIでユーザ定義のデータ型クラスを使用する方法について説明します。

<この項の構成>
(1) 処理の流れ
(2) WSDLとユーザ定義のデータ型クラスのマッピング
(3) Javaソース生成時の出力先ディレクトリ
(4) ユーザ定義のデータ型クラスのClassオブジェクトを取得する方法

(1) 処理の流れ

ユーザ定義のデータ型クラスを使用する場合,必要な情報をWSDLの複合型として定義することで,対応するJavaクラスを生成できます。

ユーザ定義のデータ型クラスは,次の図に示す流れで使用します。

図3-33 ユーザ定義のデータ型クラスの使用の流れ(DII)

[図データ]

  1. 複合型が定義されているWSDLファイル名と利用するサービス名をServiceFactory#createServiceメソッドの引数に指定し,Serviceオブジェクトを呼び出します。
  2. Serviceオブジェクトの生成時にWSDLファイルからJavaソースファイルが生成されます。
  3. 2.と同時にJavaクラスにコンパイルされます。
  4. 3.でコンパイルされたJavaクラスは,DIIクラスローダによって読み込まれ,使用できる状態になります。
  5. Javaソースおよびクラスファイルは,クラスローダに読み込まれたあとに削除されます。

(2) WSDLとユーザ定義のデータ型クラスのマッピング

WSDLとユーザ定義のデータ型クラスのマッピング規則,およびgetter/setterのマッピング規則を示します。

表3-28 WSDLとユーザ定義のデータ型クラスのマッピング規則(DII)

要素属性ユーザ定義のデータ型クラス備考
xsd:schematargetNamespaceパッケージ名
xsd:complexTypenameクラス名
コンストラクタpublicである引数なしコンストラクタが定義されます。









xsd:elementnameフィールド(プロパティ)名
メソッド(アクセサ)のパラメタ名
typeフィールド(プロパティ)の型対応する型については,「12.2.6 DII使用時のサポート範囲」を参照してください。
メソッド(アクセサ)のパラメタと戻り値の型
xsd:complexContent継承java.lang.Objectクラス,またはほかのユーザ定義のデータ型クラスを継承して定義されます。
xsd:extensionbase
(凡例)
-:特にありません。

表3-29 getterのマッピング規則(DII)

要素属性ユーザ定義のデータ型クラス備考
xsd:elementnemeメソッド(アクセサ)名"get"+先頭を大文字にした名称で出力されます。戻り値がbooleanの場合は,"is"+先頭を大文字にした名称で出力されます。
type戻り値プロパティの値が返されます。

表3-30 setterのマッピング規則(DII)

要素属性ユーザ定義のデータ型クラス備考
xsd:elementnemeメソッド(アクセサ)名"set"+先頭を大文字にしたプロパティ名で出力されます。
typeパラメタプロパティと同じ型のパラメタが一つだけ出力されます。

WSDLとユーザ定義のデータ型クラスのマッピング例を次に示します。

図3-34 WSDLとユーザ定義のデータ型クラスのマッピング例(DII)

[図データ]

(3) Javaソース生成時の出力先ディレクトリ

Javaソースファイルおよびクラスファイルの出力先ディレクトリを次に示します。

Windowsの場合
<Cosminexusのインストールディレクトリ>/c4web/dii/temp
UNIXの場合
/opt/Cosminexus/c4web/dii/temp

Javaソースファイルおよびクラスファイルの出力先ディレクトリは,サーバ定義ファイルまたはクライアント定義ファイルの次のプロパティで変更できます。

サーバ定義ファイル
c4web.application.<識別子>.dii_temp_directory
クライアント定義ファイル
c4web.application.dii_temp_directory

サーバ定義ファイルについては,「10.2 サーバ定義ファイルの設定」を参照してください。クライアント定義ファイルについては,「10.3 クライアント定義ファイルの設定」を参照してください。

(4) ユーザ定義のデータ型クラスのClassオブジェクトを取得する方法

ユーザ定義のデータ型クラスを使用する場合,リフレクションを使用してプロパティの値を取得したり設定したりします。リフレクションで必要なユーザ定義のデータ型クラスのClassオブジェクトは,次の方法で取得します。

表3-31 ユーザ定義のデータ型クラスのClassオブジェクトを取得する方法

項番ユーザ定義のデータ型クラスの使用個所Classオブジェクトの取得方法
1パラメタcom.cosminexus.cws.xml.rpc.CallインタフェースのgetParameterClassByNameメソッドの引数に,パラメタのローカル名を指定して取得します。
2戻り値java.lang.ObjectクラスのgetClassメソッドを使用して,戻り値のオブジェクトから取得します。
3ユーザ定義のデータ型クラスのプロパティjava.lang.ClassクラスのgetMethodsメソッドを使用して,アクセサのjava.lang.reflect.Methodオブジェクトを取得します。アクセサによって,取得方法が次のように異なります。
アクセサがgetterの場合
java.lang.reflect.MethodインタフェースのgetReturnTypeメソッドを使用して,プロパティのClassオブジェクトを取得します。
アクセサがsetterの場合
java.lang.reflect.MethodインタフェースのgetParameterTypesメソッドを使用して,プロパティのClassオブジェクトを取得します。
4配列の要素型java.lang.ClassクラスのgetComponentTypeメソッドを使用して,配列クラスから取得します。
java.lang.ClassクラスのforNameメソッドの引数に,ユーザ定義のデータ型クラスの完全修飾名を指定して,ユーザ定義のデータ型クラスのClassオブジェクトを取得することはできません。