我正在尝试扩展一些遗留代码,使其更能容忍网络中断。我有一些(遗留的)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/