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

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

8.1.5 配列型

 以下の表に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>

 

【in/return】

 Javaの配列を使用します。

 

 Int型の1次元配列の例

  int[] value;


 UnsignedInt型の2次元配列の例

  com.fujitsu.interstage.soapx.types.UnsignedInt[][] value;

 構造体型の3次元配列の例

  構造体型として定義した任意のクラス[][][] value;

 列挙型の1次元配列の例

  列挙型として定義した任意のクラス[] value;

 列挙型の3次元配列の例

  列挙型として定義した任意のクラス[][][] value;

 Bean型の2次元配列の例

  Bean型として定義した任意のクラス[][] value;

【out/inout】

[1次元Holder]
 ZZZ.ArrayOfIntHolder, ZZZ.ArrayOfUnsignedIntHolder, ZZZ.ArrayOfShortHolder, ZZZ.ArrayOfUnsignedShortHolder, ZZZ.ArrayOfDateHolder,
 ZZZ.ArrayOfLongHolder, ZZZ.ArrayOfUnsignedLongHolder, ZZZ.ArrayOfByteHolder, ZZZ.ArrayOfUnsignedByteHolder,
 ZZZ.ArrayOfFloatHolder, ZZZ.ArrayOfDoubleHolder, ZZZ.ArrayOfBooleanHolder, ZZZ.ArrayOfStringHolder, ZZZ.ArrayOfBigDecimalHolder, ZZZ.ArrayOfBigIntegerHolder
 ZZZ.ArrayOfImageHolder, ZZZ.ArrayOfSourceHolder, ZZZ.ArrayOfMimeMultipartHolder, ZZZ.ArrayOfDataHandlerHolder

[2次元Holder]
 ZZZ.ArrayOfInt2DHolder, ZZZ.ArrayOfUnsignedInt2DHolder, ZZZ.ArrayOfShort2DHolder, ZZZ.ArrayOfUnsignedShort2DHolder, ZZZ.ArrayOfDate2DHolder,
 ZZZ.ArrayOfLong2DHolder, ZZZ.ArrayOfUnsignedLong2DHolder, ZZZ.ArrayOfByte2DHolder, ZZZ.ArrayOfUnsignedByte2DHolder,
 ZZZ.ArrayOfFloat2DHolder, ZZZ.ArrayOfDouble2DHolder, ZZZ.ArrayOfBoolean2DHolder, ZZZ.ArrayOfString2DHolder, ZZZ.ArrayOfBigDecimal2DHolder, ZZZ.ArrayOfBigInteger2DHolder
 ZZZ.ArrayOfImage2DHolder, ZZZ.ArrayOfSource2DHolder, ZZZ.ArrayOfMimeMultipart2DHolder, ZZZ.ArrayOfDataHandler2DHolder

 配列をout/inoutパラメタとして使用する場合、RPCサーバアプリケーションではZZZ.ArrayOfデータ型Holderクラスを使用します。このクラスは、以下のように配列を保持するフィールドと、コンストラクタを持っています。

クラス名

メソッド名

説明

ZZZ.ArrayOfデータ型Holder

public データ型配列 value

インスタンスフィールド。
インスタンスが現在保持している配列です。

public void ArrayOfデータ型Holder(データ型配列 initial)

コンストラクタ。
valueフィールドとして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>
   :


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

Copyright 2003 FUJITSU LIMITED