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

标签 java exception groovy

我正在尝试扩展一些遗留代码,使其更能容忍网络中断。我有一些(遗留的)groovy 代码,它通过 wslite 封装了对 Web 服务(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

我应该做什么才能捕获适当的异常并使用react?

最佳答案

在你的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 这样的动态语言更有可能抛出意外的运行时异常。捕获所有运行时异常将确保常规异常不会影响程序的其余部分。

关于java - 如何在java中捕获groovy抛出的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14815106/

相关文章:

php - Symfony onKernelException 监听器

file - 如何从 groovy 正确调用 shell 命令

java - 获取组成数字的二进制数列表

java - 主方法抛出异常

java - 将 espresso View 匹配器与 hamcrest 匹配器一起使用

java - JVM 崩溃了,我不明白为什么

regex - 逃逸美元

Android AlertDialog Builder 更好的代码

java - 从资源中获取文件名(带路径)

java - 使用AspectJ监控数据库访问方式