文档

Java™ 教程
隐藏目录
命名异常
路径:Java命名和目录接口
教程:命名和目录操作

命名异常

JNDI包中的许多方法在需要指示无法执行所请求的操作时会抛出NamingException。通常,您会看到对可能抛出NamingException的方法进行try/catch包装:

try {
    Context ctx = new InitialContext();
    Object obj = ctx.lookup("somename");
} catch (NamingException e) {
    // 处理错误
    System.err.println(e);
}

异常类层次结构

JNDI拥有丰富的异常层次结构,源自NamingException类。异常的类名是自解释的,并在此处列出。

要特别处理NamingException的某个子类,可以单独捕获该子类。例如,以下代码特别处理AuthenticationException及其子类。

try {
    Context ctx = new InitialContext();
    Object obj = ctx.lookup("somename");
} catch (AuthenticationException e) {
    // 尝试重新获取认证信息
    ...
} catch (NamingException e) {
    // 处理错误
    System.err.println(e);
}

枚举

例如,执行Context.list()DirContext.search()等操作将返回一个NamingEnumeration。在这些情况下,如果发生错误并且没有返回结果,那么在调用方法时将抛出NamingException或其适当的子类。如果发生错误但有一些结果需要返回,则返回一个NamingEnumeration以获取这些结果。当结果耗尽时,调用NamingEnumeration.hasMore()将导致抛出NamingException(或其子类)来指示错误。此时,枚举将变为无效状态,不应再调用任何方法。

例如,如果执行search()并指定一个返回答案数量限制(n),则search()将返回最多n个结果的枚举。如果结果数量超过n,则当第n+1次调用NamingEnumeration.hasMore()时,将抛出SizeLimitExceededException。有关示例代码,请参阅本课程的结果计数部分。

本教程中的示例

在本教程的文本中嵌入的行内示例代码中,为了可读性通常省略了try/catch子句。通常情况下,由于只显示代码片段,只包含直接用于说明概念的行。如果您查看本教程附带的源文件,您将看到NamingException的适当位置处的try/catch子句。

javax.naming包中的异常可以在这里找到。


上一页:命名和目录操作
下一页:查找对象