サーバーでホストされている一連の Web サービスがあります。
java org.apache.axis.wsdl.WSDL2Java http://whatever1?wsdl, java org.apache.axis.wsdl.WSDL2Java http://whatever2?wsdl
軸を使用して、Web サービス (など)のクラスとスタブを生成します。
これにより、jar ファイルを作成するための多くのクラスが生成されます。
特定のプロジェクトでは、jar のさまざまなクラスを使用して 3 つのタスクを実行するラッパー クラスを作成する必要があります。これは、jar 内のすべての異なるクラスを抽象化し、3 つの異なるタスクを達成するために 3 つの異なるメソッドを呼び出す 1 つのクラスを提示することです)。
ラッパー クラスのコーディングは完了しましたが、Web サービス クライアントの jar ファイルからスローされた例外を処理する方法について非常に混乱しています。
要件の 1 つは、ラッパーのクライアントが元の Web サービス クライアント jar のクラスについて知る必要がないことです。したがって、ラッパー jar 以外に、さらにいくつかの例外クラスを作成する必要があります。
Web サービス クライアント jar には、3 ~ 4 種類のユーザー定義の例外クラスがあり、それらはすべて派生元でWSException
あり、次に派生元になりますorg.apache.axis.AxisFault
(これは、クライアント jar を生成するために軸を使用したためです)。
現在、例外クラスを最適に設計できる方法を見つけようとしています。これにより、ラッパーを呼び出すコードが、Web サービス クライアントを直接呼び出す場合に取得できた情報を失うことはありません。
ラッパーには 3 つの異なるタスクを実行する 3 つのメソッド (m1、m2、m3 など) があるため、3 つの例外クラス (m1exc、m2exc、m3exc) があると考えていました。
これは例外クラスのサンプルです
public class m1exc
{
WSException ws;
public m1exc(WSException e)
{
ws = e;
}
public String toString()
{
return ws.toString();
}
// Returns the error code
public int getCode()
{
return ws.getCode();
}
}
私のラッパーでは、
class Wrap
{
void m1() throws m1exc, javax.xml.rpc.ServiceException, java.rmi.RemoteException
{
try
{
// call stuff from the webservice client jar to get things done
}
catch(WSException w)
{
throw new m1exc(w);
}
}
}
ラッパー コードでは、catch ブロックを試して、WSException
他のすべてを通過させます。
これは正しい戦略のように聞こえますか? これを行うためのより良い方法はありますか - 主な基準は、ラッパーを呼び出すコードが例外情報を失うべきではないということです。この目的のための標準設計はありますか?