Apache SOAP を使用して開発された Web サービスを、
Web Services for Java 2 Platform, Enterprise Edition (J2EE) 仕様に基づいて開発された Web サービスに
マイグレーションすることができます。
始める前に
Apache SOAP に基づいた Web サービスを使用していて、Java ベースの Web サービス
を開発およびインプリメントする必要が生じた場合は、すべてのバージョン 4.0、および 5.0.2 より前のバージョン 5.0 を使用して開発したクライアント・アプリケーションをマイグレーションする必要があります。
このタスクについて
以下の手順で、Java 標準に従ってこれらのクライアント・アプリケーションをマイグレーションします。
プロシージャー
- マイグレーション戦略の計画を立てます。
Apache SOAP クライアントを、Java API for XML-based RPC (JAX-RPC) の Web サービス・クライアントに
移植する方法は、2 つあります。
JAX-RPC はユーザー作成のシリアライザーでフレームワークを指定
しないため、JAX-RPC はカスタム・シリアライザーの使用をサポートしません。
アプリケーションが
WebSphere Application Server でサポートされている Java、WSDL、または XML テクノロジー間のデフォルトの
マッピングに準拠していない場合は、アプリケーションをマイグレーションしないでください。
これ以降のステップでは、JAX-RPC 動的起動インターフェース (DII) API の使用を前提としています。
- GetQuote サンプルを検討します。
サンプル・ギャラリーで、Web
サービス・マイグレーションのサンプルを入手できます。
このサンプルは
GetQuote.java ファイルにあり、当初は Apache SOAP ユーザー用に
作成されたものです。このサンプルには、JAX-RPC DII インターフェースにマイグレーションするために必要
な変更に関する説明も記述されています。
- クライアント・アプリケーションを Apache SOAP から JAX-RPC DII に変換します。
Apache SOAP API と JAX-RPC DII API の構造は似ています。いずれの場合にも、
Call オブジェクトのインスタンス化および構成、パラメーターのセットアップ、
オペレーションの起動、および結果の処理を行うことができます。 JAX-RPC では、以下のコマンドを使用して、サービス・オブジェクトの汎用インスタンスを作成できます。
javax.xml.rpc.Service service = ServiceFactory.newInstance().createService(new QName(""));
- Call オブジェクトを作成します。
Call オブジェクトのインスタンスは次のコードを使用して作成されます。
org.apache.soap.rpc.Call call = new org.apache.soap.rpc.Call ()
JAX-RPC では、以下のコードを使用して、Call オブジェクトのインスタンスを作成します。
java.xml.rpc.Call call = service.createCall();
- エンドポイント Uniform Resource Identifiers (URI) を設定します。
操作の宛先 URI はパラメーターとして以下に受け渡されます。
call.invoke: call.invoke("http://...", "");
JAX-RPC では、setTargetEndpointAddress メソッドが次のようにパラメーターとして使用されます。
call.setTargetEndpointAddress("http://...");
Apache
SOAP には、要求に対するルーティング情報を含む Call オブジェクトの setTargetObjectURI メソッドが含
まれます。JAX-RPC には同等のメソッドはありません。targetObjectURI にある情報は、JAX-RPC では
targetEndpoint URI に含まれています。
- オペレーション名を設定します。
オペレーション名は以下を使用して Call オブジェクトに構成されます。
call.setMethodName("opName");
JAX-RPC では、以下のように
String パラメーターの代わりに
QName を受け取る setOperationName メソッドが使用されます。
call.setOperationName(new javax.xml.namespace.Qname("namespace", "opName"));
- エンコード・スタイルを設定します。
エンコード・スタイルは、以下を使用して Call オブジェクトに構成されます。
call.setEncodingStyleURI(org.apache.soap.Constants.NS_URI_SOAP_ENC);
JAX-RPC では、エンコード・スタイルは、Call オブジェクトのプロパティー、
call.setProperty(javax.xml.rpc.Call.ENCODINGSTYLE_URI_PROPERTY, "http://schemas.
xmlsoap.org/soap/encoding/");
によって設定されます。
- パラメーターを宣言し、パラメーター値を設定します。
Apache SOAP パラメーターのタイプおよび値は、パラメーター・インスタンスによって記述されます。このパラメーター・インスタンスは、Vector に収集され、
呼び出しの前に Call オブジェクトで設定されます。以下に例を示します。
Vector params = new Vector ();
params.addElement (new org.apache.soap.rpc.Parameter(name, type, value, encodingURI));
// repeat for additional parameters... call.setParams (params);
JAX-RPC では、Call オブジェクトは、パラメーター名およびタイプで構成されます。これらのパラメーター名およびタイプの値は指定しません。以下に例を示します。
call.addParameter(name, xmlType, mode);
// repeat for additional parameters call.setReturnType(type);
各部の意味は、次のとおりです。
- name (タイプ java.lang.String) パラメーター名です
- xmlType (タイプ javax.xml.namespace.QName) パラメ
ーターの XML タイプです
- mode (タイプ javax.xml.rpc.ParameterMode) パラメーターのモード、例えば IN、OUT、または INOUT などです
- 呼び出しを実行します。 オペレーションは、以下を使用して Call オブジェクトに呼び出されます。
org.apache.soap.Response resp = call.invoke(endpointURI, "");
JAX-RPC
では、以下の例のようにパラメーター値を配列に収集し、
call.invoke に渡します:
Object resp = call.invoke(new Object[] {parm1, parm2,...});
- 障害がないか検査します。
Apache SOAP では、以下のように応答をチェックして、呼び出し時に SOAP 障害がないか検査します。
if resp.generatedFault then {
org.apache.soap.Fault f = resp.getFault;
f.getFaultCode();
f.getFaultString();
}
JAX-RPC では、呼び出し時に SOAP 障害が起きると
java.rmi.RemoteException エラー
が表示されます。
try {
... call.invoke(...)
} catch (java.rmi.RemoteException) ...
- 結果を検索します。
Apache SOAP では、呼び出しが正常に行われ、結果が戻ってきた場合、
以下のように応答オブジェクトから結果を検索することができます。
Parameter result = resp.getReturnValue(); return result.getValue();
JAX-RPC では、例外が表示されない場合は、以下のように呼び出しの結果が戻りオブジェクトになります。
Object result = call.invoke(...);
...
return result;
結果
Apache SOAP Web サービスが J2EE Web サービスにマイグレーションされました。