| Interstage Application Server SOAPサービス ユーザーズガイド |
目次
索引
![]()
|
| 第8章 サポートされるデータ型 | > 8.1 XMLとJavaのデータ型マッピング |
構造体型は、任意の数のデータ(メンバと言います)を持つデータ型です。持つことのできるデータの数や型は、ユーザが自由に定義できます。
|
XMLのデータ型 |
RPCアプリケーションのパラメタ(Javaのデータ型クラス) |
|
|---|---|---|
|
inまたはreturn |
outまたはinout |
|
|
構造体 |
構造体として定義した任意のクラス |
構造体として定義した任意のクラス |
メンバとしてString型のname、およびint型のageを持つXMLの構造体のWSDL定義は以下のようになります。
<complexType name="Human">
<sequence>
<element name="name" type="xsd:string "/>
<element name="age" type="xsd:int "/>
</sequence>
</complexType> |

以下のように各メンバをpublicフィールドとして持つpublicクラスを定義し、それを構造体として使用します。
package パッケージ名
public classs 構造体名{
public メンバ型 メンバ名
public メンバ型 メンバ名
:
//public デフォルトコンストラクタ
public 構造体名();
} |

構造体の定義例
package fujitsu.sample; // パッケージ名
public class Human {
public String name; // 各メンバに関して宣言する
public int age;
public Human(){ // public デフォルト(引数なし)コンストラクタ
name="nobody"; age=0;
}
public Human(String myname, int myage){ // publicコンストラクタ(省略可)
name = myname; age = myage;
}
} |

構造体のメンバの値を参照・代入する場合、構造体として使用するクラスのインスタンスのフィールドを参照・代入してください。

構造体の使用例
Human person = new Human(); //宣言・new
:
person.name = "John"; // メンバ値のセット
person.age = 25;
:
String nameOfCustomer = person.name; // メンバ値の取得
int ageOfCustomer = person.age; |
以下の表では、構造体として定義した任意のクラスを“構造体型”、構造体型の値を保持するHolderクラスを“構造体Holder”として記述しています。
|
クラス名 |
メソッド名 |
説明 |
|---|---|---|
|
構造体型Holder(構造体として定義した任意のクラスのHolder) |
public 構造体型 value |
インスタンスフィールド。 |
|
public 構造体型Holder (構造体型 initial) |
コンストラクタ。 |
構造体をRPCサーバアプリケーションのメソッドのinout/outパラメタとして使用する場合、パラメタのデータ型として 構造体型Holder を使用します。RPCサーバアプリケーションのメソッドでは、パラメタとして受け取る構造体型Holderのインスタンスのvalueフィールドを更新します。これにより、更新された構造体データがRPCクライアントアプリケーションへ送信されます。
以下に構造体型Humanをvalueフィールドに持つHolderクラスの記述例を記述します。

RPCサーバアプリケーションで使用するHolderクラス作成例(構造体型)
package fujitsu.sample; // パッケージ名
import javax.xml.rpc.holders.Holder;
public class HumanHolder implements Holder {
public Human value;
public HumanHolder() {} // デフォルトコンストラクタ
public HumanHolder(Human initial){
value = initial;
}
} |

RPCサーバアプリケーションで構造体をinoutパラメタとして使用する例
//RPCサーバアプリケーションのメソッド
//構造体型はパラメタ情報としてWebサービス・マネージャに登録する。
public void server_method(HumanHolder person) {
person.value.age = person.value.age+1; //受け取った構造体のメンバを直接更新する場合
person.value = new Human(person.value.name, (person.value.age+1)); // 新たに構造体を作成する場合
} |
上記の例のサーバメソッドは、inoutパラメタであるpersonに、RPCクライアントアプリケーションから送信されたHuman型構造体データが保持されて呼び出されます。メソッドの処理のあと、personに保持されているHuman型構造体データがRPCクライアントアプリケーションに送信されます。この例では、2通りの方法で、サーバメソッドが受け取ったデータのメンバageに1を加算した(つまり2が加算されます)Human型構造体データをRPCクライアントアプリケーションに返却しています。
RPCサーバアプリケーションのout/inoutパラメタで構造体型の配列を使用する場合も、Holderクラスを作成します。以下はサーバアプリケーションのout/inoutパラメタで1次元配列の構造体型を使用する場合のHolderクラスの作成例を記述します。

RPCサーバアプリケーションで使用するHolderクラス記述例(構造体配列型)
package fujitsu.sample; // パッケージ名
import javax.xml.rpc.holders.Holder;
public class ArrayOfHumanHolder implements Holder {
public Human[] value;
public ArrayOfHumanHolder() {} // デフォルトコンストラクタ
public ArrayOfHumanHolder(Human[] initial){
value = initial;
}
} |

目次
索引
![]()
|