構造体型
構造体型は、任意の数のデータ(メンバと呼びます)を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として定義した構造体