| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package javax.naming; |
| |
| import java.util.Hashtable; |
| |
| /** |
| * Naming operations throw a <code>CannotProceedException</code> when the |
| * service provider context implementation is resolving a name but reaches a |
| * name component that does not belong to the namespace of the current context. |
| * <p> |
| * The service provider is able to create a <code>CannotProceedException</code> |
| * object and use methods on that object (including baseclass methods) to |
| * provide full details of how far name resolution had progressed. |
| * </p> |
| * <p> |
| * Typically, the methods used might include: |
| * <ul> |
| * <li><code>setEnvironment</code> to record the environment from the current |
| * context</li> |
| * <li> <code>setAltNameCtx</code> to record the current context</li> |
| * <li> <code>setResolvedObj</code> to record the resolved object for the next |
| * naming system</li> |
| * <li> <code>setAltName</code> to record the name of the resolved object</li> |
| * <li> <code>setRemainingName</code> to record the remaining unresolved name</li> |
| * </ul> |
| * </p> |
| * <p> |
| * If the incomplete naming operation is <code>rename</code>, the service |
| * provider should also use the <code>setRemainingNewName</code> method to |
| * record the unresolved part of the new name. |
| * </p> |
| * <p> |
| * The service provider can pass the <code>CannotProceedException</code> as a |
| * parameter to <code>NamingManager</code> methods such as |
| * <code>getContinuationContext</code> to attempt to locate another service |
| * provider for the next naming system. If successful, that service provider can |
| * return a new <code>Context</code> object on which the naming operation can |
| * proceed further. If unsuccessful, the <code>CannotProceedException</code> |
| * can be thrown by the service provider so that the JNDI application can handle |
| * it and take appropriate action. |
| * </p> |
| * <p> |
| * Multithreaded access to a single <code>CannotProceedException</code> |
| * instance is only safe when client code uses appropriate synchronization and |
| * locking. |
| * </p> |
| * |
| */ |
| public class CannotProceedException extends NamingException { |
| |
| /* |
| * This constant is used during deserialization to check the version which |
| * created the serialized object. |
| */ |
| private final static long serialVersionUID = 1219724816191576813L; |
| |
| /** |
| * Contains a composite name that is the name of the resolved object which |
| * is relative to the context in <code>altNameCtx</code>. This field may |
| * be null and is initially null. This field should be accessed and modified |
| * using only <code>getAltName</code> and <code>setAltName</code>. |
| */ |
| protected Name altName = null; |
| |
| /** |
| * Contains the context to which the <code>altName</code> field is |
| * relative. This field may be null and is initially null. A null value |
| * implies the default initial context. This field should be accessed and |
| * modified using only <code>getAltNameCtx</code> and |
| * <code>setAltNameCtx</code>. |
| */ |
| protected Context altNameCtx = null; |
| |
| /** |
| * Contains the environment of the context in which name resolution for the |
| * naming operation could not proceed further. Initially null. Should only |
| * be manipulated using <code>getEnvironment</code> and |
| * <code>setEnvironment methods</code>. |
| */ |
| protected Hashtable<?, ?> environment = null; |
| |
| /** |
| * Contains a composite name that is the unresolved part of the new name |
| * that was specified in a <code>Context.rename</code> operation and may |
| * be used to continue the <code>rename</code> operation. This field may |
| * be null and is initially null. This field should be accessed and modified |
| * using only <code>getRemainingNewName</code> and |
| * <code>setRemainingNewName</code>. |
| */ |
| protected Name remainingNewName = null; |
| |
| /** |
| * Constructs a <code>CannotProceedException</code> object. All |
| * unspecified fields are initialized to null. |
| */ |
| public CannotProceedException() { |
| super(); |
| } |
| |
| /** |
| * Constructs a <code>CannotProceedException</code> object with an |
| * optionally specified <code>String</code> parameter containing a |
| * detailed explanation message. The <code>String</code> parameter may be |
| * null. All unspecified fields are initialized to null. |
| * |
| * @param s |
| * The detailed explanation message for the exception. It may be |
| * null. |
| */ |
| public CannotProceedException(String s) { |
| super(s); |
| } |
| |
| /** |
| * Retrieves the value of the <code>altName</code> field. |
| * |
| * @return the value of the <code>altName</code> field. |
| * @see javax.naming.spi.ObjectFactory#getObjectInstance(Object, Name, |
| * Context, Hashtable) |
| */ |
| public Name getAltName() { |
| return altName; |
| } |
| |
| /** |
| * Retrieves the value of the <code>altNameCtx</code> field. |
| * |
| * @return the value of the <code>altNameCtx</code> field. |
| * @see javax.naming.spi.ObjectFactory#getObjectInstance(Object, Name, |
| * Context, Hashtable) |
| */ |
| public Context getAltNameCtx() { |
| return altNameCtx; |
| } |
| |
| /** |
| * Retrieves the value of the protected field <code>environment</code> |
| * which may be null. |
| * |
| * @return the value of the protected field <code>environment</code> which |
| * may be null. |
| */ |
| public Hashtable<?, ?> getEnvironment() { |
| return environment; |
| } |
| |
| /** |
| * Retrieves the value of the <code>remainingNewName</code> field. |
| * |
| * @return the value of the <code>remainingNewName</code> field. |
| */ |
| public Name getRemainingNewName() { |
| return remainingNewName; |
| } |
| |
| /** |
| * Modifies the value of the <code>altName</code> field to the specified |
| * <code>Name</code> parameter which is a composite name and may be null. |
| * |
| * @param name |
| * the name to set. |
| */ |
| public void setAltName(Name name) { |
| altName = name; |
| } |
| |
| /** |
| * Modifies the value of the <code>altNameCtx</code> field to the |
| * specified <code>Context</code> parameter which may be null. |
| * |
| * @param context |
| * the new context to set. |
| */ |
| public void setAltNameCtx(Context context) { |
| altNameCtx = context; |
| } |
| |
| /** |
| * Sets the value of the protected field <code>environment</code> from the |
| * <code>environment</code> parameter which may be null. |
| * |
| * @param hashtable |
| * the new environment to set. |
| */ |
| public void setEnvironment(Hashtable<?, ?> hashtable) { |
| environment = hashtable; |
| } |
| |
| /** |
| * Modifies the value of the <code>remainingNewName</code> field to the |
| * specified parameter which may be null. But otherwise is a composite name. |
| * When needing to specify other names, first convert them into a composite |
| * name with a single component, and then specify that composite name when |
| * invoking this method. |
| * <p> |
| * When a non-null name is specified, a clone of the composite name is |
| * stored in the <code>remainingNewName</code> field that becomes |
| * independent of the specified name. |
| * </p> |
| * |
| * @param name |
| * the new name to set. |
| */ |
| public void setRemainingNewName(Name name) { |
| remainingNewName = (null == name) ? null : (Name) name.clone(); |
| } |
| |
| } |