【发布时间】:2012-10-26 15:04:07
【问题描述】:
很遗憾,我无法控制 getUserByUserId(String)。它的行为方式是如果找到用户则返回一个用户,如果没有找到用户则抛出一个OntNoObjectExistsException。我的问题是,由于某种原因,当它被抛出时,catch 没有捕捉到OntNoObjectExistsException。
此异常的类型层次结构是:OntNoObjectExistsException -> OntException -> Exception -> Throwable。
public boolean isUserIdAvailable(String userId) {
try {
return super.getUserByUserId(userId) == null;
} catch (OntNoObjectExistsException e){
return true;
} catch (Exception ex) {
appLog.error(ex.getMessage());
}
return false;
}
我尝试了这段代码来试水,但问题仍然存在。请注意,我正在捕捉Throwable。
public boolean isUserIdAvailable(String userId) {
try {
return super.getUserByUserId(userId) == null;
} catch (Throwable ex) {
appLog.error(ex.getMessage());
}
return false;
}
这是堆栈跟踪:
com.opennetwork.exception.OntNoObjectExistsException: User not found
at com.bcbst.dsmart.api.WebUser.getUserByUserId(WebUser.java:411)
at com.bcbst.dsmart.api.WebProspectiveMemberBean.isUserIdAvailable(WebProspectiveMemberBean.java:71)
at com.bcbst.dsmart.api.EJSLocalStatelessWebProspectiveMember_ce00ef7b.isUserIdAvailable(EJSLocalStatelessWebProspectiveMember_ce00ef7b.java:120)
at com.bcbst.prospectivememberweb.actions.UsageagreementAction.execute(UsageagreementAction.java:61)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
另请注意,这是 java 1.4。还有一些我现在无法控制的事情。
【问题讨论】:
-
您的 WebUser 类中导入的异常的完整包名是什么?
-
检查你只有一个 OntNoObjectExistsException 并且它就是你正在捕获的那个。
-
FWIW,我尝试减少捕获 Throwable 的单个捕获,但问题仍然存在。
-
@dharga 这很重要,请确保您编辑您的问题以清楚地强调这一点。
-
无论您的问题是什么,从您发布的代码中都看不出来。您是否检查了堆栈跟踪中的行号以确保它是从您认为的位置抛出的?
标签: java logging exception-handling stack-trace java1.4