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;
  }
 }


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

Copyright 2003 FUJITSU LIMITED