命名例外

原文: https://docs.oracle.com/javase/tutorial/jndi/ops/exception.html

当 JNDI 包中的许多方法需要指示无法执行所请求的操作时,它会抛出 NamingException。通常,你会看到try / catch包装器可以抛出NamingException

  1. try {
  2. Context ctx = new InitialContext();
  3. Object obj = ctx.lookup("somename");
  4. } catch (NamingException e) {
  5. // Handle the error
  6. System.err.println(e);
  7. }

异常类层次结构

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

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

  1. try {
  2. Context ctx = new InitialContext();
  3. Object obj = ctx.lookup("somename");
  4. } catch (AuthenticationException e) {
  5. // attempt to reacquire the authentication information
  6. ...
  7. } catch (NamingException e) {
  8. // Handle the error
  9. System.err.println(e);
  10. }

枚举

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

例如,如果执行搜索()并指定要返回多少个答案的计数限制( n ),则搜索()将返回最多由 n 组成的枚举结果。如果结果数超过 n ,则当NamingEnumeration.hasMore()被调用 n + 1 时, SizeLimitExceededException将被抛出。有关示例代码,请参阅本课程的结果计数

本教程中的示例

在本教程文本中嵌入的内联示例代码中,为了便于阅读,通常省略try / catch子句。通常,因为这里仅示出了代码片段,所以仅包括在说明概念中直接有用的行。如果查看本教程附带的源文件,您将看到尝试/捕获子句对NamingException的适当放置。

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