如何在java中捕获groovy抛出的异常?

时间:2013-02-11 15:19:20

标签: java exception groovy

我正在尝试扩展一些遗留代码,以使其更能容忍网络中断。我有一些(遗留的)groovy代码,它通过wslite包装对webservice(CallWebService)的调用。有时,此调用会抛出wslite.http.HTTPClientException或java.net.ConnectException异常(这已通过添加确定 log.info("Exception " + ex.getClass().getName() + " throw"); 到我的log4j日志记录)

调用这个groovy代码的代码在java中,如下所示:

public static String getDataFromWebService(String webServiceUrl, String referenceNumber) {
try {       
    ReturnedData returnedData = new CallWebService(webServiceUrl, referenceNumber);
    return (String)returnedData.toXml();
}
catch (Exception ex) {
    log.info("Exception caught: class of exception is " + ex.getClass().getName());
    throw ex;
}

我想要做的是捕获抛出的异常(wslite.http.HTTPClientException或java.net.ConnectException)并重试一次或两次调用(因为它可能是一个小故障)。

当我尝试添加

catch (java.net.ConnectException ex)

并构建,构建失败并带有

exception ConnectException is never thrown in body of corresponding try statement

我应该怎样做才能捕捉并对相应的例外做出反应?

1 个答案:

答案 0 :(得分:2)

在你的Java代码中,我会做这样的事情:

try {
  callGroovy();
} catch (RuntimeException e) {  // EDIT --- Should be Exception, RuntimeException
  if (e instanceof HTTPClientException || e.getCause() instanceof ConnectException) {
    throw e;
  }
  // log other exception...
}

这比捕获单个异常类型更安全一些。根据我的经验,像groovy这样的动态语言更有可能抛出意想不到的运行时异常。捕获所有运行时异常将确保groovy异常不会感染程序的其余部分。