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

第8章 サポートされるデータ型> 8.1 XMLとJavaのデータ型マッピング

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 列挙型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;
   }
 }


目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2005