javax.naming

接口
异常
java.lang.Object
  继承者 java.lang.Throwable
      继承者 java.lang.Exception
          继承者 javax.naming.NamingException
              继承者 javax.naming.ReferralException
所有已实现的接口:
Serializable
直接已知子类:
LdapReferralException

public abstract class ReferralException
     
extends NamingException

此抽象类用于表示一个引用异常,该异常是在响应某一引用(比如 LDAP v3 服务器返回的引用)时生成的。

服务提供者通过提供 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() 方法的环境属性归调用者所有。服务提供者不会修改该对象或保持对它的引用,但会保持对其副本的引用。

从以下版本开始:
1.3
另请参见:
序列化表格

字段摘要
 
从类 javax.naming.NamingException 继承的字段
remainingName, resolvedName, resolvedObj, rootException
 
构造方法摘要
protected ReferralException()
          构造一个新的 ReferralException 实例。
protected ReferralException(String explanation)
          使用所提供的解释构造一个新的 ReferralException 实例。
 
方法摘要
abstract  Context getReferralContext()
          检索继续该方法的上下文。
abstract  Context getReferralContext(Hashtable<?,?> env)
          使用环境属性检索继续该方法的上下文。
abstract  Object getReferralInfo()
          检索与此引用有关的信息(比如 URL)。
abstract  void retryReferral()
          检索当前正被处理的引用。
abstract  boolean skipReferral()
          放弃将要处理的引用。
 
从类 javax.naming.NamingException 继承的方法
appendRemainingComponent, appendRemainingName, getCause, getExplanation, getRemainingName, getResolvedName, getResolvedObj, getRootCause, initCause, setRemainingName, setResolvedName, setResolvedObj, setRootCause, toString, toString
 
从类 java.lang.Throwable 继承的方法
fillInStackTrace, getLocalizedMessage, getMessage, getStackTrace, printStackTrace, printStackTrace, printStackTrace, setStackTrace
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

构造方法详细信息

ReferralException

protected ReferralException(String explanation)
使用所提供的解释构造一个新的 ReferralException 实例。将所有其他字段都设置为 null。

参数:
explanation - 有关此异常的附加详细信息。可以为 null。
另请参见:
Throwable.getMessage()

ReferralException

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

方法详细信息

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();
                }
            }
        }