Hitachi

Cosminexus V11 アプリケーションサーバ SOAPアプリケーション開発の手引


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

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

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

〈この項の構成〉

(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:schema

targetNamespace

パッケージ名

xsd:complexType

name

クラス名

コンストラクタ

publicである引数なしコンストラクタが定義されます。

xsd:element

name

フィールド(プロパティ)名

メソッド(アクセサ)のパラメタ名

type

フィールド(プロパティ)の型

対応する型については,「12.2.6 DII使用時のサポート範囲」を参照してください。

メソッド(アクセサ)のパラメタと戻り値の型

xsd:complexContent

継承

java.lang.Objectクラス,またはほかのユーザ定義のデータ型クラスを継承して定義されます。

xsd:extension

base

(凡例)

−:特にありません。

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

要素

属性

ユーザ定義のデータ型クラス

備考

xsd:element

neme

メソッド(アクセサ)名

"get"+先頭を大文字にした名称で出力されます。戻り値がbooleanの場合は,"is"+先頭を大文字にした名称で出力されます。

type

戻り値

プロパティの値が返されます。

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

要素

属性

ユーザ定義のデータ型クラス

備考

xsd:element

neme

メソッド(アクセサ)名

"set"+先頭を大文字にしたプロパティ名で出力されます。

type

パラメタ

プロパティと同じ型のパラメタが一つだけ出力されます。

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

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

[図データ]

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

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

Windowsの場合

<Application Serverのインストールディレクトリ>/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オブジェクトを取得することはできません。