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

如何在java中捕获groovy抛出的异常?,java,exception,groovy,Java,Exception,Groovy,我试图扩展一些遗留代码,使其更能容忍网络中断。我有一些(遗留的)groovy代码,它封装了通过wslite对webservice(CallWebService)的调用。有时,此调用会引发wslite.http.HTTPClientException或java.net.ConnectException异常(这已通过添加 log.info(“异常”+ex.getClass().getName()+“抛出”); 到我的日志(4j日志) 调用此groovy代码的代码是java,如下所示: public

我试图扩展一些遗留代码,使其更能容忍网络中断。我有一些(遗留的)groovy代码,它封装了通过wslite对webservice(CallWebService)的调用。有时,此调用会引发wslite.http.HTTPClientException或java.net.ConnectException异常(这已通过添加
log.info(“异常”+ex.getClass().getName()+“抛出”);
到我的日志(4j日志)

调用此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)
和build,则build失败

exception ConnectException is never thrown in body of corresponding try statement

我应该怎么做才能捕获并响应适当的异常?

在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异常不会感染程序的其余部分。

编译器错误告诉您ConnectException是一个已检查的异常,它不是由catch块中的任何内容声明的。你确定你有正确的例外吗?当然?没有,但是我得到了我的log4j代码来执行以下操作:log.info(“Exception”+ex.getClass().getName()+“throw”);它似乎给了我java.net.ConnectException作为异常的名称是“顶级”异常,还是嵌套在另一个异常中(例如HTTPClientException)?排除天真,但是,我怎么知道呢?啊哈,它将让我捕获HTTPException,这是朝着正确方向迈出的一步。。。感谢cluesIt,它甚至没有抛出运行时异常,只是被冒泡到异常中。在异常处理中,我可以执行比较实例。不是主意,而是……哎呀。旨在将Exception作为catch-ed类型,而不是RuntimeException,但看起来您明白了。