3.2.5 HolderクラスによるINOUTパラメタの格納
リモートインタフェースのメソッドのパラメタに,INOUTパラメタを格納するためにHolderクラスを使用できます。リモートインタフェースのメソッドのパラメタ以外ではHolderクラスは使用できません。
Holderクラスの生成例,および使用できないHolderクラスの用途の例を示します。
(1) Holderクラスの生成例
-
Holderクラスを使用したリモートインタフェース
package localhost; public interface HolderTest extends java.rmi.Remote{ public void test( javax.xml.rpc.holders.StringHolder inout ) throws java.rmi.RemoteException; }
-
リモートインタフェースから,Java2WSDLコマンドによって生成されたWSDLの一部
<wsdl:definitions targetNamespace="http://localhost" ... > ... <wsdl:message name="testRequest"> <wsdl:part name="in0" type="xsd:string"/> </wsdl:message> <wsdl:message name="testResponse"> <wsdl:part name="in0" type="xsd:string"/> </wsdl:message> <wsdl:portType name="HolderTest"> <wsdl:operation name="test" parameterOrder="in0"> <wsdl:input message="intf:testRequest" name="testRequest"/> <wsdl:output message="intf:testResponse" name="testResponse"/> </wsdl:operation> </wsdl:portType> ... </wsdl:definitions>
(2) 使用できないHolderクラスの用途の例
Holderクラスは,リモートインタフェースのメソッドのパラメタだけに使用できます。メソッドの戻り値,配列の要素,およびユーザ定義のデータ型クラスのフィールドでは使用できません。
次に示す例を含む,リモートインタフェースのメソッドのパラメタ以外の用途に使用しないでください。
-
メソッドの戻り値
(例)Javaインタフェース
package localhost; public interface HolderTest extends java.rmi.Remote{ public javax.xml.rpc.holders.StringHolder test() throws java.rmi.RemoteException; }
-
配列の要素
(例)Javaインタフェース
package localhost; public interface HolderTest extends java.rmi.Remote{ public void test( javax.xml.rpc.holders.StringHolder[] inout ) throws java.rmi.RemoteException; }
-
ユーザ定義のデータ型クラスのフィールド
(例)Javaインタフェース
package localhost; public interface HolderTest extends java.rmi.Remote{ public void test( localhost.UserData data ) throws java.rmi.RemoteException; }
(例)上記のユーザ定義のデータ型クラス
package localhost; public class UserData implements java.io.Serializable { public javax.xml.rpc.holders.StringHolder value; }
このような使い方をした場合,開発支援コマンドがKDCCC0012-Eのエラーメッセージを出力して終了したり※1,通信時にC4Fault例外※2,またはRemoteException例外※3が発生したりすることがあります。
- 注※1
-
メソッドの戻り値にHolderクラスを使用した場合が該当します。
- 注※2
-
Holderクラスを注※1を除く用途に使用してSOAPアプリケーションを開発し,スタブを使用して実行した場合が該当します。
- 注※3
-
Holderクラスを注※1を除く用途に使用してSOAPアプリケーションを開発し,DIIを使用して実行した場合が該当します。