Interstage Application Server SOAPサービス ユーザーズガイド
目次 索引 前ページ次ページ

第8章 サポートされるデータ型> 8.1 XMLとJavaのデータ型マッピング

8.1.3 構造体型

 構造体型は、任意の数のデータ(メンバと言います)を持つデータ型です。持つことのできるデータの数や型は、ユーザが自由に定義できます。

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>

【in/return】

 以下のように各メンバを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;

【out/inout】

 以下の表では、構造体として定義した任意のクラスを“構造体型”、構造体型の値を保持するHolderクラスを“構造体Holder”として記述しています。

クラス名

メソッド名

説明

構造体型Holder(構造体として定義した任意のクラスのHolder)

public 構造体型 value

インスタンスフィールド。
インスタンスが現在保持している構造体の値です。

public 構造体型Holder (構造体型 initial)

コンストラクタ。
valueフィールドとして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;
   }
 }


目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2005