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

|
8.1.4 Bean型
Bean型は、任意の数のデータ(メンバといいます)をプロパティとして持つ、構造体に類似したデータ型です。持つことのできるデータの数や型は、アプリケーション開発者が自由に定義できます。
Bean型では、メンバをset/getメソッドを利用して表します。また、構造体と同様にメンバをpublicインスタンスフィールドとして表すこともできます。
XMLのデータ型 |
RPCアプリケーションのパラメタ(Javaのデータ型クラス) |
inまたはreturn |
outまたはinout |
構造体 |
Bean型として定義した任意のクラス |
Bean型として定義した任意のクラス |
メンバとしてstring型のname、およびint型のageを持つXMLの構造体のWSDL定義は以下のようになります。
<complexType name="Human">
<sequence>
<element name="name" type="xsd:string "/>
<element name="age" type="xsd:int"/>
</sequence>
</complexType> |

- set/getメソッドで定義するメンバのほかに、構造体と同様にpublicインスタンスフィールドを提供することでもメンバを定義することもできます。この場合、set/getメソッドで定義するメンバと、publicインスタンスフィールドで定義するメンバで、メンバ名(プロパティ名)が重ならない様に定義してください。メンバ名(プロパティ名)の違いは、大文字小文字のみの違いではなく、スペルが異なる様に定義してください。
【in/return】
以下のように、各メンバをpublicフィールドまたは、set/getメソッドとして持つpublicクラスを定義し、それをBean型として使用します。
package パッケージ名
public classs Bean型名{
//public デフォルトコンストラクタ
public Bean型名(){};
//プロパティ(インスタンスフィールドとして表すもの)
public プロパティのデータ型 プロパティ名;
:
//プロパティ (set/getメソッドとして表すもの)
public void setプロパティ名(プロパティのデータ型 値){ }
public プロパティのデータ型 getプロパティ名(){ }
:
} |
-

- Bean型の定義例
package fujitsu.sample; // パッケージ名
public class HumanBean {
// public デフォルト(パラメタなし)コンストラクタ
public HumanBean() { name="nobody"; _age = 0; }
public HumanBean(String name, int age){ // コンストラクタ(省略可)
this.name=name;
_age=age;
}
//String型 nameプロパティ (インスタンスフィールドとして表す)
public String name;
//int型 ageプロパティ (set/getメソッドとして表す)
public void setAge(int age) { _age = age; }
public int getAge() { return _age; }
private int _age; //privateのため、メンバとして直接参照されない
} |

- Bean型のプロパティとして利用できるJavaのデータ型は、inパラメタ、または返り値として使用できるJavaのデータ型のすべてです。
- RPCクライアントアプリケーションでBean型を使用する場合は、javax.xml.rpc.encoding.TypeMappingRegistryクラスのregisterメソッドにより対応づけを登録する必要があります。
登録方法については、“Javaの値とXMLの値を変換するための変換マッピングの対応づけ”を参照してください。
Bean型のメンバの値を参照・代入する場合、構造体として使用するクラスのインスタンスのフィールドを参照・代入してください。
-

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

- RPCサーバアプリケーションでBean型をinoutパラメタとして使用する例
//RPCサーバアプリケーションのメソッド
public void server_method(HumanBeanHolder person){// Bean型はパラメタ情報としてWebサービス・マネージャに登録する。
person.value.setAge() = person.value.getAge()+1; //受け取ったBean型のメンバを直接更新する場合
person.value = new HumanBean(person.value.name, (person.value.getAge()+1)); // 新たにBean型を作成する場合
} |
上記の例のサーバメソッドは、inoutパラメタであるpersonに、RPCクライアントアプリケーションから送信されたHumanBean型のデータが保持されて呼び出されます。メソッドの処理のあと、personに保持されているHumanBean型のデータがRPCクライアントアプリケーションに送信されます。この例では、2通りの方法で、サーバメソッドが受け取ったデータのメンバageに1を加算した(つまり2が加算されます)HumanBean型のデータをRPCクライアントアプリケーションに返却しています。
- RPCサーバアプリケーションでBean型を使用する場合、Webサービス情報に、Java上でBean型を表すクラスと、XML上の型名との対応づけを記述する必要があります。これは、Javaのデータ型からXMLのデータ型への変換を行っているシリアライザ、およびXMLのデータ型からJavaのデータ型への変換を行うデシリアライザとして、それぞれにcom.fujitsu.interstage.soapx.encoding.ser.BeanSerializerFactoryとcom.fujitsu.interstage.soapx.encoding.ser.BeanDeserializerFactoryを登録することで実現します。
登録方法については、“Webサービス情報を記述するXMLタグ”に記述されている“typeMappingタグ”の説明を参照してください。
Copyright 2003 FUJITSU LIMITED