Как обрабатывать исключения при передаче свойств обратно от одного метода к другому - PullRequest
1 голос
/ 27 марта 2020

У меня есть метод getMyProperties (), который извлекает и возвращает различные файлы свойств и обрабатывает исключение там. Однако Eclipse говорит, что другой метод getRequest (), который вызывает getMyProperties (), также должен иметь «throws IOException». Даже тогда, после добавления этого, Eclipse говорит, что основной метод, который вызывает getRequest (), должен также генерировать исключение. Это правильный способ обработки исключений? Что-то в этом кажется неправильным.

После того, как Eclipse предлагает, у меня в основном методе есть следующее. Это не показывает ошибок, но это правильно?

public static void main(String[] args) throws IOException {
        //some code...
        myRequest = TestApiCall.getRequest(type, sQuery);
        //some more code...     
    }

Вот методы в отдельном классе ...

static String getRequest(String rType, String query) throws IOException{
        Properties myProps = null;
        String request = "";
        switch (rType){
            case "XML-SBQ":
                request = CallConsts.XML_SBQ_CALL;
                myProps = getMyProperties("configSBQ.properties");
                //use the properties
                break;
            case "JSON-SBQ":
                request = CallConsts.JSON_SBQ_CALL;
                //use the properties
                break;
            case "JSON-gos":
                request = CallConsts.JSON_GOS_CALL;
                myProps = getMyProperties("configGOS.properties");
                //use the properties
        }
        return request;
    }

    static Properties getMyProperties(String propName) throws IOException{
        Properties prop = new Properties();
        InputStream inputStream = null;

        try {
            String propFileName = propName;

            inputStream = TestApiCall.class.getClassLoader().getResourceAsStream(propFileName);

            if (inputStream != null) {
                prop.load(inputStream);
            } else {
                throw new FileNotFoundException("property file '" + propFileName + "' not found in the classpath");
            }
        } catch (Exception e) {
            System.out.println("Exception: " + e);
        } finally {
            inputStream.close();
        }
        return prop;

    }

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

static Properties getMyProperties(String propName) {
    Properties prop = new Properties();
    String propFileName = propName;

    try (InputStream inputStream = TestApiCall.class.getClassLoader().getResourceAsStream(propFileName)){

        if (inputStream != null) {
            prop.load(inputStream);
        } else {
            throw new FileNotFoundException("property file '" + propFileName + "' not found in the classpath");
        }
    } catch (IOException e) {
        System.out.println("Exception: " + e);
    } 
    return prop;
}

1 Ответ

0 голосов
/ 27 марта 2020

getMyProperties(String propName) не должен бросать IOException, так как вы ловите Exception здесь. Следовательно, getRequest() не нужно объявлять об этом, и ваша проблема решена.

Тем не менее, я советую вам никогда не ловить Exception в целом, вы должны ловить только IOException и FileNotFoundException здесь.

...