1 /* 2 * Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package javax.naming.ldap; 27 28 import javax.naming.ReferralException; 29 import javax.naming.Context; 30 import javax.naming.NamingException; 31 import java.util.Hashtable; 32 33 /** 34 * This abstract class is used to represent an LDAP referral exception. 35 * It extends the base {@code ReferralException} by providing a 36 * {@code getReferralContext()} method that accepts request controls. 37 * LdapReferralException is an abstract class. Concrete implementations of it 38 * determine its synchronization and serialization properties. 39 *<p> 40 * A {@code Control[]} array passed as a parameter to 41 * the {@code getReferralContext()} method is owned by the caller. 42 * The service provider will not modify the array or keep a reference to it, 43 * although it may keep references to the individual {@code Control} objects 44 * in the array. 45 * 46 * @author Rosanna Lee 47 * @author Scott Seligman 48 * @author Vincent Ryan 49 * @since 1.3 50 */ 51 52 public abstract class LdapReferralException extends ReferralException { 53 /** 54 * Constructs a new instance of LdapReferralException using the 55 * explanation supplied. All other fields are set to null. 56 * 57 * @param explanation Additional detail about this exception. Can be null. 58 * @see java.lang.Throwable#getMessage 59 */ 60 protected LdapReferralException(String explanation) { 61 super(explanation); 62 } 63 64 /** 65 * Constructs a new instance of LdapReferralException. 66 * All fields are set to null. 67 */ 68 protected LdapReferralException() { 69 super(); 70 } 71 72 /** 73 * Retrieves the context at which to continue the method using the 74 * context's environment and no controls. 75 * The referral context is created using the environment properties of 76 * the context that threw the {@code ReferralException} and no controls. 77 *<p> 78 * This method is equivalent to 79 *<blockquote><pre> 80 * getReferralContext(ctx.getEnvironment(), null); 81 *</pre></blockquote> 82 * where {@code ctx} is the context that threw the {@code ReferralException.} 83 *<p> 84 * It is overridden in this class for documentation purposes only. 85 * See {@code ReferralException} for how to use this method. 86 * 87 * @return The non-null context at which to continue the method. 88 * @exception NamingException If a naming exception was encountered. 89 * Call either {@code retryReferral()} or {@code skipReferral()} 90 * to continue processing referrals. 91 */ 92 public abstract Context getReferralContext() throws NamingException; 93 94 /** 95 * Retrieves the context at which to continue the method using 96 * environment properties and no controls. 97 * The referral context is created using {@code env} as its environment 98 * properties and no controls. 99 *<p> 100 * This method is equivalent to 101 *<blockquote><pre> 102 * getReferralContext(env, null); 103 *</pre></blockquote> 104 *<p> 105 * It is overridden in this class for documentation purposes only. 106 * See {@code ReferralException} for how to use this method. 107 * 108 * @param env The possibly null environment to use when retrieving the 109 * referral context. If null, no environment properties will be used. 110 * 111 * @return The non-null context at which to continue the method. 112 * @exception NamingException If a naming exception was encountered. 113 * Call either {@code retryReferral()} or {@code skipReferral()} 114 * to continue processing referrals. 115 */ 116 public abstract Context 117 getReferralContext(Hashtable<?,?> env) 118 throws NamingException; 119 120 /** 121 * Retrieves the context at which to continue the method using 122 * request controls and environment properties. 123 * Regardless of whether a referral is encountered directly during a 124 * context operation, or indirectly, for example, during a search 125 * enumeration, the referral exception should provide a context 126 * at which to continue the operation. 127 * To continue the operation, the client program should re-invoke 128 * the method using the same arguments as the original invocation. 129 *<p> 130 * {@code reqCtls} is used when creating the connection to the referred 131 * server. These controls will be used as the connection request controls for 132 * the context and context instances 133 * derived from the context. 134 * {@code reqCtls} will also be the context's request controls for 135 * subsequent context operations. See the {@code LdapContext} class 136 * description for details. 137 *<p> 138 * This method should be used instead of the other two overloaded forms 139 * when the caller needs to supply request controls for creating 140 * the referral context. It might need to do this, for example, when 141 * it needs to supply special controls relating to authentication. 142 *<p> 143 * Service provider implementors should read the "Service Provider" section 144 * in the {@code LdapContext} class description for implementation details. 145 * 146 * @param reqCtls The possibly null request controls to use for the new context. 147 * If null or the empty array means use no request controls. 148 * @param env The possibly null environment properties to use when 149 * for the new context. If null, the context is initialized with no environment 150 * properties. 151 * @return The non-null context at which to continue the method. 152 * @exception NamingException If a naming exception was encountered. 153 * Call either {@code retryReferral()} or {@code skipReferral()} 154 * to continue processing referrals. 155 */ 156 public abstract Context 157 getReferralContext(Hashtable<?,?> env, 158 Control[] reqCtls) 159 throws NamingException; 160 161 private static final long serialVersionUID = -1668992791764950804L; 162 }