// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.tools;
import static org.openstreetmap.josm.tools.I18n.tr;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
/**
* An exception thrown during XML parsing, with known line and column.
* @since 6906
*/
public class XmlParsingException extends SAXException {
private int columnNumber;
private int lineNumber;
/**
* Constructs a new {@code XmlParsingException}.
* @param e The cause
*/
public XmlParsingException(Exception e) {
super(e);
}
/**
* Constructs a new {@code XmlParsingException}.
* @param message The error message
* @param e The cause
*/
public XmlParsingException(String message, Exception e) {
super(message, e);
}
/**
* Constructs a new {@code XmlParsingException}.
* @param message The error message
*/
public XmlParsingException(String message) {
super(message);
}
/**
* Sets the location (line/column) where the exception occured.
* @param locator object giving the location (line/column) where the exception occured
* @return {@code this}
*/
public XmlParsingException rememberLocation(Locator locator) {
if (locator != null) {
this.columnNumber = locator.getColumnNumber();
this.lineNumber = locator.getLineNumber();
}
return this;
}
@Override
public String getMessage() {
String msg = super.getMessage();
if (lineNumber == 0 && columnNumber == 0)
return msg;
if (msg == null) {
msg = getClass().getName();
}
return msg + ' ' + tr("(at line {0}, column {1})", lineNumber, columnNumber);
}
/**
* Returns the column number where the exception occured.
* @return the column number where the exception occured
*/
public int getColumnNumber() {
return columnNumber;
}
/**
* Returns the line number where the exception occured.
* @return the line number where the exception occured
*/
public int getLineNumber() {
return lineNumber;
}
}