该教程是针对JDK 8编写的。本页面描述的示例和实践不利用后续版本中引入的改进,并可能使用已不再可用的技术。
请参阅Java语言更改以了解Java SE 9及后续版本中更新的语言特性的摘要。
请参阅JDK版本说明,了解所有JDK版本的新功能、增强功能以及已删除或已弃用选项的信息。
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包中的异常可以在这里找到。