命名例外
原文: https://docs.oracle.com/javase/tutorial/jndi/ops/exception.html
当 JNDI 包中的许多方法需要指示无法执行所请求的操作时,它会抛出 NamingException
。通常,你会看到try / catch
包装器可以抛出NamingException
:
try {
Context ctx = new InitialContext();
Object obj = ctx.lookup("somename");
} catch (NamingException e) {
// Handle the error
System.err.println(e);
}
异常类层次结构
JNDI 具有源自NamingException
类的丰富异常层次结构。异常的类名是不言自明的,在此处列出 。
要特别处理NamingException
的特定子类,可以单独捕获子类。例如,以下代码专门处理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);
}
枚举
诸如 Context.list()
和 DirContext.search()
等操作返回 NamingEnumeration
。在这些情况下,如果发生错误并且没有返回结果,则在调用方法时将抛出NamingException
或其中一个适当的子类。如果发生错误但有一些结果要返回,则会返回NamingEnumeration
,以便您可以获得这些结果。当所有结果都用尽时,调用 NamingEnumeration.hasMore()
将导致NamingException
(或其子类之一)被抛出以指示错误。此时,枚举变为无效,并且不应再对其调用任何方法。
例如,如果执行搜索()
并指定要返回多少个答案的计数限制( n ),则搜索()
将返回最多由 n 组成的枚举结果。如果结果数超过 n ,则当NamingEnumeration.hasMore()
被调用 n + 1 时, SizeLimitExceededException
将被抛出。有关示例代码,请参阅本课程的结果计数。
本教程中的示例
在本教程文本中嵌入的内联示例代码中,为了便于阅读,通常省略try / catch
子句。通常,因为这里仅示出了代码片段,所以仅包括在说明概念中直接有用的行。如果查看本教程附带的源文件,您将看到尝试/捕获
子句对NamingException
的适当放置。
javax.naming 包中的异常可以在中找到。