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
子句。通常,由于此处仅显示代码片段,因此仅包含对说明概念直接有用的行。如果查看本教程随附的源文件,将会看到NamingException
的try/catch
子句的适当位置。
可以在here中找到 javax.naming 包中的异常。