Прежде всего - проверьте, какое конкретное исключение выдается и выходит за пределы блока try-catch
. Вы должны знать, что следующий код в Groovy:
try {
// do something
} catch (e) {
// do something with exception
}
является эквивалентом:
try {
// do something
} catch (Exception e) {
// do something with exception
}
Это означает, что java.lang.Throwable
и все его дочерние классы (кроме java.lang.Exception
) не перехвачены в вашем try catch. Например:
def call() {
try {
throw new Error('Something wrong happened')
} catch (e) {
false
}
}
Это исключение не будет поймано try-catch
, и вы увидите что-то подобное в журнале консоли:
java.lang.Error: Something wrong happened
at com.github.wololock.micronaut.TestSpec$Service.call(TestSpec.groovy:22)
at com.github.wololock.micronaut.TestSpec.test(TestSpec.groovy:13)
Это происходит потому, что java.lang.Error
расширяет java.lang.Throwable
и это не дочерний класс java.lang.Exception
.
Если вы хотите перехватить все возможные исключения, которые могут случиться с вашим кодом, вам придется использовать Throwable
внутри блока catch, что-то вроде этого:
def call() {
try {
throw new Error('Something wrong happened')
} catch (Throwable e) {
false
}
}