/*
* Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.naming;
import java.util.Hashtable;
This abstract class is used to represent a referral exception,
which is generated in response to a referral
such as that returned by LDAP v3 servers.
A service provider provides a subclass of ReferralException
by providing implementations for getReferralInfo()
and getReferralContext()
(and appropriate constructors and/or corresponding "set" methods).
The following code sample shows how ReferralException
can be used.
while (true) {
try {
bindings = ctx.listBindings(name);
while (bindings.hasMore()) {
b = bindings.next();
...
}
break;
} catch (ReferralException e) {
ctx = e.getReferralContext();
}
}
ReferralException
is an abstract class. Concrete implementations determine its synchronization and serialization properties.
An environment parameter passed to the getReferralContext()
method is owned by the caller. The service provider will not modify the object or keep a reference to it, but may keep a reference to a clone of it.
Author: Rosanna Lee, Scott Seligman Since: 1.3
/**
* This abstract class is used to represent a referral exception,
* which is generated in response to a <em>referral</em>
* such as that returned by LDAP v3 servers.
* <p>
* A service provider provides
* a subclass of {@code ReferralException} by providing implementations
* for {@code getReferralInfo()} and {@code getReferralContext()} (and appropriate
* constructors and/or corresponding "set" methods).
* <p>
* The following code sample shows how {@code ReferralException} can be used.
* <blockquote><pre>{@code
* while (true) {
* try {
* bindings = ctx.listBindings(name);
* while (bindings.hasMore()) {
* b = bindings.next();
* ...
* }
* break;
* } catch (ReferralException e) {
* ctx = e.getReferralContext();
* }
* }
* }</pre></blockquote>
*<p>
* {@code ReferralException} is an abstract class. Concrete implementations
* determine its synchronization and serialization properties.
*<p>
* An environment parameter passed to the {@code getReferralContext()}
* method is owned by the caller.
* The service provider will not modify the object or keep a reference to it,
* but may keep a reference to a clone of it.
*
* @author Rosanna Lee
* @author Scott Seligman
*
* @since 1.3
*
*/
public abstract class ReferralException extends NamingException {
Constructs a new instance of ReferralException using the
explanation supplied. All other fields are set to null.
Params: - explanation – Additional detail about this exception. Can be null.
See Also:
/**
* Constructs a new instance of ReferralException using the
* explanation supplied. All other fields are set to null.
*
* @param explanation Additional detail about this exception. Can be null.
* @see java.lang.Throwable#getMessage
*/
protected ReferralException(String explanation) {
super(explanation);
}
Constructs a new instance of ReferralException.
All fields are set to null.
/**
* Constructs a new instance of ReferralException.
* All fields are set to null.
*/
protected ReferralException() {
super();
}
Retrieves information (such as URLs) related to this referral.
The program may examine or display this information
to the user to determine whether to continue with the referral,
or to determine additional information needs to be supplied in order
to continue with the referral.
Returns: Non-null referral information related to this referral.
/**
* Retrieves information (such as URLs) related to this referral.
* The program may examine or display this information
* to the user to determine whether to continue with the referral,
* or to determine additional information needs to be supplied in order
* to continue with the referral.
*
* @return Non-null referral information related to this referral.
*/
public abstract Object getReferralInfo();
Retrieves the context at which to continue the method.
Regardless of whether a referral is encountered directly during a
context operation, or indirectly, for example, during a search
enumeration, the referral exception should provide a context
at which to continue the operation. The referral context is
created using the environment properties of the context
that threw the ReferralException.
To continue the operation, the client program should re-invoke
the method using the same arguments as the original invocation.
Throws: - NamingException – If a naming exception was encountered. Call either
retryReferral()
or skipReferral()
to continue processing referrals.
Returns: The non-null context at which to continue the method.
/**
* Retrieves the context at which to continue the method.
* Regardless of whether a referral is encountered directly during a
* context operation, or indirectly, for example, during a search
* enumeration, the referral exception should provide a context
* at which to continue the operation. The referral context is
* created using the environment properties of the context
* that threw the ReferralException.
*
*<p>
* To continue the operation, the client program should re-invoke
* the method using the same arguments as the original invocation.
*
* @return The non-null context at which to continue the method.
* @exception NamingException If a naming exception was encountered.
* Call either {@code retryReferral()} or {@code skipReferral()}
* to continue processing referrals.
*/
public abstract Context getReferralContext() throws NamingException;
Retrieves the context at which to continue the method using
environment properties.
Regardless of whether a referral is encountered directly during a
context operation, or indirectly, for example, during a search
enumeration, the referral exception should provide a context
at which to continue the operation.
The referral context is created using env
as its environment properties. This method should be used instead of the no-arg overloaded form when the caller needs to use different environment properties for the referral context. It might need to do this, for example, when it needs to supply different authentication information to the referred server in order to create the referral context.
To continue the operation, the client program should re-invoke
the method using the same arguments as the original invocation.
Params: - env – The possibly null environment to use when retrieving the
referral context. If null, no environment properties will be used.
Throws: - NamingException – If a naming exception was encountered. Call either
retryReferral()
or skipReferral()
to continue processing referrals.
Returns: The non-null context at which to continue the method.
/**
* Retrieves the context at which to continue the method using
* environment properties.
* Regardless of whether a referral is encountered directly during a
* context operation, or indirectly, for example, during a search
* enumeration, the referral exception should provide a context
* at which to continue the operation.
*<p>
* The referral context is created using {@code env} as its environment
* properties.
* This method should be used instead of the no-arg overloaded form
* when the caller needs to use different environment properties for
* the referral context. It might need to do this, for example, when
* it needs to supply different authentication information to the referred
* server in order to create the referral context.
*<p>
* To continue the operation, the client program should re-invoke
* the method using the same arguments as the original invocation.
*
* @param env The possibly null environment to use when retrieving the
* referral context. If null, no environment properties will be used.
*
* @return The non-null context at which to continue the method.
* @exception NamingException If a naming exception was encountered.
* Call either {@code retryReferral()} or {@code skipReferral()}
* to continue processing referrals.
*/
public abstract Context
getReferralContext(Hashtable<?,?> env)
throws NamingException;
Discards the referral about to be processed. A call to this method should be followed by a call to getReferralContext
to allow the processing of other referrals to continue. The following code fragment shows a typical usage pattern. } catch (ReferralException e) {
if (!shallIFollow(e.getReferralInfo())) {
if (!e.skipReferral()) {
return;
}
}
ctx = e.getReferralContext();
}
Returns: true If more referral processing is pending; false otherwise.
/**
* Discards the referral about to be processed.
* A call to this method should be followed by a call to
* {@code getReferralContext} to allow the processing of
* other referrals to continue.
* The following code fragment shows a typical usage pattern.
* <blockquote><pre>
* } catch (ReferralException e) {
* if (!shallIFollow(e.getReferralInfo())) {
* if (!e.skipReferral()) {
* return;
* }
* }
* ctx = e.getReferralContext();
* }
* </pre></blockquote>
*
* @return true If more referral processing is pending; false otherwise.
*/
public abstract boolean skipReferral();
Retries the referral currently being processed. A call to this method should be followed by a call to getReferralContext
to allow the current referral to be retried. The following code fragment shows a typical usage pattern. } 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();
}
}
}
/**
* Retries the referral currently being processed.
* A call to this method should be followed by a call to
* {@code getReferralContext} to allow the current
* referral to be retried.
* The following code fragment shows a typical usage pattern.
* <blockquote><pre>
* } 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();
* }
* }
* }
* </pre></blockquote>
*
*/
public abstract void retryReferral();
Use serialVersionUID from JNDI 1.1.1 for interoperability
/**
* Use serialVersionUID from JNDI 1.1.1 for interoperability
*/
private static final long serialVersionUID = -2881363844695698876L;
}