| Interstage Application Server SOAPサービス ユーザーズガイド | 
| 目次
			索引    | 
| 第8章 サポートされるデータ型 | > 8.1 XMLとJavaのデータ型マッピング | 
以下の表にXMLの配列型と、Java言語のRPCアプリケーションで使用するデータ型の対応を示します。
| XMLのデータ型 | RPCアプリケーションのパラメタ(Javaのデータ型クラス) | |
|---|---|---|
| inまたはreturn | outまたはinout | |
| soapenc:Array | 配列 | ZZZ.ArrayOfデータ型Holder | 
配列型としてString型の配列の場合、WSDL定義は以下のようになります。
|  <complexType name ='ArrayOfString'>
   <complexContent>
     <restriction base='soapenc:Array'>
       <attribute ref='soapenc:arrayType' wsdl:arrayType='xsd:string[]'/>
     </restriction>
   </complexContent>
 </complexType> | 
 
Javaの配列を使用します。
 
Int型の1次元配列の例
| int[] value; | 
UnsignedInt型の2次元配列の例
| com.fujitsu.interstage.soapx.types.UnsignedInt[][] value; | 
構造体型の3次元配列の例
| 構造体型として定義した任意のクラス[][][] value; | 
列挙型の1次元配列の例
| 列挙型として定義した任意のクラス[] value; | 
列挙型の3次元配列の例
| 列挙型として定義した任意のクラス[][][] value; | 
Bean型の2次元配列の例
| Bean型として定義した任意のクラス[][] value; | 
| [1次元Holder] [2次元Holder] | 
配列をout/inoutパラメタとして使用する場合、RPCサーバアプリケーションではZZZ.ArrayOfデータ型Holderクラスを使用します。このクラスは、以下のように配列を保持するフィールドと、コンストラクタを持っています。
| クラス名 | メソッド名 | 説明 | 
|---|---|---|
| ZZZ.ArrayOfデータ型Holder | public データ型配列 value | インスタンスフィールド。 | 
| publicArrayOfデータ型Holder(データ型配列 initial) | コンストラクタ。 | 

2次元配列の場合は、ZZZ.ArrayOfデータ型2DHolderになります。
配列をRPCサーバアプリケーションのメソッドのinout/outパラメタとして使用する場合、パラメタのデータ型としてZZZ.ArrayOfデータ型Holder を使用します。RPCサーバアプリケーションのメソッドでは、パラメタとして受け取った、ZZZ.ArrayOfデータ型Holderクラスのインスタンスのvalueフィールドを更新します。これにより、更新された新しい配列がRPCクライアントアプリケーションへout/inoutパラメタとして送信されます。
3次元以上の単純型の配列をRPCサーバアプリケーションでinout/outパラメタとして使用する場合は、inout/outパラメタの配列データ型をvalueに持つHolderクラスを作成する必要があります。
 
 RPCサーバアプリケーションで使用する3次元配列のHolderクラスの作成例
|  import javax.xml.rpc.holders.Holder;
 class ArrayOfString3DHolder implements Holder {
   public String[][][] value;
   public ArrayOfString3DHolder() {}  // デフォルトコンストラクタ
   public ArrayOfString3DHolder( String[][][] initial ) {
     this.value = initial;
   }
 } | 
 
 RPCクライアントアプリケーションでint型の1次元配列を使用する例
|  //RPCクライアントアプリケーション
 package client;
 import javax.xml.rpc.Call;
 import javax.xml.rpc.Service;
 import javax.xml.rpc.ServiceFactory;
 import javax.xml.namespace.QName;
 import javax.xml.rpc.ParameterMode;
 import javax.xml.rpc.encoding.XMLType;
 import java.util.Map;
 class arrayClient {
   public static void main(String[] args){
        :
     Service service = ServiceFactory.newInstance().createService(new QName("",""));
     Call call = service.createCall();
        :
     call.addParameter( "iArrayHolder", XMLType.SOAP_ARRAY,
               int[].class, ParameterMode.INOUT );
     call.setReturnType(XMLType.SOAP_ARRAY,int[].class);
          :
   //パラメタの設定
     int[] inArray = new int[10];
     for(int i=0; i<inArray.length; i++)
     {
       inArray[i] = i;
     }
     Object[] params = new Object[]{ inArray };
          :
   //Webサービス呼び出し・戻り値の取得
     int[] _ret = (int[])call.invoke(params);
          :
   //INOUTパラメタの取得
     Map outParams = call.getOutputParams();
     int[] _inout = (int[])outParams.get("iArrayHolder");
          :
   //例外処理
          :
   }
 } | 
RPCサーバアプリケーションでint型の1次元配列をinoutパラメタとして使用する例
|  //RPCサーバアプリケーションのメソッド
 package server;
 import com.fujitsu.interstage.soapx.holders.ArrayOfIntHolder;
 public class arrayServer{
   public int[] server_method(ArrayOfIntHolder iArrayHolder){
     int[] iArray = iArrayHolder.value;  // ArrayOfIntHolderの保持する配列の取得
     int[] newArray = new int[iArray.length];
     for(int i=0;i<iArray.length;i++){
       newArray[i] = iArray[i] * 2;
     }
     iArrayHolder.value = newArray;  // ArrayOfIntHolderの保持する配列の再設定
     return newArray;
   }
 } | 
 上記の例では、第1パラメタのArrayOfIntHolderオブジェクトの持つ配列を取り出し、各要素に含まれる値を2倍してinoutパラメタとしてRPCクライアントアプリケーションへ送信します。
Webサービス情報ファイルの記述例
|      :
 <service name="" provider="java:RPC">
   <parameter name="className" value="server.arrayServer.server_method"/>
   <parameter name="allowedMethods" value="*"/>
   <operation name="server_method" >
     <parameter name="iArrayHolder" type="soapenc:Array"
          xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" mode="INOUT"/>
   </operation>
 </service>
     : | 
| 目次
			索引    |