Мне всегда кажется, что я попадаю на перекресток, где я точно не знаю, как обрабатывать исключение, не перебрасывая его вызывающему.
Есть ли лучший способ справиться с ситуацией ниже?
private DataHandler retrieveFromGridFS(ObjectId id) throws IOException
{
GridFS gridFS = new GridFS(getDBReference());
GridFSDBFile out = gridFS.find(id);
File temp = File.createTempFile(
(String)out.getMetaData().get("productName"),
(String)out.getMetaData().get("productType"));
out.writeTo(temp);
return new DataHandler(new FileDataSource(temp));
}
Приведенный выше метод private
может выдать IOException
.
Использование этого метода примерно так:
public DataHandler retrieveProduct(String productId) throws IOException
{
ObjectId id = new ObjectId(productId);
DataHandler handler = null;
try
{
handler = retrieveFromGridFS(id);
}
catch(IOException ex)
{
logger.error(ex);
throw new IOException("A problem occurred retrieving product.");
}
return handler;
}
Я вынужден сделать повторный бросок, чтобы не рисковать, возвращая ноль.