1f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project/* Copyright (C) 2003 Vladimir Roubtsov. All rights reserved. 2f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 3f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * This program and the accompanying materials are made available under 4f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * the terms of the Common Public License v1.0 which accompanies this distribution, 5f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * and is available at http://www.eclipse.org/legal/cpl-v10.html 6f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 7f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * $Id: AbstractException.java,v 1.1.1.1 2004/05/09 16:57:57 vlad_r Exp $ 8f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 9f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectpackage com.vladium.util.exception; 10f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 11f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport java.io.IOException; 12f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport java.io.ObjectOutputStream; 13f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport java.io.PrintStream; 14f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport java.io.PrintWriter; 15f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 16f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project// ---------------------------------------------------------------------------- 17f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project/** 18f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Based on code published by me in <a href="http://www.fawcette.com/javapro/2002_12/online/exception_vroubtsov_12_16_02/default_pf.asp">JavaPro, 2002</a>.<P> 19f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 20f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * This checked exception class is designed as a base/expansion point for the 21f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * entire hierarchy of checked exceptions in a project.<P> 22f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 23f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * It provides the following features: 24f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * <UL> 25f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * <LI> ability to take in compact error codes that map to full text messages 26f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * in a resource bundle loaded at this class' instantiation time. This avoids 27f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * hardcoding the error messages in product code and allows for easy 28f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * localization of such text if required. Additionally, these messages 29f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * can be parametrized in the java.text.MessageFormat style; 30f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * <LI> exception chaining in J2SE versions prior to 1.4 31f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * </UL> 32f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 33f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * See {@link AbstractRuntimeException} for an unchecked version of the same class.<P> 34f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 35f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * TODO: javadoc 36f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 37f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Each constructor that accepts a String 'message' parameter accepts an error 38f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * code as well. You are then responsible for ensuring that either the root 39f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * <CODE>com.vladium.exception.exceptions</CODE> resource bundle 40f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * or your project/exception class-specific resource bundle [see 41f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * <A HREF="#details">below</A> for details] contains a mapping for this error 42f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * code. When this lookup fails the passed String value itself will be used as 43f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * the error message.<P> 44f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 45f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * All constructors taking an 'arguments' parameter supply parameters to the error 46f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * message used as a java.text.MessageFormat pattern.<P> 47f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 48f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Example: 49f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * <PRE><CODE> 50f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * File file = ... 51f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * try 52f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * ... 53f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * catch (Exception e) 54f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * { 55f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * throw new AbstractException ("FILE_NOT_FOUND", new Object[] {file, e}, e); 56f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * } 57f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * </CODE></PRE> 58f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * where <CODE>com.vladium.util.exception.exceptions</CODE> contains: 59f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * <PRE><CODE> 60f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * FILE_NOT_FOUND: file {0} could not be opened: {1} 61f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * </CODE></PRE> 62f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 63f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * To log exception data use {@link #getMessage} or <CODE>printStackTrace</CODE> 64f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * family of methods. You should never have to use toString().<P> 65f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 66f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * <A NAME="details"> It is also possible to use project- or exception 67f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * subhierarchy-specific message resource bundles without maintaining all error 68f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * codes in <CODE>com.vladium.exception.exceptions</CODE>. To do so, create a 69f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * custom resource bundle and add the following static initializer code to your 70f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * base exception class: 71f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * <PRE><CODE> 72f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * static 73f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * { 74f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * addExceptionResource (MyException.class, "my_custom_resource_bundle"); 75f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * } 76f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * </CODE></PRE> 77f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * The bundle name is relative to MyException package. This step can omitted if 78f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * the bundle name is "exceptions". 79f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 80f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Note that the implementation correctly resolves error code name collisions 81f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * across independently developed exception families, as long as resource bundles 82f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * use unique names. Specifically, error codes follow inheritance and hiding rules 83f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * similar to Java class static methods. See {@link ExceptionCommon#addExceptionResource} 84f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * for further details. 85f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 86f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @author Vlad Roubtsov, (C) 2002 87f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 88f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectpublic 89f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectabstract class AbstractException extends Exception implements ICodedException, IThrowableWrapper 90f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project{ 91f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // public: ................................................................ 92f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 93f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project /** 94f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Constructs an exception with null message and null cause. 95f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 96f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public AbstractException () 97f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 98f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project m_cause = null; 99f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project m_arguments = null; 100f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 101f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 102f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project /** 103f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Constructs an exception with given error message/code and null cause. 104f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 105f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @param message the detail message [can be null] 106f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 107f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public AbstractException (final String message) 108f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 109f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project super (message); 110f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project m_cause = null; 111f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project m_arguments = null; 112f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 113f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 114f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project /** 115f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Constructs an exception with given error message/code and null cause. 116f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 117f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @param message the detail message [can be null] 118f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @param arguments message format parameters [can be null or empty] 119f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 120f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @see java.text.MessageFormat 121f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 122f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public AbstractException (final String message, final Object [] arguments) 123f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 124f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project super (message); 125f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project m_cause = null; 126f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project m_arguments = arguments == null ? null : (Object []) arguments.clone (); 127f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 128f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 129f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project /** 130f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Constructs an exception with null error message/code and given cause. 131f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 132f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @param cause the cause [nested exception] [can be null] 133f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 134f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public AbstractException (final Throwable cause) 135f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 136f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project super (); 137f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project m_cause = cause; 138f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project m_arguments = null; 139f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 140f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 141f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project /** 142f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Constructs an exception with given error message/code and given cause. 143f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 144f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @param message the detail message [can be null] 145f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @param cause the cause [nested exception] [can be null] 146f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 147f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public AbstractException (final String message, final Throwable cause) 148f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 149f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project super (message); 150f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project m_cause = cause; 151f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project m_arguments = null; 152f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 153f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 154f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project /** 155f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Constructs an exception with given error message/code and given cause. 156f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 157f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @param message the detail message [can be null] 158f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @param arguments message format parameters [can be null or empty] 159f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @param cause the cause [nested exception] [can be null] 160f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 161f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @see java.text.MessageFormat 162f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 163f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public AbstractException (final String message, final Object [] arguments, final Throwable cause) 164f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 165f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project super (message); 166f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project m_cause = cause; 167f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project m_arguments = arguments == null ? null : (Object []) arguments.clone (); 168f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 169f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 170f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 171f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project /** 172f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Overrides base method to support error code lookup and avoid returning nulls. 173f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Note that this does not recurse into any 'cause' for message lookup, it only 174f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * uses the data passed into the constructor. Subclasses cannot override.<P> 175f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 176f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Equivalent to {@link #getLocalizedMessage}. 177f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 178f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @return String error message provided at construction time or the result 179f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * of toString() if no/null message was provided [never null]. 180f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 181f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public final String getMessage () 182f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 183f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (m_message == null) // not synchronized by design 184f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 185f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project String msg; 186f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final String supermsg = super.getMessage (); 187f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final Class _class = getClass (); 188f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 189f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (m_arguments == null) 190f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 191f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project msg = ExceptionCommon.getMessage (_class, supermsg); 192f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 193f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project else 194f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 195f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project msg = ExceptionCommon.getMessage (_class, supermsg, m_arguments); 196f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 197f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 198f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (msg == null) 199f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 200f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // this is the same as what's done in Throwable.toString() [copied here to be independent of future JDK changes] 201f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final String className = _class.getName (); 202f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 203f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project msg = (supermsg != null) ? (className + ": " + supermsg) : className; 204f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 205f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 206f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project m_message = msg; 207f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 208f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 209f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project return m_message; 210f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 211f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 212f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project /** 213f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Overrides base method for the sole purpose of making it final.<P> 214f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 215f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Equivalent to {@link #getMessage}. 216f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 217f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public final String getLocalizedMessage () 218f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 219f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // this is the same as what's done in Throwable 220f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // [copied here to be independent of future JDK changes] 221f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project return getMessage (); 222f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 223f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 224f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project /** 225f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Overrides Exception.printStackTrace() to (a) force the output to go 226f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * to System.out and (b) handle nested exceptions in JDKs prior to 1.4.<P> 227f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 228f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Subclasses cannot override. 229f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 230f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public final void printStackTrace () 231f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 232f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // NOTE: unlike the JDK implementation, force the output to go to System.out: 233f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project ExceptionCommon.printStackTrace (this, System.out); 234f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 235f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 236f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project /** 237f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Overrides Exception.printStackTrace() to handle nested exceptions in JDKs prior to 1.4.<P> 238f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 239f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Subclasses cannot override. 240f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 241f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public final void printStackTrace (final PrintStream s) 242f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 243f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project ExceptionCommon.printStackTrace (this, s); 244f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 245f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 246f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project /** 247f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Overrides Exception.printStackTrace() to handle nested exceptions in JDKs prior to 1.4.<P> 248f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 249f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Subclasses cannot override. 250f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 251f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public final void printStackTrace (final PrintWriter s) 252f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 253f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project ExceptionCommon.printStackTrace (this, s); 254f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 255f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 256f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // ICodedException: 257f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 258f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project /** 259f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Returns the String that was passed as 'message' constructor argument. 260f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Can be null. 261f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 262f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @return message code string [can be null] 263f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 264f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public final String getErrorCode () 265f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 266f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project return super.getMessage (); 267f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 268f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 269f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // IThrowableWrapper: 270f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 271f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project /** 272f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * This implements {@link IThrowableWrapper} 273f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * and also overrides the base method in JDK 1.4+. 274f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 275f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public final Throwable getCause () 276f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 277f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project return m_cause; 278f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 279f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 280f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public void __printStackTrace (final PrintStream ps) 281f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 282f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project super.printStackTrace (ps); 283f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 284f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 285f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public void __printStackTrace (final PrintWriter pw) 286f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 287f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project super.printStackTrace (pw); 288f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 289f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 290f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project /** 291f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Equivalent to {@link ExceptionCommon#addExceptionResource}, repeated here for 292f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * convenience. Subclasses should invoke from static initializers <I>only</I>. 293f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 'namespace' should be YourException.class. 294f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 295f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public static void addExceptionResource (final Class namespace, 296f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final String messageResourceBundleName) 297f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 298f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // note: 'namespace' will be the most derived class; it is possible to 299f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // auto-detect that in a static method but that requires some security 300f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // permissions 301f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project ExceptionCommon.addExceptionResource (namespace, messageResourceBundleName); 302f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 303f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 304f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // protected: ............................................................. 305f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 306f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // package: ............................................................... 307f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 308f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // private: ............................................................... 309f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 310f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 311f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project /* 312f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Ensures that this instance can be serialized even if some message parameters 313f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * are not serializable objects. 314f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 315f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project private void writeObject (final ObjectOutputStream out) 316f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project throws IOException 317f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 318f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project getMessage (); // transform this instance to serializable form 319f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project out.defaultWriteObject (); 320f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 321f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 322f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 323f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project private String m_message; // marshalled/cached result of getMessage() 324f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project private transient final Object [] m_arguments; 325f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // note: this field duplicates functionality available in stock Throwable in JRE 1.4+ 326f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project private final Throwable m_cause; 327f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 328f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project} // end of class 329f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project// ---------------------------------------------------------------------------- 330