Source for javax.naming.NamingException

   1: /* NamingException.java -- Superclass of all naming Exceptions
   2:    Copyright (C) 2000, 2001 Free Software Foundation, Inc.
   3: 
   4: This file is part of GNU Classpath.
   5: 
   6: GNU Classpath is free software; you can redistribute it and/or modify
   7: it under the terms of the GNU General Public License as published by
   8: the Free Software Foundation; either version 2, or (at your option)
   9: any later version.
  10: 
  11: GNU Classpath is distributed in the hope that it will be useful, but
  12: WITHOUT ANY WARRANTY; without even the implied warranty of
  13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14: General Public License for more details.
  15: 
  16: You should have received a copy of the GNU General Public License
  17: along with GNU Classpath; see the file COPYING.  If not, write to the
  18: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  19: 02110-1301 USA.
  20: 
  21: Linking this library statically or dynamically with other modules is
  22: making a combined work based on this library.  Thus, the terms and
  23: conditions of the GNU General Public License cover the whole
  24: combination.
  25: 
  26: As a special exception, the copyright holders of this library give you
  27: permission to link this library with independent modules to produce an
  28: executable, regardless of the license terms of these independent
  29: modules, and to copy and distribute the resulting executable under
  30: terms of your choice, provided that you also meet, for each linked
  31: independent module, the terms and conditions of the license of that
  32: module.  An independent module is a module which is not derived from
  33: or based on this library.  If you modify this library, you may extend
  34: this exception to your version of the library, but you are not
  35: obligated to do so.  If you do not wish to do so, delete this
  36: exception statement from your version. */
  37: 
  38: package javax.naming;
  39: 
  40: import gnu.java.lang.CPStringBuilder;
  41: 
  42: import java.io.PrintStream;
  43: import java.io.PrintWriter;
  44: 
  45: /**
  46:  * Superclass of all naming Exceptions.
  47:  * Can contain extra information about the root cause of this exception
  48:  * (for example when the original exception was not a subclass of
  49:  * <code>NamingException</code>), the part of the <code>Name</code> that
  50:  * could be resolved (including the <code>Object</code> it resolved to)
  51:  * and the part of the <code>Name</code> that could not be resolved when
  52:  * the exception occured.
  53:  *
  54:  * @since 1.3
  55:  * @author Anthony Green (green@redhat.com)
  56:  * @author Mark Wielaard (mark@klomp.org)
  57:  */
  58: public class NamingException extends Exception
  59: {
  60:   private static final long serialVersionUID = -1299181962103167177L;
  61: 
  62:   /**
  63:    * The root cause of this exception. Might be null. Set by calling
  64:    * <code>setRootCause()</code>, can be accessed by calling
  65:    * <code>getRootCause()</code>.
  66:    */
  67:   protected Throwable rootException;
  68: 
  69:   /**
  70:    * If the exception was caused while resolving a <code>Name</code> then
  71:    * this field contains that part of the name that could be resolved.
  72:    * Field might be null. Set by calling <code>setResolvedName()</code>.
  73:    * Can be accessed by calling <code>getResolvedName</code>.
  74:    */
  75:   protected Name resolvedName;
  76: 
  77:   /**
  78:    * If the exception was caused while resolving a <code>Name</code> then
  79:    * this field contains the object that part of the name could be resolved to.
  80:    * Field might be null. Set by calling <code>setResolvedObj()</code>.
  81:    * Can be accessed by calling <code>getResolvedObj</code>.
  82:    */
  83:   protected Object resolvedObj;
  84: 
  85:   /**
  86:    * If the exception was caused while resolving a <code>Name</code> then
  87:    * this field contains that part of the name that could not be resolved.
  88:    * Field might be null. Set by calling <code>setRemainingName()</code>.
  89:    * The field can be extended by calling <code>appendRemainingName()</code>
  90:    * or <code>appendRemainingComponent()</code>.
  91:    * Can be accessed by calling <code>getRemainingName</code>.
  92:    */
  93:   protected Name remainingName;
  94: 
  95:   /**
  96:    * Creates a new NamingException without a message. Does not set any of the
  97:    * <code>rootException</code>, <code>resolvedName</code>,
  98:    * <code>resolvedObj</code> or <code>remainingObject</code> fields.
  99:    * These fields can be set later.
 100:    */
 101:   public NamingException ()
 102:   {
 103:     super();
 104:   }
 105: 
 106:   /**
 107:    * Creates a new NamingException with a detailed message. Does not set
 108:    * the <code>rootException</code>, <code>resolvedName</code>,
 109:    * <code>resolvedObj</code> or <code>remainingObject,</code> fields.
 110:    * These fields can be set later.
 111:    */
 112:   public NamingException (String msg)
 113:   {
 114:     super(msg);
 115:   }
 116: 
 117:   /**
 118:    * Gets the root cause field <code>rootException</code> of this Exception.
 119:    */
 120:   public Throwable getRootCause ()
 121:   {
 122:     return rootException;
 123:   }
 124: 
 125:   /**
 126:    * Sets the root cause field <code>rootException</code> of this Exception.
 127:    */
 128:   public void setRootCause (Throwable e)
 129:   {
 130:     rootException = e;
 131:   }
 132: 
 133:   /**
 134:    * Gets the part of the name that could be resolved before this exception
 135:    * happend. Returns the <code>resolvedName</code> field of this Exception.
 136:    */
 137:   public Name getResolvedName ()
 138:   {
 139:     return resolvedName;
 140:   }
 141: 
 142:   /**
 143:    * Sets the part of the name that could be resolved before this exception
 144:    * happend. Sets the <code>resolvedName</code> field of this Exception.
 145:    */
 146:   public void setResolvedName (Name name)
 147:   {
 148:     resolvedName = name;
 149:   }
 150: 
 151:   /**
 152:    * Gets the Object to which (part of) the name could be resolved before this
 153:    * exception happend. Returns the <code>resolvedObj</code> field of this
 154:    * Exception.
 155:    */
 156:   public Object getResolvedObj ()
 157:   {
 158:     return resolvedObj;
 159:   }
 160: 
 161:   /**
 162:    * Sets the Object to which (part of) the name could be resolved before this
 163:    * exception happend. Sets the <code>resolvedObj</code> field of this
 164:    * Exception.
 165:    */
 166:   public void setResolvedObj (Object o)
 167:   {
 168:     resolvedObj = o;
 169:   }
 170: 
 171:   /**
 172:    * Gets the part of the name that could not be resolved before this exception
 173:    * happend. Returns the <code>remainingName</code> field of this Exception.
 174:    */
 175:   public Name getRemainingName ()
 176:   {
 177:     return remainingName;
 178:   }
 179: 
 180:   /**
 181:    * Sets the part of the name that could be resolved before this exception
 182:    * happend. Sets the <code>resolvedName</code> field of this Exception.
 183:    * The field can be extended by calling <code>appendRemainingName()</code>
 184:    * or <code>appendRemainingComponent()</code>.
 185:    */
 186:   public void setRemainingName (Name name)
 187:   {
 188:     remainingName = name;
 189:   }
 190: 
 191:   /**
 192:    * Adds the given <code>Name</code> to the <code>remainingName</code> field.
 193:    * Does nothing when <code>name</code> is null or when a
 194:    * <code>InvalidNameException</code> is thrown when adding the name.
 195:    *
 196:    * @see Name#addAll(Name)
 197:    */
 198:   public void appendRemainingName (Name name)
 199:   {
 200:     if (name != null)
 201:       try
 202:         {
 203:           remainingName.addAll(name);
 204:         }
 205:       catch(InvalidNameException ine) { /* ignored */ }
 206:   }
 207: 
 208:   /**
 209:    * Adds the given <code>String</code> to the <code>remainingName</code> field.
 210:    * Does nothing when <code>name</code> is null or when a
 211:    * <code>InvalidNameException</code> is thrown when adding the component.
 212:    *
 213:    * @see Name#add(String)
 214:    */
 215:   public void appendRemainingComponent (String name)
 216:   {
 217:     if (name != null)
 218:       try
 219:         {
 220:           remainingName.add(name);
 221:         }
 222:       catch(InvalidNameException ine) { /* ignored */ }
 223:   }
 224: 
 225:   /**
 226:    * Gets the message given to the constructor or null if no message was given.
 227:    *
 228:    * @see Throwable#getMessage()
 229:    */
 230:   public String getExplanation()
 231:   {
 232:     return getMessage();
 233:   }
 234: 
 235:   /**
 236:    * Returns a String representation of this exception and possibly including
 237:    * the part object that could be resolved if the given flag is set to true.
 238:    * Always includes the root cause and the remaining name if not null.
 239:    */
 240:   public String toString(boolean objectInfo)
 241:   {
 242:     CPStringBuilder sb = new CPStringBuilder(super.toString());
 243:     Throwable cause = getRootCause();
 244:     if (cause != null)
 245:       {
 246:         sb.append(" caused by ");
 247:         sb.append(cause);
 248:       }
 249:     Name remaining = getRemainingName();
 250:     if (remaining != null)
 251:       {
 252:         sb.append(" [remainingName: ");
 253:         sb.append(remaining);
 254:       }
 255:     Object resolved = getResolvedObj();
 256:     if (objectInfo && resolved != null)
 257:       {
 258:         if (remainingName == null)
 259:           sb.append(" [");
 260:         else
 261:           sb.append(", ");
 262:         sb.append("resolvedObj: ");
 263:         sb.append(resolved);
 264:       }
 265:     if ((remaining != null) || (objectInfo && resolved != null))
 266:       sb.append(']');
 267: 
 268:     return sb.toString();
 269:   }
 270: 
 271:   /**
 272:    * Returns a string representation of this exception.
 273:    * Calls <code>toString(false)</code>.
 274:    */
 275:   public String toString()
 276:   {
 277:     return toString(false);
 278:   }
 279:   /**
 280:    * Prints the stacktrace of this exception or of the root cause if not null.
 281:    */
 282:   public void printStackTrace()
 283:   {
 284:     Throwable cause = getRootCause();
 285:     if (cause != null)
 286:       cause.printStackTrace();
 287:     else
 288:       super.printStackTrace();
 289:   }
 290: 
 291:   /**
 292:    * Prints the stacktrace of this exception or of the root cause if not null
 293:    * to the given <code>PrintStream</code>.
 294:    */
 295:   public void printStackTrace(PrintStream ps)
 296:   {
 297:     Throwable cause = getRootCause();
 298:     if (cause != null)
 299:       cause.printStackTrace(ps);
 300:     else
 301:       super.printStackTrace(ps);
 302:   }
 303: 
 304:   /**
 305:    * Prints the stacktrace of this exception or of the root cause if not null
 306:    * to the given <code>PrintWriter</code>.
 307:    */
 308:   public void printStackTrace(PrintWriter pw)
 309:   {
 310:     Throwable cause = getRootCause();
 311:     if (cause != null)
 312:       cause.printStackTrace(pw);
 313:     else
 314:       super.printStackTrace(pw);
 315:   }
 316: }