| /* | 
 |  * 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 org.apache.xerces.xni; | 
 |  | 
 | /** | 
 |  * This exception is the base exception of all XNI exceptions. It | 
 |  * can be constructed with an error message or used to wrap another | 
 |  * exception object. | 
 |  * <p> | 
 |  * <strong>Note:</strong> By extending the Java  | 
 |  * <code>RuntimeException</code>, XNI handlers and components are  | 
 |  * not required to catch XNI exceptions but may explicitly catch | 
 |  * them, if so desired. | 
 |  * | 
 |  * @author Andy Clark, IBM | 
 |  * | 
 |  * @version $Id$ | 
 |  */ | 
 | public class XNIException  | 
 |     extends RuntimeException { | 
 |  | 
 |     /** Serialization version. */ | 
 |     static final long serialVersionUID = 9019819772686063775L; | 
 |      | 
 |     // | 
 |     // Data | 
 |     // | 
 |  | 
 |     /** The wrapped exception. */ | 
 |     private Exception fException = this; | 
 |  | 
 |     // | 
 |     // Constructors | 
 |     // | 
 |  | 
 |     /** | 
 |      * Constructs an XNI exception with a message.  | 
 |      * | 
 |      * @param message The exception message. | 
 |      */ | 
 |     public XNIException(String message) { | 
 |         super(message); | 
 |     } // <init>(String) | 
 |  | 
 |     /** | 
 |      * Constructs an XNI exception with a wrapped exception.  | 
 |      * | 
 |      * @param exception The wrapped exception. | 
 |      */ | 
 |     public XNIException(Exception exception) { | 
 |         super(exception.getMessage()); | 
 |         fException = exception; | 
 |     } // <init>(Exception) | 
 |  | 
 |     /** | 
 |      * Constructs an XNI exception with a message and wrapped exception.  | 
 |      * | 
 |      * @param message The exception message. | 
 |      * @param exception The wrapped exception. | 
 |      */ | 
 |     public XNIException(String message, Exception exception) { | 
 |         super(message); | 
 |         fException = exception; | 
 |     } // <init>(Exception,String) | 
 |  | 
 |     // | 
 |     // Public methods | 
 |     // | 
 |  | 
 |     /** Returns the wrapped exception. */ | 
 |     public Exception getException() { | 
 |         return fException != this ? fException : null; | 
 |     } // getException():Exception | 
 |      | 
 |     /** | 
 |      * Initializes the cause of this <code>XNIException</code>. | 
 |      * The value must be an instance of <code>Exception</code> or | 
 |      * <code>null</code>. | 
 |      *  | 
 |      * @param throwable the cause | 
 |      * @return this exception | 
 |      *  | 
 |      * @throws IllegalStateException if a cause has already been set | 
 |      * @throws IllegalArgumentException if the cause is this exception | 
 |      * @throws ClassCastException if the cause is not assignable to <code>Exception</code> | 
 |      */ | 
 |     public synchronized Throwable initCause(Throwable throwable) { | 
 |         if (fException != this) { | 
 |             // TODO: Add error message. | 
 |             throw new IllegalStateException(); | 
 |         } | 
 |         if (throwable == this) { | 
 |             // TODO: Add error message. | 
 |             throw new IllegalArgumentException(); | 
 |         } | 
 |         fException = (Exception) throwable; | 
 |         return this; | 
 |     } // initCause(Throwable):Throwable | 
 |      | 
 |     /** Returns the cause of this <code>XNIException</code>. */ | 
 |     public Throwable getCause() { | 
 |         return getException(); | 
 |     } // getCause():Throwable | 
 |  | 
 | } // class XNIException |