構造体型
構造体型は、任意の数のデータ(メンバと呼びます)をpublicインスタンスフィールドとして持つデータ型です。メンバは、サポートされているデータ型であれば自由に定義できます。
構造体型と、それに対応してXMLで使用される型を以下に示します。
| Webサービスアプリケーションのパラメタに使用するJavaのデータ型 | XMLで使用されるデータ型 | 
|---|---|
| 構造体型として定義した任意のクラス | 構造体 | 
構造体型は、次の条件を満たすpublicクラスとして定義します。
各メンバをpublicインスタンスフィールドとして持つ(transientまたはfinal修飾されていないこと)
publicインスタンスフィールドのデータ型は、すべてサポートされているデータ型である
publicデフォルトコンストラクタを持つ
java.rmi.Remoteインタフェースをimplementsしていない
例
構造体型として定義したクラスの例
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型として定義した任意のクラス | 構造体 | 
Bean型は、次の条件を満たすpublicクラスとして定義します。
各メンバをインスタンスのプロパティ(set/getメソッドのペア)として持つ
インスタンスのプロパティ(set/getメソッドのペア)のデータ型は、すべてサポートされているデータ型である
publicデフォルトコンストラクタを持つ
java.rmi.Remoteインタフェースをimplementsしていない
例
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通信で利用は可能です。
xsd:allを内容とするxsd:complexTypeとして定義された型
メンバをxsd:attributeとして定義した構造体