Apache POI, обработка исключения WorkbookFactory.create () для лучшего взаимодействия с пользователем - PullRequest
0 голосов
/ 29 января 2020

Я использую Apache POI для анализа и создания файлов Excel, я работаю над строкой base64 (содержимое входного файла пользователя Excel) и преобразовываю ее в ByteArrayInputStream:

ByteArrayInputStream stream = new ByteArrayInputStream(Base64.getDecoder().decode(base64String));

и затем создание рабочей книги:

try (Workbook wb = WorkbookFactory.create(stream)) {

  //parsing the file content ...

} catch (IOException e) {
   log.error("hopefully something clear", e);
   throw new CustomException(Errors.CUSTOM_ERROR_CODE_FOR_THIS_PARTICULAR_ISSUE);
}

Дело в том, что я не знаю точно, почему метод create вызвал исключение, документация просто говорит

Выдает: java .io.IOException - если при чтении данных возникает ошибка (ссылка)

И я не хочу показывать пользователю "Там было ошибка при разборе файла ", я уже обработал случай, если файл зашифрован, но в этом я застрял

1 Ответ

1 голос
/ 29 января 2020
  1. Скопировать фактическое сообщение об ошибке из нижележащего исключения:

     try (Workbook wb = WorkbookFactory.create(stream)) {     
     //parsing the file content ...    
     } catch (IOException e) {
       log.error("hopefully something clear", e);
       throw new CustomException(e.getMessage(),
          Errors.CUSTOM_ERROR_CODE_FOR_THIS_PARTICULAR_ISSUE);
      }
    
  2. Для лучшего взаимодействия с пользователем вам определенно необходимо обрабатывать случаи с пустыми или неработающими данными:

    final String base64String = .. ;
    //StringUtils class is from Apache Commons Lang
    if (StringUtils.isEmpty(base64String) {
       throw new CustomException(Errors.CUSTOM_ERROR_NO_DATA);
    }
    
    byte[] bytes;
    try {
      bytes = Base64.getDecoder().decode(base64String);
    } catch (Exception e) {
      throw new CustomException(Errors.CUSTOM_ERROR_NON_BASE64_DATA);
    }
    
    try (ByteArrayInputStream stream = new ByteArrayInputStream(bytes);) {
    .. // workbook processing 
    }
    
...