Java没有发现例外



不幸的是,我无法控制getUserByUserId(String)。它的行为方式是返回用户,如果找到了用户,则在找不到用户时投掷OntNoObjectExistsException。我的问题是,出于某种原因,捕获时不会抓住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.getUserByUserId包含此代码:

if (userNotFoundCondition) {
  OntNoObjectExistsException e = new OntNoObjectExistsException("User not found");
  logger.error("User not found", e);
  throw e;
}

该假设与您提交的所有证据一致100%。为了进行调查,您必须首先反驳这一假设。

我同意另一个答案,即使用流量控制的例外是非常糟糕的做法,但是要实际回答您的问题,您是否试图捕捉到可投掷而不是例外?

catch (Throwable t) {
    // handle here.
}

您在超级类别中捕获异常,然后在其中投掷新的Throwable

您无法控制getUserByUserId();但是,它似乎位于同一软件包com.bcbst.dsmart.api中,因此此答案假定(以继续)它在同一项目中不在您的责任之外,但是您有其源文件。

getUserByUserId()的来源之间是否属于不匹配,并且正在运行时使用的编译版本?

如果throws汇编后在该类中修改了该类别的语句,或者已经更改了例外情况,则可以解释您的这种显然荒谬的情况。

有关该假设的更多信息,请参见此答案。

=>重新编译所有内容,并重新启动。

相关内容

  • 没有找到相关文章

最新更新