/*
* XMLException.java NanoXML/Java $Revision: 1.4 $ $Date: 2002/01/04 21:03:29 $
* $Name: RELEASE_2_2_1 $ This file is part of NanoXML 2 for Java. Copyright (C)
* 2000-2002 Marc De Scheemaecker, All Rights Reserved. This software is
* provided 'as-is', without any express or implied warranty. In no event will
* the authors be held liable for any damages arising from the use of this
* software. Permission is granted to anyone to use this software for any
* purpose, including commercial applications, and to alter it and redistribute
* it freely, subject to the following restrictions: 1. The origin of this
* software must not be misrepresented; you must not claim that you wrote the
* original software. If you use this software in a product, an acknowledgment
* in the product documentation would be appreciated but is not required. 2.
* Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software. 3. This notice may not be
* removed or altered from any source distribution.
*/
package org.freeplane.n3.nanoxml;
import java.io.PrintStream;
import java.io.PrintWriter;
/**
* An XMLException is thrown when an exception occurred while processing the XML
* data.
*
* @author Marc De Scheemaecker
* @version $Name: RELEASE_2_2_1 $, $Revision: 1.4 $
*/
public class XMLException extends Exception {
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* Builds the exception message
*
* @param systemID
* the system ID from where the data came
* @param lineNr
* the line number in the XML data where the exception occurred.
* @param e
* the encapsulated exception.
* @param msg
* the message of the exception.
* @param reportParams
* true if the systemID, lineNr and e params need to be appended
* to the message
*/
private static String buildMessage(final String systemID, final int lineNr, final Exception e, final String msg,
final boolean reportParams) {
String str = msg;
if (reportParams) {
if (systemID != null) {
str += ", SystemID='" + systemID + "'";
}
if (lineNr >= 0) {
str += ", Line=" + lineNr;
}
if (e != null) {
str += ", Exception: " + e;
}
}
return str;
}
/**
* Encapsulated exception.
*/
private Exception encapsulatedException;
/**
* The line number in the XML data where the exception occurred.
*/
final private int lineNr;
/**
* The message of the exception.
*/
final private String msg;
/**
* The system ID of the XML data where the exception occurred.
*/
private String systemID;
/**
* Creates a new exception.
*
* @param e
* the encapsulated exception.
*/
public XMLException(final Exception e) {
this(null, -1, e, "Nested Exception", false);
}
/**
* Creates a new exception.
*
* @param msg
* the message of the exception.
*/
public XMLException(final String msg) {
this(null, -1, null, msg, false);
}
/**
* Creates a new exception.
*
* @param systemID
* the system ID of the XML data where the exception occurred
* @param lineNr
* the line number in the XML data where the exception occurred.
* @param e
* the encapsulated exception.
*/
public XMLException(final String systemID, final int lineNr, final Exception e) {
this(systemID, lineNr, e, "Nested Exception", true);
}
/**
* Creates a new exception.
*
* @param systemID
* the system ID from where the data came
* @param lineNr
* the line number in the XML data where the exception occurred.
* @param e
* the encapsulated exception.
* @param msg
* the message of the exception.
* @param reportParams
* true if the systemID, lineNr and e params need to be appended
* to the message
*/
public XMLException(final String systemID, final int lineNr, final Exception e, final String msg,
final boolean reportParams) {
super(XMLException.buildMessage(systemID, lineNr, e, msg, reportParams));
this.systemID = systemID;
this.lineNr = lineNr;
encapsulatedException = e;
this.msg = XMLException.buildMessage(systemID, lineNr, e, msg, reportParams);
}
/**
* Creates a new exception.
*
* @param systemID
* the system ID of the XML data where the exception occurred
* @param lineNr
* the line number in the XML data where the exception occurred.
* @param msg
* the message of the exception.
*/
public XMLException(final String systemID, final int lineNr, final String msg) {
this(systemID, lineNr, null, msg, true);
}
/**
* Cleans up the object when it's destroyed.
*/
@Override
protected void finalize() throws Throwable {
systemID = null;
encapsulatedException = null;
super.finalize();
}
/**
* Returns the encapsulated exception, or null if no exception is
* encapsulated.
*/
public Exception getException() {
return encapsulatedException;
}
/**
* Returns the line number in the XML data where the exception occurred. If
* there is no line number known, -1 is returned.
*/
public int getLineNr() {
return lineNr;
}
/**
* Returns the system ID of the XML data where the exception occurred. If
* there is no system ID known, null is returned.
*/
public String getSystemID() {
return systemID;
}
/**
* Dumps the exception stack to System.err.
*/
@Override
public void printStackTrace() {
super.printStackTrace();
if (encapsulatedException != null) {
System.err.println("*** Nested Exception:");
encapsulatedException.printStackTrace();
}
}
/**
* Dumps the exception stack to an output stream.
*
* @param stream
* the output stream
*/
@Override
public void printStackTrace(final PrintStream stream) {
super.printStackTrace(stream);
if (encapsulatedException != null) {
stream.println("*** Nested Exception:");
encapsulatedException.printStackTrace(stream);
}
}
/**
* Dumps the exception stack to a print writer.
*
* @param writer
* the print writer
*/
@Override
public void printStackTrace(final PrintWriter writer) {
super.printStackTrace(writer);
if (encapsulatedException != null) {
writer.println("*** Nested Exception:");
encapsulatedException.printStackTrace(writer);
}
}
/**
* Returns a string representation of the exception.
*/
@Override
public String toString() {
return msg;
}
}