| 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>
: |
目次
索引
![]()
|