Module java.naming
Package javax.naming

Class ReferralException

所有已实现的接口:
Serializable
直接已知的子类:
LdapReferralException

public abstract class ReferralException extends NamingException
这个抽象类用于表示引用异常,这种异常是响应于LDAP v3服务器返回的引用而生成的。

服务提供者通过为ReferralException提供getReferralInfo()getReferralContext()的实现(以及适当的构造函数和/或相应的“set”方法)来提供ReferralException的子类。

以下代码示例展示了如何使用ReferralException


      while (true) {
          try {
              bindings = ctx.listBindings(name);
              while (bindings.hasMore()) {
                  b = bindings.next();
                  ...
              }
              break;
          } catch (ReferralException e) {
              ctx = e.getReferralContext();
          }
      }
 

ReferralException是一个抽象类。具体的实现确定了它的同步和序列化属性。

传递给getReferralContext()方法的环境参数由调用者拥有。服务提供者不会修改该对象或保留对它的引用,但可能会保留对它的克隆的引用。

自 JDK 版本:
1.3
参见:
  • Constructor Details

    • ReferralException

      protected ReferralException(String explanation)
      使用提供的解释构造一个新的 ReferralException 实例。所有其他字段都设置为 null。
      参数:
      explanation - 关于此异常的额外细节。可以为 null。
      参见:
    • ReferralException

      protected ReferralException()
      构造一个新的 ReferralException 实例。所有字段都设置为 null。
  • Method Details

    • getReferralInfo

      public abstract Object getReferralInfo()
      检索与此引用相关的信息(如 URL)。程序可以检查或显示此信息给用户,以确定是否继续引用,或者确定是否需要提供其他信息以便继续引用。
      返回:
      与此引用相关的非 null 引用信息。
    • getReferralContext

      public abstract Context getReferralContext() throws NamingException
      检索继续执行方法的上下文。无论是在上下文操作期间直接遇到引用,还是间接遇到引用,例如在搜索枚举期间,引用异常都应提供一个继续操作的上下文。引用上下文是使用抛出 ReferralException 的上下文的环境属性创建的。

      为了继续操作,客户端程序应使用与原始调用相同的参数重新调用该方法。

      返回:
      继续执行方法的非 null 上下文。
      抛出:
      NamingException - 如果遇到命名异常。调用retryReferral()skipReferral()来继续处理引用。
    • getReferralContext

      public abstract Context getReferralContext(Hashtable<?,?> env) throws NamingException
      使用环境属性检索继续执行方法的上下文。无论是在上下文操作期间直接遇到引用,还是间接遇到引用,例如在搜索枚举期间,引用异常都应提供一个继续操作的上下文。

      引用上下文是使用env作为其环境属性创建的。当调用者需要为引用上下文使用不同的环境属性时,应使用此方法而不是无参重载形式。例如,当需要向被引用的服务器提供不同的身份验证信息以创建引用上下文时,可能需要这样做。

      为了继续操作,客户端程序应使用与原始调用相同的参数重新调用该方法。

      参数:
      env - 用于检索引用上下文的可能为 null 的环境。如果为 null,则不会使用环境属性。
      返回:
      继续执行方法的非 null 上下文。
      抛出:
      NamingException - 如果遇到命名异常。调用retryReferral()skipReferral()来继续处理引用。
    • skipReferral

      public abstract boolean skipReferral()
      放弃即将处理的引用。调用此方法后应调用getReferralContext以允许继续处理其他引用。以下代码片段展示了典型的使用模式。
        } catch (ReferralException e) {
            if (!shallIFollow(e.getReferralInfo())) {
                if (!e.skipReferral()) {
                    return;
                }
            }
            ctx = e.getReferralContext();
        }
       
      返回:
      如果有待处理的更多引用处理,则为 true;否则为 false。
    • retryReferral

      public abstract void retryReferral()
      重试当前正在处理的引用。调用此方法后应调用getReferralContext以允许重新尝试当前引用。以下代码片段展示了典型的使用模式。
        } catch (ReferralException e) {
            while (true) {
                try {
                    ctx = e.getReferralContext(env);
                    break;
                } catch (NamingException ne) {
                    if (! shallIRetry()) {
                        return;
                    }
                    // modify environment properties (env), if necessary
                    e.retryReferral();
                }
            }
        }