Обработка исключений, возникающих в силу разных сценариев, и обрабатывать их по-разному


Я учусь обработке исключений в Java. Каждый раз, когда я пишу функцию, я задаюсь вопросом, если я должен поставить весь код функции в try catch блок.

То, что делает функция:

Ниже функция, я проверяю на ошибки загрузки файла, что может быть вызвано несколькими проблемами.е.г. слишком большой файл, не поддерживаемый формат и так далее.

В функции, я могу добавить попробовать/поймать только небольшую часть, потому что он иногда бросает некоторые сетевые исключения, например, тайм-аут соединения, гнезду тайм-аут, сеть недоступна и так далее.

Какие улучшения я ищу:

Я хочу, чтобы сеть исключений быть обработаны, уже присутствующих попробовать поймать и добавить нового попробовать/поймать, что должен позаботиться об исключениях, которые могут возникнуть из других частей функции.

public void checkFile(FacesContext ctx, UIComponent comp, Object value) throws IOException {  
        file = (Part) value;
        if (file != null) {
            String originalFileName = FileUtil.getFileName(file);
            String fileContentType = file.getContentType();

            if (file.getSize() > MAX_UPLOAD_SIZE) {
                msgs.add(new FacesMessage(FacesMessage.SEVERITY_ERROR, "File too big.", "The given file was too big." +
                        " Maximum size allowed is: " + MAX_UPLOAD_SIZE / 1024 / 1024 + " MB"));
                throw new ValidatorException(msgs);
            }

            if (fileContentType.matches("application/x-msdownload|application/x-ms-installer|application/x-elf|application/x-sh|text/x-perl|text/x-python")) {
                msgs.add(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Not a permissible file type", "The uploaded file is " +
                        "an executable file."));
                throw new ValidatorException(msgs);
            }
            try {
                if (FileUtil.checkVirusClamAV(ProjectConfig.get().getFileUploader(), file.getInputStream())) {
                    msgs.add(new FacesMessage(FacesMessage.SEVERITY_ERROR, "File possibly infected",
                            "The uploaded file triggered a virus warning and therefore has been rejected."));
                    throw new ValidatorException(msgs);
                }
            } catch(Exception e) {
                msgs.add(new FacesMessage(FacesMessage.SEVERITY_ERROR, "File possibly infected",
                        "The uploaded file triggered a virus warning and therefore has been rejected."));

                generateAntiVirusExceptionMessages(e.getMessage());
                throw new ValidatorException(msgs);
            }

            if ((originalFileName != null) && (!FilenameUtils.getExtension(originalFileName).equals("xml"))) {
                //Generate validation message for non-xml files
                generateValidationMessages(validationMessageType.nonXmlSuccess);
            }

            if (originalFileName != null && FilenameUtils.getExtension(originalFileName).equals("xml")) {
                //Do validation only for xml files
                validateXmlFiles();
            }
        }
    }


107
2
задан 11 апреля 2018 в 11:04 Источник Поделиться
Комментарии