blob: b205d4f1cdab0ebf3044191ac218549109b6e52c [file] [log] [blame]
/*
* 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.uima;
import java.util.Locale;
import org.xml.sax.SAXException;
/**
* This is the superclass for all SaxExceptions in UIMA.
* It provides the link to common implementation in i18nExceptionI (via default methods), and
* extends SAXException.
*
* <p>It supplies a messages properties file org.apache.uima.UIMASaxException_Messages</p>
*/
public class UIMASaxException extends SAXException implements I18nExceptionI {
private static final long serialVersionUID = 1L;
/**
* The name of the {@link java.util.ResourceBundle ResourceBundle} containing the standard UIMA
* Exception messages.
*/
public static final String STANDARD_MESSAGE_CATALOG = "org.apache.uima.UIMASaxException_Messages";
/**
* The base name of the resource bundle in which the message for this
* exception is located.
*/
private String mResourceBundleName;
/**
* An identifier that maps to the message for this exception.
*/
private String mMessageKey;
/**
* The arguments to this exception's message, if any. This allows an
* <code>InternationalizedException</code> to have a compound message, made
* up of multiple parts that are concatenated in a language-neutral way.
*/
private Object[] mArguments;
/**
* The exception that caused this exception to occur.
*/
private Throwable mCause;
/**
* Creates a new exception with a null message.
*/
public UIMASaxException() {
super();
}
/**
* Creates a new exception with the specified cause and a null message.
*
* @param aCause
* the original exception that caused this exception to be thrown, if any
*/
public UIMASaxException(Exception aCause) {
super(aCause);
}
/**
* Creates a new exception with a the specified message.
*
* @param aResourceBundleName
* the base name of the resource bundle in which the message for this exception is
* located.
* @param aMessageKey
* an identifier that maps to the message for this exception. The message may contain
* placeholders for arguments as defined by the
* {@link java.text.MessageFormat MessageFormat} class.
* @param aArguments
* The arguments to the message. <code>null</code> may be used if the message has no
* arguments.
*/
public UIMASaxException(String aResourceBundleName, String aMessageKey, Object[] aArguments) {
this(aResourceBundleName, aMessageKey, aArguments, null);
}
/**
* Creates a new exception with the specified message and cause.
*
* @param aResourceBundleName
* the base name of the resource bundle in which the message for this exception is
* located.
* @param aMessageKey
* an identifier that maps to the message for this exception. The message may contain
* placeholders for arguments as defined by the
* {@link java.text.MessageFormat MessageFormat} class.
* @param aArguments
* The arguments to the message. <code>null</code> may be used if the message has no
* arguments.
* @param aCause
* the original exception that caused this exception to be thrown, if any
*/
public UIMASaxException(String aResourceBundleName, String aMessageKey, Object[] aArguments,
Throwable aCause) {
super();
this.mResourceBundleName = aResourceBundleName;
this.mMessageKey = aMessageKey;
this.mArguments = aArguments;
this.mCause = aCause;
}
/**
* Creates a new exception with a message from the {@link #STANDARD_MESSAGE_CATALOG}.
*
* @param aMessageKey
* an identifier that maps to the message for this exception. The message may contain
* placeholders for arguments as defined by the
* {@link java.text.MessageFormat MessageFormat} class.
* @param aArguments
* The arguments to the message. <code>null</code> may be used if the message has no
* arguments.
*/
public UIMASaxException(String aMessageKey, Object[] aArguments) {
this(STANDARD_MESSAGE_CATALOG, aMessageKey, aArguments, null);
}
/**
* Creates a new exception with the specified cause and a message from the
* {@link #STANDARD_MESSAGE_CATALOG}.
*
* @param aMessageKey
* an identifier that maps to the message for this exception. The message may contain
* placeholders for arguments as defined by the
* {@link java.text.MessageFormat MessageFormat} class.
* @param aArguments
* The arguments to the message. <code>null</code> may be used if the message has no
* arguments.
* @param aCause
* the original exception that caused this exception to be thrown, if any
*/
public UIMASaxException(String aMessageKey, Object[] aArguments, Throwable aCause) {
this(STANDARD_MESSAGE_CATALOG, aMessageKey, aArguments, aCause);
}
/**
* Gets the cause of this Exception.
*
* @return the Throwable that caused this Exception to occur, if any. Returns
* <code>null</code> if there is no such cause.
*/
public Throwable getCause() {
return mCause;
}
public synchronized Throwable initCause(Throwable cause) {
mCause = cause;
return this;
}
/**
* Gets the base name of the resource bundle in which the message for this
* exception is located.
*
* @return the resource bundle base name. May return <code>null</code> if
* this exception has no message.
*/
public String getResourceBundleName() {
return mResourceBundleName;
}
/**
* Gets the identifier for this exception's message. This identifier can be
* looked up in this exception's
* {@link java.util.ResourceBundle ResourceBundle} to get the locale-specific
* message for this exception.
*
* @return the resource identifier for this exception's message. May return
* <code>null</code> if this exception has no message.
*/
public String getMessageKey() {
return mMessageKey;
}
/**
* Gets the arguments to this exception's message. Arguments allow a
* <code>InternationalizedException</code> to have a compound message, made
* up of multiple parts that are concatenated in a language-neutral way.
*
* @return the arguments to this exception's message.
*/
public Object[] getArguments() {
if (mArguments == null)
return new Object[0];
return mArguments.clone();
}
/**
* @return The message of the exception. Useful for including the text in
* another exception.
*/
public String getMessage() {
return getLocalizedMessage(Locale.ENGLISH);
}
/**
* Gets the localized detail message for this exception. This uses the default
* Locale for this JVM. A Locale may be specified using
* {@link #getLocalizedMessage(Locale)}.
*
* @return this exception's detail message, localized for the default Locale.
*/
public String getLocalizedMessage() {
return getLocalizedMessage(Locale.getDefault());
}
}