サポートされているデータ型を、outパラメタまたはinoutパラメタとして利用する場合は、Java上ではHolderクラスを利用してください。
ポイント
outパラメタとは、クライアントからは値を送信せず、サーバから値が返信される引数です。
inoutパラメタとは、クライアントから値を送信するとともに、サーバからも値が返信される引数です。
Holderクラス
Holderクラスの形式を、以下に示します。
クラス名 | クラス本体要素 | 説明 |
---|---|---|
“内容型名”Holder | public 内容型 value | public インスタンスフィールド。 |
public “内容型名”Holder() | publicデフォルトコンストラクタ。 | |
public “内容型名”Holder(内容型 initValue) | publicコンストラクタ。 |
Webサービスアプリケーション、Webサービスクライアントでは、Webサービスのout/inoutパラメタに対応するJava上の引数として、Holderクラスを使用します。
Webサービスアプリケーションでは、引数で受け取ったHolderオブジェクトのvalueフィールドに値を設定することで、その値がoutパラメタとしてサービスクライアントへ返信されます。
Webサービス呼び出し後に、Webサービスクライアントでは、引数に使用したHolderオブジェクトのvalueフィールドに返信された値が、設定されています。
Webサービスクライアントでは、Webサービス呼び出しから復帰すると、引数に使用したHolderオブジェクトのvalueフィールドに、Webサービスがoutパラメタとして返信した値が設定されています。
//Webサービスのメソッド public int serverMethod(int inParam, IntHolder inoutParam, StringHolder outParam) throws RemoteException { int number = inoutParam.value; // inoutパラメタは入力値を参照し必要な処理を行う : // out/inout パラメタのvalueフィールドに値を代入(return時、クライアントに返信される) inoutParam.value = 10; outParam.value = "abc"; return 0; }
例
Holderクラスの使用例(Webサービスクライアント)
//パラメタの準備 int inParam = 123; IntHolder inoutParam = new IntHolder(987); StringHolder outParam = new StringHolder(); //Webサービスの呼出し(サーバが上記の例の場合、resultには0が入る) int result = portStub.serverMethod(inParam, inoutParam, outParam); //返信されたout/inoutパラメタ値の利用(out/inoutパラメタのvalueフィールドから値を取得) int inoutResult = inoutParam.value; //(サーバが上記の例の場合、10) String outResult = outParam.value; //(サーバが上記の例の場合、"abc") :
標準でHolderクラスが提供されているデータ型
単純型の多くのデータ型については、javax.xml.rpc.holders パッケージに標準のHolderクラスが提供されていますので、これらのHolderクラスを使用します。
StringHolder, BooleanHolder, BooleanWrapperHolder, ByteHolder, ByteWrapperHolder, DoubleHolder, DoubleWrapperHolder, FloatHolder, FloatWrapperHolder, IntHolder, IntegerWrapperHolder, LongHolder, LongWrapperHolder, CalendarHolder, QNameHolder, ShortHolder, ShortWrapperHolder, BigDecimalHolder, BigIntegerHolder, ByteArrayHolder
名前に“Wrapper”が含まれるHolderクラスは、プリミティブ型に対応するラッパクラスのHolderクラスです(例:BooleanWrapperHolderは、java.lang.BooleanクラスのHolderクラスです。boolean型のHolderクラスはBooleanHolderです)。
Interstage Webサービスでは、以下のHolderクラスを利用できます。
Javaクラス | Holderクラス |
---|---|
java.net.URI | com.fujitsu.interstage.isws.apis.holders.URIHolder |
javax.activation.DataHandler | com.fujitsu.interstage.isws.apis.holders.DataHandlerHolder |
java.awt.Image | com.fujitsu.interstage.isws.apis.holders.ImageHolder |
javax.mail.internet.MimeMultipart | com.fujitsu.interstage.isws.apis.holders.MimeMultipartHolder |
javax.xml.transform.Source | com.fujitsu.interstage.isws.apis.holders.SourceHolder |
標準でHolderクラスが提供されていないデータ型
配列や構造体など、標準でHolderクラスが提供されていない場合、以下の条件を満たすように固有のHolderクラスを用意して使用します。
Holderクラスに記載されたHolderクラスの形式を満たすpublicクラスである
javax.xml.rpc.holders.Holder インタフェースをimplementsしている
利用するデータ型クラスのパッケージに“holders”を付加したパッケージに属している(例:com.example.Personの場合、com.example.holders.PersonHolderになります)
例
Holderクラスの定義例(内容型がcom.example.Personクラスの場合)
package com.example.holders; final public class PersonHolder implements javax.xml.rpc.holders.Holder { public com.example.Person value; public PersonHolder() {} public PersonHolder(com.example.Person initial) { value = initial; } }
Webサービスアプリケーションでのoutパラメタの使用
サービスエンドポイントインタフェースでパラメタにHolderクラスを使用した場合、iswsgen wsdl コマンドなどで生成されるWSDLでは、該当のパラメタはinoutパラメタになります。
inoutパラメタではなくoutパラメタとする必要がある場合は、WSDLを修正してoperationの該当パラメタがoutパラメタになるように、inputメッセージから該当のパラメタを削除してください。
WSDLを修正する場合は、WSDLの仕様などを参照して該当部分のみを正しく修正してください。