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; } } |
目次 索引 |