Hessian を使用して Web サービス呼び出しを行う Java 1.4 Web アプリがあります。可能な限り堅牢で透過的に記述しようとしています。プロキシを呼び出すときに、ヘッセン例外がデリゲート クラスから抜け出すことは望ましくありません。Hessian ランタイム例外をキャッチしてアンラップし、いくつかの主要な例外 (例: ConnectException
) を再スローするか、別の例外で再ラップできるようにしたいと考えています。しかし、これらの例外を見つけるのは少し難しいです。
委任クラスにあるすべてのメソッドは、この種の構造を持っています。
public MyResult myMethod(MyArgsType myArgs)
throws ConnectException
{
try
{
return proxy.myMethod(myArgs);
}
catch (HessianRuntimeException ex)
{
Throwable cause = ex.getCause();
if (cause instanceof ConnectException)
throw (ConnectException)cause;
throw new MyRuntimeException(cause);
}
}
これは私自身のテストでは正常に機能していますが、他のいくつかのランタイム例外が発生しており、見逃しています。たとえば、 (リモート サーバーがダウンしていた) がHessianConnectionException
原因で をスローする可能性があることが最近わかりました。SocketException
今持っているものがそれをキャッチするだろうと私は完全に期待していました. はHessianConnectionException
から派生していないHessianRuntimeException
ので、キャッチする例外を追加する必要があります。
public MyResult myMethod(MyArgsType myArgs)
throws SocketException, ConnectException
{
try
{
return proxy.myMethod(myArgs);
}
catch (HessianException ex) // HessianConnectionException derives from HessianException
{
Throwable cause = ex.getCause();
if (cause instanceof SocketException)
throw (SocketException)cause;
throw new MyRuntimeException(cause);
}
catch (HessianRuntimeException ex)
{
Throwable cause = ex.getCause();
if (cause instanceof ConnectException)
throw (ConnectException)cause;
throw new MyRuntimeException(cause);
}
}
それは私には問題ありません、それは行われなければなりませんでした...しかし、それはどこで終わりますか? 知っておく必要があるその他のランタイム例外や、その根本的な原因に関するドキュメントが見つかりません。
ここにリストされている唯一のランタイム例外であるため、キャッチするだけで十分であるHessianException
ことを願っています。しかし、これらの新しく発見された問題では、混合バッグのように見えるため、どの例外をアンラップしたいのかわかりません (私の知る限り、同じ問題の異なる表現でした)。HessianRuntimeException
SocketException
ConnectException
プロキシを介してメソッドを呼び出すときにスローされるランタイム例外と、その根本的な原因に関するドキュメントはありますか?