Interstage Application Server/Interstage Web Server J2EE ユーザーズガイド
目次 索引 前ページ次ページ

第4部 Webサービス編> 第18章 Webサービスの開発> 18.3 Javaのデータ型とXMLのデータ型との対応

18.3.5 out/inoutパラメタとしての利用

 サポートされているデータ型を、outパラメタまたはinoutパラメタとして利用する場合は、Java上ではHolderクラスを利用してください。

Holderクラス

 Holderクラスの形式を、以下に示します。

クラス名

クラス本体要素

説明

“内容型名”Holder

public 内容型 value

public インスタンスフィールド。
インスタンスが保持している値です。

public “内容型名”Holder()

publicデフォルトコンストラクタ。
valueフィールドを初期値(プリミティブ型は0またはfalse、参照型はnull)としてインスタンスを構築します。

public “内容型名”Holder(内容型 initValue)

publicコンストラクタ。
valueフィールドをinitValueに設定したインスタンスを構築します。

 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クラスを使用します。

 名前に“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クラスの定義例(内容型が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の仕様などを参照して該当部分のみを正しく修正してください。


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

Copyright 2008 FUJITSU LIMITED