Порядок исключений - PullRequest
       47

Порядок исключений

0 голосов
/ 14 февраля 2019

У меня есть метод, который выбрасывает MalformedURLException.Я ловлю исключение с try-catch.
, но вместо перехвата MalformedURLException оно переходит на EJBException.

try {
    myMethod(); // throws an exception
} catch (WebApplicationException ex) {
    ex.printStackTrace();
} catch (MalformedURLException ex) {
    ex.printStackTrace(); // I expected the debugger to jump to that line
} catch (EJBException ex) {
    ex.printStackTrace(); // debugger jumps to this line
} catch (Exception ex) {
    ex.printStackTrace();
}

StackTrace:

WARNING:   A system exception occurred during an invocation on EJB MyClass, method: public com.name.AnotherClass com.name.MyClass.myMethod(java.lang.String,java.lang.String) throws java.net.MalformedURLException
WARNING:   javax.ejb.EJBException
    [...] // much more text...
Caused by: javax.ws.rs.WebApplicationException: HTTP 400 Bad Request
    [...] // much more text...
FATAL:   javax.ejb.EJBException
    [...] // much more text...
Caused by: javax.ws.rs.WebApplicationException: HTTP 400 Bad Request
    [...] // much more text...

As указано здесь :

Если первый улов соответствует исключению, он выполняет, если нет, следующий пробуется и включается и включается, пока один не будет найден или отсутствуетare.

В моем примере MalformedURLException срабатывает первым, как вы можете видеть в 1-й строке:

throws java.net.MalformedURLException

Только во 2-й строке написано:

javax.ejb.EJBException

Итак, почему он сразу переходит на EJBException, если MalformedURLException срабатывает первым?

1 Ответ

0 голосов
/ 14 февраля 2019

Проверка исключения EJBException ex.getCause().Исключение MalformedURLE заключено в магию контейнера EJB.

Кто-то может представить где-то

try { ...
} catch (Exception ex) {
    throw new EJBException(ex); // Cause: ex.
}
...