Naming Exceptions

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

try {
    Context ctx = new InitialContext();
    Object obj = ctx.lookup("somename");
} catch (NamingException e) {
    // Handle the error
    System.err.println(e);
}

异常类层次结构

JNDI 具有源自NamingException类的丰富的异常层次结构。异常的类名是不言自明的,并列出为here

要专门处理NamingException的特定子类,请分别catch该子类。例如,以下代码专门处理AuthenticationException及其子类。

try {
    Context ctx = new InitialContext();
    Object obj = ctx.lookup("somename");
} catch (AuthenticationException e) {
    // attempt to reacquire the authentication information
    ...
} catch (NamingException e) {
    // Handle the error
    System.err.println(e);
}

Enumerations

Context.list()DirContext.search()之类的操作返回NamingEnumeration。在这些情况下,如果发生错误并且没有返回结果,则在调用该方法时将抛出NamingException或其适当的子类之一。如果发生错误,但有一些结果要返回,则返回NamingEnumeration以便您可以得到这些结果。当所有结果都用尽时,调用NamingEnumeration.hasMore()将导致引发NamingException(或其子类之一)以指示错误。那时,枚举变得无效,不应再对其调用任何方法。

例如,如果执行search\(\)并指定要返回多少答案的计数限制(* n ),则search\(\)将返回最多由 n 个结果组成的枚举。如果结果数超过 n *,则在_n_ *时间内调用NamingEnumeration\.hasMore\(\)时,将抛出SizeLimitExceededException。请参阅本类的Result Count以获取示例代码。

本教程中的示例

在本教程的文本中嵌入的嵌入式示例代码中,出于可读性考虑,通常会省略try/catch子句。通常,由于此处仅显示代码片段,因此仅包含对说明概念直接有用的行。如果查看本教程随附的源文件,将会看到NamingExceptiontry/catch子句的适当位置。

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