Interstage Studio プログラマーズガイド |
目次 索引 |
第2部 Java編 | > 第5章 Webサービスアプリケーションを開発する | > 5.3 留意事項 |
以下のそれぞれについて、サービスエンドポイントインタフェースを作成する場合の留意事項を示します。
サービスエンドポイントインタフェースは、java.rmi.Remoteを継承する必要があります。
サービスエンドポイントインタフェースに宣言するメソッドは、必ずjava.rmi.RemoteExceptionをthrowするように宣言します。
Webサービスでは、Javaで以下のデータ型について受け渡しをすることができます。
ユーザ定義クラス型のメンバとして配列を使うこともできます。また、ユーザ定義クラス型の配列をデータ型として使用することもできます。
style属性/use属性にRPC/LITERALを指定する場合には、プリミティブ型のラッパークラス型は使用できません。
Webサービスでは、メソッドの復帰値以外でもサーバからクライアントに値を返信することができます。値をサーバから返信するのみのパラメタをoutパラメタといい、値をクライアントから送信し、サーバから返信するパラメタをinoutパラメタといいます。
サービスエンドポイントインタフェース上では、out/inoutパラメタの区別はなく、どちらも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
style属性/use属性にRPC/LITERALを指定する場合には、プリミティブ型のラッパークラス型は使用できません。
そのため、XxxxxWrapperHolderクラスも使用できません。
ユーザ定義クラス型や配列型など、標準で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サービスでは、メソッドから例外を返すことができます。
ただし、構造体型・Bean型と同様に、使用可能な型でかつクラス内のメンバのみ、情報の受渡しが行われます。このメンバは、構造体のときはpublicインスタンスフィールド、Bean型のときはJavaBeansのget/setメソッドで表現されるプロパティです。なお、Throwable.getCause()で取得できる原因を表す例外などは受け渡しが行われません。
Webサービスで添付ファイルを使用する場合は以下のJavaの型を利用することができます。
javax.activation.DataHandler以外のクラスは、バイナリからJavaオブジェクトへ変換が行われるためオリジナルのファイルデータが完全には保持されません。Interstage Application Serverでは、バイナリのストリームをそのまま保持するjavax.activation.DataHandlerの使用を推奨しています。
目次 索引 |