ページの先頭行へ戻る
Interstage Application Server/Interstage Web Server J2EE ユーザーズガイド

18.3.2 構造体型・Bean型

構造体型とBean型について、説明します。

構造体型

構造体型は、任意の数のデータ(メンバと呼びます)をpublicインスタンスフィールドとして持つデータ型です。メンバは、サポートされているデータ型であれば自由に定義できます。

構造体型と、それに対応してXMLで使用される型を以下に示します。

Webサービスアプリケーションのパラメタに使用するJavaのデータ型

XMLで使用されるデータ型

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

構造体
(xsd:sequenceを内容とするxsd:complexTypeとして定義されます)

構造体型は、次の条件を満たすpublicクラスとして定義します。

構造体型として定義したクラスの例

package com.example;  // パッケージ名
 public class Person {
   public String name;    // 各メンバをpublicインスタンスフィールドとして宣言する
   public int age;        // 同上
   public Person (){        // public デフォルト(引数なし)コンストラクタ
     name="nobody";
     age=0;
   }
   public Person (String myname, int myage){  // publicコンストラクタ(省略可)
     name = myname;
     age = myage;
   }
 }

上記のJavaに対応する、XMLの構造体のWSDL定義例を以下に示します。

<xsd:complexType name="Person">
   <xsd:sequence>
     <xsd:element name="name" type="xsd:string"/>
     <xsd:element name="age" type="xsd:int"/>
   </xsd:sequence>
 </xsd:complexType>

注意

  • publicインスタンスフィールドで定義するメンバのほかに、Bean型と同様にset/getメソッドを提供することでもメンバを定義することもできます。この場合、set/getメソッドで定義するメンバと、publicインスタンスフィールドで定義するメンバで、メンバ名(プロパティ名)が重ならない様に定義してください。メンバ名(プロパティ名)の違いは、大文字小文字のみの違いではなく、スペルが異なる様に定義してください。

  • 構造体型がBean型や他の構造体型を継承しており、構造体型とそのスーパークラスの両方で同じ名前のpublicインスタンスフィールドが宣言されている場合、WSDLの生成やSOAP通信には、スーパークラスで宣言されたフィールドのみが使用されます。

Bean型

Bean型は、任意の数のデータ(メンバと呼びます)をプロパティとして持つ、構造体に類似したデータ型です。メンバは、サポートされているデータ型であれば自由に定義できます。
Bean型では、set/getメソッドを提供することでメンバを定義します。

Bean型と、それに対応してXMLで使用される型を以下に示します。

Webサービスアプリケーションのパラメタに使用するJavaのデータ型

XMLで使用されるデータ型

Bean型として定義した任意のクラス

構造体
(xsd:sequenceを内容とするxsd:complexTypeとして定義されます)

Bean型は、次の条件を満たすpublicクラスとして定義します。

Bean型の定義例

package com.example;    // パッケージ名
 public class PersonBean {
   // 各メンバをプロパティ(set/getメソッドのペア)として宣言する
   private String _name;//privateのため、メンバとして直接参照されない
   public void setName(String name) { _name = name; }
   public String getName() { return _name; }
   // 同上
   private int _age; //privateのため、メンバとして直接参照されない
   public void setAge(int age) { _age = age; }
   public int getAge() { return _age; }

   public PersonBean() {     // public デフォルト(引数なし)コンストラクタ
      _name="nobody";
      _age = 0; 
   }
   public PersonBean(String name, int age){   // publicコンストラクタ(省略可)
     _name=name;
     _age=age; 
   }
 }

上記のJavaに対応する、XMLの構造体のWSDL定義例を以下に示します。

<xsd:complexType name="Person">
   <xsd:sequence>
     <xsd:element name="name" type="xsd:string"/>
     <xsd:element name="age" type="xsd:int"/>
   </xsd:sequence>
 </xsd:complexType>

注意

  • set/getメソッドで定義するメンバのほかに、構造体と同様にpublicインスタンスフィールドを提供することでもメンバを定義することもできます。この場合、set/getメソッドで定義するメンバと、publicインスタンスフィールドで定義するメンバで、メンバ名(プロパティ名)が重ならない様に定義してください。メンバ名(プロパティ名)の違いは、大文字小文字のみの違いではなく、スペルが異なる様に定義してください。

  • Bean型が他のBean型や構造体型を継承しており、Bean型とそのスーパークラスの両方で同じ名前のpublicインスタンスフィールドが宣言されている場合、WSDLの生成やSOAP通信には、スーパークラスで宣言されたフィールドのみが使用されます。

そのほかのXMLの構造体

以下のXMLのデータ型は、Javaベースの開発では使用されませんが、WSDLおよびSOAP通信で利用は可能です。