Interstage Application Server SOAPサービス ユーザーズガイド |
目次 索引 |
第8章 サポートされるデータ型 | > 8.1 XMLとJavaのデータ型マッピング |
列挙は、ある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> |
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 ベース型 _定義名 |
列挙に含まれる値それぞれを、定義名をつけてベース型の値として保持するフィールドです。 例) |
|
public static final 列挙型 定義名 |
列挙に含まれる値それぞれを、定義名をつけてこの列挙型のインスタンスとして保持するフィールドです。 例) |
列挙クラス使用例 (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の場合は、同じクラスを使用します。
この表では、列挙として定義されるデータ型を“列挙型”、列挙型の値を保持するHolderクラスを“列挙型Holder”として記述しています。
クラス名 |
フィールド名 |
説明 |
---|---|---|
列挙型Holder (列挙として定義した任意のクラスのHolder) |
public 列挙型 value |
インスタンスフィールド。 |
メソッド名 |
説明 |
|
public 列挙型Holder (列挙型 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; } } |
目次 索引 |