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

|
8.1.2 列挙型
列挙は、ある1つの型(boolean型以外の単純型)の値の集合をユーザが定義し、その中の1つの値を持つことができるデータ型です。
例えば、"blue","red","green"を持つことのできるstring型の列挙、1,2,3,5,7を持つことのできるint型の列挙、などのようにユーザによって任意に定義することができます。
XMLのデータ型 |
RPCアプリケーションのパラメタ(Javaのデータ型クラス) |
inまたはreturn |
outまたはinout |
列挙 |
列挙として定義した任意のクラス |
列挙として定義した任意のクラス名Holder |
列挙型の値の集合としてstring型の"blue","red",および"green" が定義されるXMLの列挙型のWSDL定義は以下のようになります。
<simpleType name="Color">
<restriction base="xsd:string">
<enumeration value="blue"/>
<enumeration value="red"/>
<enumeration value="green"/>
</restriction>
</simpleType> |
【in/return】
RPCアプリケーションで使用する列挙を表すクラスは、以下のメソッドを持つpublicクラスとして定義します。この表では、列挙の元になるデータ型を“ベース型”、列挙として定義されるデータ型自身を“列挙型”として記述されています。
クラス名 |
メソッド名 |
説明 |
列挙型(列挙として定義した任意のクラス) |
protected列挙型(ベース型 value) |
列挙型の元になるベース型の値から、列挙を表すクラスを初期化して、列挙型のインスタンスを返却するコンストラクタです。クラス内のフィールド初期化の際に使用します。通常は、このコンストラクタではなく、fromValue()を使用します。 |
public ベース型getValue() |
列挙型のこのインスタンスが表す値を、列挙の元になるベース型の値として返すメソッドです。 |
public static 列挙型 fromValue(ベース型 value) |
列挙の元になるベース型の値を指定することで、その値をこの列挙型のインスタンスとして返却するメソッドです。指定されたベース型の値が、列挙に含まれる値に該当しない場合、java.lang.IllegalArgumentExceptionが投げられます。 |
public static列挙型fromString(String value) |
列挙型の値の文字列表現を指定することで、その値を列挙型のインスタンスとして返却するメソッドです。指定された文字列表現が、列挙に含まれる値に該当しない場合、java.lang.IllegalArgumentExceptionが投げられます。 |
public String toString() |
インスタンスに保持するデータ型の値の文字列表現を返却するメソッドです。 |
public boolean equals(Object obj) |
指定されたobjとの同一性を比較するメソッドです。
指定されたobjの型が列挙を表すクラスと同一の型であり、かつ、インスタンスで保持するデータ型の値が同一の場合に返却値がtrueとなり、それ以外はfalseとなります。 |
フィールド定義 |
説明 |
public static final ベース型 _定義名 |
列挙に含まれる値それぞれを、定義名をつけてベース型の値として保持するフィールドです。
例)
"blue","red","green"というString型の3つの定義値からなる列挙型の場合、以下のように定義できます。
public static final String _blue = "blue";
public static final String _red = "red";
public static final String _green = "green"; |
public static final列挙型 定義名 |
列挙に含まれる値それぞれを、定義名をつけてこの列挙型のインスタンスとして保持するフィールドです。
例)
"blue","red","green"というString型の3つの定義値からなる列挙型の場合、以下のように定義できます。
public static final 列挙型 blue = new 列挙型(_blue);
public static final 列挙型 red = new 列挙型(_red);
public static final 列挙型 green = new 列挙型(_green); |
-

- 列挙クラス使用例 (Stringの列挙)
Color col ; // 宣言・new
// 値の取り出し・fromValue()メソッドを使用する場合
try {
col = Color.fromValue("blue"); // 値のセット
} catch (IllegalArgumentException E) {
"blue" がクラス"Color"に定義されない値であった場合のエラー処理
}
// 値の取り出し・fromString ()メソッドを使用する場合
try {
col = Color.fromString("blue"); // 値のセット
} catch (IllegalArgumentException E) {
"blue" がクラス"Color"に定義されない値であった場合のエラー処理
}
// 値の取り出し・publicメンバを直接使用する場合
col = Color.blue;
:
System.out.println(col.toString()); // 値の表示 |
クラスColorは、"blue","red","green"のどれかを持つことができます。コンストラクタでクラスColorが持つことのできるString型のデータを設定しています。
なお列挙を表すクラスが持つことのできる値としてnullを指定することはできません(オブジェクトの構築時にjava.lang.IllegalArgumentExceptionがthrowされます)。
-

- 列挙の定義例(Stringの列挙)
package fujitsu.sample; // パッケージ名
public final class Color {
private String _value;
public static final String _blue = "blue";
public static final String _red = "red";
public static final String _green = "green";
public static final Color blue = new Color( _blue );
public static final Color red = new Color( _red );
public static final Color green = new Color( _green );
public static Color fromValue( String value ){
if( value.equals(_red)) return red;
if( value.equals(_green)) return green;
if( value.equals(_blue)) return blue;
else
throw new IllegalArgumentException(value +"is not a member of Color" );
}
public static Color fromString( String value ){
if( value.equals(_red)) return red;
if( value.equals(_green)) return green;
if( value.equals(_blue)) return blue;
else
throw new IllegalArgumentException(value +"is not string expression of any member of Color" );
}
protected Color( String value ){
if( value==null ||
!value.equals(_red) && !value.equals(_green) && !value.equals(_blue) )
throw new IllegalArgumentException(value +"is not a member of Color" );
_value = value;
}
public String getValue(){
return _value;
}
public String toString(){
return _value;
}
public boolean equals(Object obj){
if( obj == null ) return false;
if( !( obj instanceof Color ) ) return false;
return _value.equals((( Color )obj)._value);
}
} |
列挙をRPCサーバアプリケーションのメソッドのパラメタとして使用する場合、in/returnの場合は、同じクラスを使用します。
-

- 列挙をRPCサーバアプリケーションのメソッドのパラメタとして使用する場合、in/returnの場合は、同じクラスを使用します。
RPCクライアントアプリケーションで列挙型を使用する場合は、javax.xml.rpc.encoding.TypeMappingRegistryクラスのregisterメソッドにより対応づけを登録する必要があります。
登録方法については、“Javaの値とXMLの値を変換するための変換マッピングの対応づけ”を参照してください。
【inout/out】
この表では、列挙として定義されるデータ型を“列挙型”、列挙型の値を保持するHolderクラスを“列挙型Holder”として記述しています。
クラス名 |
フィールド名 |
説明 |
列挙型Holder (列挙として定義した任意のクラスのHolder) |
public 列挙型 value |
インスタンスフィールド。
インスタンスが現在保持している列挙型の値です。 |
メソッド名 |
説明 |
public void列挙型Holder (列挙型 initial) |
コンストラクタ。
valueフィールドとしてinitialを持つインスタンスを作成します。 |
列挙型をRPCサーバアプリケーションのメソッドのinout/outパラメタとして使用する場合、パラメタのデータ型として 列挙型Holder を使用します。RPCサーバアプリケーションのメソッドでは、パラメタとして受け取る列挙型Holderのインスタンスのvalueフィールドを更新します。これにより、更新された列挙型の値がRPCクライアントアプリケーションへ送信されます。
以下に列挙型Colorをvalueフィールドに持つHolderクラスの作成例を記述します。
-

- RPCサーバアプリケーションで使用するHolderクラス作成例(列挙型)
import javax.xml.rpc.holders.Holder;
public class ColorHolder implements Holder {
public Color value;
public ColorHolder() {} // デフォルトコンストラクタ
public ColorHolder(Color initial){
value = initial;
}
} |
-

- 列挙をRPCサーバアプリケーションのinoutパラメタとして使用する例
// RPCサーバアプリケーションのメソッド
// 列挙型はパラメタ情報としてWebサービス・マネージャに登録する。
public void server_method(ColorHolder col) {
//colの保持値の設定・fromValue()メソッドを使用する場合
col.value = Color.fromValue("red");
//colの保持値の設定・fromString()メソッドを使用する場合
col.value = Color.fromString("red");
//colの保持値の設定・publicメンバを直接使用する場合
col.value = Color.red;
} |
上記の例のサーバメソッドは、第1パラメタcolにColorオブジェクトを保持させ、outパラメタとしてColorオブジェクトの値をRPCクライアントアプリケーションに送信します。この例では、3通りの方法で、"red"を表すColorオブジェクトを取得してcolに保持させています。
RPCサーバアプリケーションのout/inoutパラメタで列挙型の配列を使用する場合も、Holderクラスを作成します。以下にRPCサーバアプリケーションのout/inoutパラメタで1次元配列の列挙型を使用する場合のHolderクラスの作成例を記述します。

RPCサーバアプリケーションで使用するHolderクラス作成例(列挙配列型)
import javax.xml.rpc.holders.Holder;
public class ArrayOfColorHolder implements Holder {
public Color[] value;
public ArrayOfColorHolder() {} // デフォルトコンストラクタ
public ArrayOfColorHolder(Color[] initial){
value = initial;
}
} |

- RPCサーバアプリケーションで列挙を使用する場合、Webサービス情報に、Javaで列挙を表すクラスと、XMLのデータ型の対応づけを記述する必要があります。これは、Javaデータ型からXMLのデータ型への変換を行っているシリアライザ、およびXMLのデータ型からJavaのデータ型への変換を行うデシリアライザとして、それぞれにcom.fujitsu.interstage.soapx.encoding.ser.EnumSerializerFactoryとcom.fujitsu.interstage.soapx.encoding.ser.EnumDeserializerFactoryを登録することで実現します。
登録の方法については、“Webサービス情報を記述するXMLタグ”に記述されている“typeMappingタグ”の説明を参照してください。
- 列挙に含まれる定義値として、nullを使用することはできません。
Copyright 2003 FUJITSU LIMITED