Interstage Application Server/Interstage Web Server 移行ガイド |
目次 索引 |
第8章 その他の機能の移行 | > 8.5 SOAPサービスの移行 |
ここでは、J2EEのWebサービス機能への移行について説明します。
以下の機能は、J2EEのWebサービス機能では提供されていません。これらの機能が必要な場合は、J2EEのWebサービス機能ではなく、SOAPサービスを利用してください。
以下の機能は、J2EEのWebサービス機能では提供されていない、または、差異があります。これらの機能を利用している場合は、アプリケーションの修正が必要です。
以下のデータ型は、J2EEのWebサービス機能ではサポートされません。
SOAPサービスでこれらのデータ型を利用していた場合は、“J2EE ユーザーズガイド”の“Webサービスの開発”を参照して、これらのデータ型を利用しないインタフェースに変更してください。
以下のデータ型は、XMLのデータ型とのマッピングがJ2EEのWebサービス機能とSOAPサービスで差異があります。
Webサービスアプリケーションのパラメタに使用するJavaのデータ型
XMLで使用されるデータ型
SOAPサービス
J2EEのWebサービス機能
byte[]
xsd:byteの配列
xsd:base64Binary
java.math.BigDecimal
xsd:decimal
soapenc:decimal ※
java.math.BigInteger
xsd:integer
soapenc:integer ※
(※のデータ型はencoded利用の場合のデータ型です)
SOAPサービスでこれらのデータ型を利用していた場合は、“J2EE ユーザーズガイド”の“Webサービスの開発”を参照して、アプリケーションまたはインタフェースを変更してください。
構造体型のpublicフィールドと、フィールド名と同名のプロパティのsetメソッドまたはgetメソッドの片方のみを持つデータ型は、J2EEのWebサービス機能とSOAPサービスで扱いに差異があります。以下について確認し、該当する場合は必要に応じてデータ型を修正してください。
下記のデータ型を使用した場合、J2EEのWebサービス機能ではnameの値は送信されません。------------------------------------------------------------------------------- public class Human { public String name; //nameのpublicフィールド public void setName(String n) { name = n; } //nameのsetメソッド ///// ※getName()メソッドなし ////// public Human() { } public Human(String n, int a){ name=n; age=a; } } -------------------------------------------------------------------------------
添付ファイル型のデータを使用している場合、以下について確認し対応を行ってください。
プログラム修正
機能
SOAPサービス
J2EEのWebサービス機能
推奨
クライアントでの、プロキシを経由した接続の設定
名前が com.fujitsu.interstage.soapx.proxy で始まるプロパティをプログラムで設定します。
“J2EE ユーザーズガイド”の“Webサービスアプリケーションの運用”を参照してください。
(SOAPサービスでの設定方法は無視されます)推奨
クライアントでの、接続タイムアウトの設定
com.fujitsu.interstage.soapx.socket.timeoutプロパティをプログラムで設定します。デフォルトは5分です。
“J2EE ユーザーズガイド”の“Webサービスの開発”を参照してください。デフォルトは10分です。
(SOAPサービスでの設定方法は無視されます)必須
(該当する場合)クライアントでの、セション継続の設定
com.fujitsu.interstage.soapx.client.Stub#setMaintainSession()メソッドで設定します。
“J2EE ユーザーズガイド”の“Webサービスの開発”を参照してください。
(SOAPサービスでの設定メソッドは提供されません)必須
(該当する場合)JAX-RPC規定(javax.xml.rpc.holdersパッケージ)以外のHolderクラス
com.fujitsu.interstage.soapx.holdersパッケージでHolderクラスが提供されています。
javax.xml.rpc.holders.Holderインタフェースをimplementsして、アプリケーションで作成してください。
プログラム修正
機能
SOAPサービス
J2EEのWebサービス機能
必須
(該当する場合)サーバアプリケーションのライフサイクルの設定
Webサービス情報に設定します。“Application”、“Session”、“Request”からサーバアプリケーションのインスタンスの管理方式を選択します。
SOAPサービスにおいてApplicationが指定された場合と同等になります。リクエスト単位でサーバアプリケーションのインスタンス化が必要な場合、アプリケーションをラップする新たなアプリケーションクラスを作成してインスタンス生成と委譲するなどの対処が必要です。セションを利用する場合、アプリケーションのフィールドではなく、HttpSessionオブジェクトに情報を格納します。詳細については、“J2EE ユーザーズガイド”の“Webサービスの開発”を参照してください。
(SOAPサービスでの設定方法は提供されません)
SOAPサービスでは、統合開発環境ツール(IDE)を利用したスタブ方式と上級者向けの複雑なAPIを使用するDII方式の2つの方式がサポートされています。J2EEのWebサービス機能では、開発容易性に優れたスタブ方式をInterstage Application Serverとしてサポートしています。SOAPサービスでDII方式のクライアントアプリケーションを利用していた場合は、SOAPのクライアント部分をスタブ方式に修正してください。
また、スタブはJ2EEのWebサービス機能で生成したものに置き換える必要があります。
プログラム修正
機能
SOAPサービス
J2EEのWebサービス機能
必須
ロケータオブジェクト(Serviceオブジェクト)の取得
javax.xml.rpc.ServiceFactory# createService(javax.xml.namespace.QName serviceName)メソッドを使用します。
javax.xml.rpc.ServiceFactory#loadService(java.lang.Class generatedServiceClass)メソッドを使用します。
SOAPサービスのRPCアプリケーションでは、通信はWSDLのrpc/encoded相当の方式で行われます。J2EEのWebサービス機能は、rpc/encoded、rpc/literal、document/literalのWSDLをサポートしており、デフォルトはdocument/literalです。
またJ2EEのWebサービス機能ではJavaパッケージと名前空間名の対応、ユーザ定義型のJavaクラス名とXMLデータ型のローカル名の対応、および、オペレーションのパラメタの名前にデフォルトを持っています。デフォルトと移行前の値が異なる場合はiswsgenコマンドに対する指定が必要です。オペレーションのパラメタの名前(rpc/encodedのWSDLのpart名)は、WSDLの該当部分を書き換えてください。
詳細については、“リファレンスマニュアル(コマンド編)”の“iswsgen”を参照してください。
J2EEのWebサービス機能では、Webサービスアプリケーションのメソッドのオーバーロード(オペレーション名が同一で引数が異なる複数のメソッド)をサポートしていません。SOAPサービスでメソッドのオーバーロードを利用していた場合は、アプリケーションをラップするなどして、メソッドのオーバーロードを使用しないインタフェースに変更してください。
SOAPサービスでは、返り値がvoidのアプリケーションについて、プロパティ指定により返り値としてダミーの値が返却するオプションが提供されていました。SOAPサービスで本オプションを使用していた場合は、アプリケーションをラップするなどして、返り値をvoidからintに変更して、ダミーの値0を常に返却するように変更してください。
J2EEのWebサービス機能では、Webサービスアプリケーションで使用されるJavaのパッケージとXMLの名前空間が対応付けられます。
移行前の名前空間の利用を継続するには、“リファレンスマニュアル(コマンド編)”の“iswsgen”を参照し、オプションで名前空間名を指定してください。Javaのパッケージと名前空間が1対1に対応していない場合は、既存のクラスをラップするクラスを作成するなどして1対1に対応させてください。
SOAPサービスでは、WebサービスからFaultが返却されると、クライアントアプリケーションにはFault情報を取得できるAPIを持つjavax.xml.rpc.soap.SOAPFaultExceptionがthrowされました。
それに対して、J2EEのWebサービス機能ではその様なAPIを持たないjava.rmi.RemoteExceptionがthrowされます。同例外では、スタックトレースにFault情報も含んで出力されます。
JAX-RPC仕様上は、両方の例外がthrowされる可能性があるため、両方のExceptionをcatchしてログにスタックトレース・Fault情報を出力するようにしてください。
SOAPサービスでは、サーバアプリケーションは、任意のJARファイルにまとめるなどして、FTPなどでサーバに転送し、IJServer(Servletコンテナ)のクラスパスに設定する必要がありました。また、あらかじめIJServerにはSOAPサービスの環境を構築しておく必要があります。
J2EEのWebサービス機能では、WebサービスアプリケーションはWARファイルに含め、通常のWARファイルと同様にInterstage管理コンソールなどからIJServerに配備することで利用可能になります。IJServerに事前の特別の環境構築は不要です。WebサービスアプリケーションのWARファイルの作成については、“J2EE ユーザーズガイド”の“Webサービスの開発”を参照してください。
SOAPサービスでは、Webサービス情報として、アプリケーションの定義情報が管理されており、Webサービス情報編集ツール(GUI)またはsoapmodifyddコマンドと記述ファイルで環境に登録・更新を行います。
J2EEのWebサービス機能では、Webサービス情報に相当する情報をdeployment descriptorとして記述し、アプリケーションのWARファイルに含めます。deployment descriptorの記述およびWARファイルの作成については、“J2EE ユーザーズガイド”の“Webサービスの開発”を参照してください。
目次 索引 |