例外顺序

问题描述 投票:0回答:1

我有一种抛出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();
}

堆栈跟踪:

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...

作为stated here

如果第一个catch匹配异常,则执行,如果不匹配,则执行下一个异常,直到一个匹配或者没有匹配。

在我的例子中,MalformedURLException首先发射,你可以在第一行看到:

throws java.net.MalformedURLException

只有第二行说:

javax.ejb.EJBException

那么,如果EJBException首先发射,它为什么会立即跳到MalformedURLException

java exception exception-handling try-catch
1个回答
2
投票

检查EJBException的ex.getCause()。 MalformedURLException由EJB容器的魔力包装。

有人可能想象某个地方

try { ...
} catch (Exception ex) {
    throw new EJBException(ex); // Cause: ex.
}
© www.soinside.com 2019 - 2024. All rights reserved.