我有一个使用 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
由 a 引起的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
是同一问题的不同表示)。
在通过代理调用方法时抛出哪些运行时异常及其所有潜在原因是否有任何文档?