001    /*
002     * $Id: JAXBException.java,v 1.7 2002/11/11 18:58:20 ryans Exp $
003     *
004     * Copyright 2001 Sun Microsystems, Inc. All Rights Reserved.
005     * 
006     * This software is the proprietary information of Sun Microsystems, Inc.  
007     * Use is subject to license terms.
008     * 
009     */
010    
011    package javax.xml.bind;
012    
013    import java.io.PrintWriter;
014    
015    /**
016     * This is the root exception class for all JAXB exceptions.
017     *
018     * @author <ul><li>Ryan Shoemaker, Sun Microsystems, Inc.</li></ul>
019     * @version $Revision: 1.7 $ $Date: 2002/11/11 18:58:20 $
020     * @see JAXBContext
021     * @see Marshaller
022     * @see Unmarshaller
023     * @since JAXB1.0
024     */
025    public class JAXBException extends Exception {
026      
027        /** 
028         * Vendor specific error code
029         *
030         */
031        private String errorCode;
032    
033        /** 
034         * Exception reference
035         *
036         */
037        private Throwable linkedException;
038    
039    
040        /** 
041         * Construct a JAXBException with the specified detail message.  The 
042         * errorCode and linkedException will default to null.
043         *
044         * @param message a description of the exception
045         */
046        public JAXBException(String message) {
047            this( message, null, null );
048        }
049    
050        /** 
051         * Construct a JAXBException with the specified detail message and vendor 
052         * specific errorCode.  The linkedException will default to null.
053         *
054         * @param message a description of the exception
055         * @param errorCode a string specifying the vendor specific error code
056         */
057        public JAXBException(String message, String errorCode) {
058            this( message, errorCode, null );
059        }
060    
061        /** 
062         * Construct a JAXBException with a linkedException.  The detail message and
063         * vendor specific errorCode will default to null.
064         *
065         * @param exception the linked exception
066         */
067        public JAXBException(Throwable exception) {
068            this( null, null, exception );
069        }
070        
071        /** 
072         * Construct a JAXBException with the specified detail message and 
073         * linkedException.  The errorCode will default to null.
074         *
075         * @param message a description of the exception
076         * @param exception the linked exception
077         */
078        public JAXBException(String message, Throwable exception) {
079            this( message, null, exception );
080        }
081        
082        /** 
083         * Construct a JAXBException with the specified detail message, vendor 
084         * specific errorCode, and linkedException.
085         *
086         * @param message a description of the exception
087         * @param errorCode a string specifying the vendor specific error code
088         * @param exception the linked exception
089         */
090        public JAXBException(String message, String errorCode, Throwable exception) {
091            super( message );
092            this.errorCode = errorCode;
093            this.linkedException = exception;
094        }
095        
096        /** 
097         * Get the vendor specific error code
098         *
099         * @return a string specifying the vendor specific error code
100         */
101        public String getErrorCode() {
102            return this.errorCode;
103        }
104    
105        /**
106         * Get the linked exception 
107         *
108         * @return the linked Exception, null if none exists
109         */
110        public Throwable getLinkedException() {
111            return linkedException;
112        }
113    
114        /**
115         * Add a linked Exception.
116         *
117         * @param exception the linked Exception (A null value is permitted and 
118         *                  indicates that the linked exception does not exist or
119         *                  is unknown).
120         */
121        public synchronized void setLinkedException( Throwable exception ) {
122            this.linkedException = exception;
123        }
124        
125        /**
126         * Returns a short description of this JAXBException.
127         *
128         */
129        public String toString() {
130            return linkedException == null ? 
131                super.toString() :
132                super.toString() + "\n - with linked exception:\n[" +
133                                    linkedException.toString()+ "]";
134        }
135     
136        /**
137         * Prints this JAXBException and its stack trace (including the stack trace
138         * of the linkedException if it is non-null) to the PrintStream.
139         *
140         * @param s PrintStream to use for output
141         */
142        public void printStackTrace( java.io.PrintStream s ) {
143            if( linkedException != null ) {
144              linkedException.printStackTrace(s);
145              s.println("--------------- linked to ------------------");
146            }
147    
148            super.printStackTrace(s);
149        }
150     
151        /**
152         * Prints this JAXBException and its stack trace (including the stack trace
153         * of the linkedException if it is non-null) to <tt>System.err</tt>.
154         *
155         */
156        public void printStackTrace() {
157            printStackTrace(System.err);
158        }
159    
160        /**
161         * Prints this JAXBException and its stack trace (including the stack trace
162         * of the linkedException if it is non-null) to the PrintWriter.
163         *
164         * @param s PrintWriter to use for output
165         */
166        public void printStackTrace(PrintWriter s) {
167            if( linkedException != null ) {
168              linkedException.printStackTrace(s);
169              s.println("--------------- linked to ------------------");
170            }
171    
172            super.printStackTrace(s);
173        }
174    
175    }