package at.gv.egovernment.moa.util;
import org.apache.xml.utils.DefaultErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import at.gv.egovernment.moa.logging.LogMsg;
import at.gv.egovernment.moa.logging.Logger;
/**
* An ErrorHandler
that logs a message and throws a
* SAXException
upon error
and fatal
* parsing errors.
*
* @author Patrick Peck
* @author Sven Aigner
*/
public class MOAErrorHandler extends DefaultErrorHandler {
/**
* Logs a warning message.
*
* @see org.xml.sax.ErrorHandler#warning(SAXParseException)
*/
public void warning(SAXParseException exception) throws SAXException {
warn("parser.00", messageParams(exception), null);
}
/**
* Logs a warning and rethrows the exception
.
*
* @see org.xml.sax.ErrorHandler#error(SAXParseException)
*/
public void error(SAXParseException exception) throws SAXException {
warn("parser.01", messageParams(exception), null);
throw exception;
}
/**
* Logs a warning and rethrows the exception
.
*
* @see org.xml.sax.ErrorHandler#fatalError(SAXParseException)
*/
public void fatalError(SAXParseException exception) throws SAXException {
warn("parser.02", messageParams(exception), null);
throw exception;
}
/**
* Log a warning message.
*
* @param messageId The message ID to log.
* @param parameters Additional message parameters.
* @param t The Throwable
to log; usually the cause of this
* warning.
*/
private static void warn(
String messageId,
Object[] parameters,
Throwable t) {
MessageProvider msg = MessageProvider.getInstance();
Logger.warn(new LogMsg(msg.getMessage(messageId, parameters)), t);
}
/**
* Put the system id, line and column number information from the exception
* into an Object
array, to provide it as a
* MessageFormat
parameter.
*
* @param e The SAXParseException
containing the
* source system id and line/column numbers.
* @return An array containing the system id (a String
) as well
* as line/column numbers (2 Integer
objects) from the
* SAXParseException
.
*/
private static Object[] messageParams(SAXParseException e) {
return new Object[] {
e.getMessage(),
e.getSystemId(),
new Integer(e.getLineNumber()),
new Integer(e.getColumnNumber())};
}
}