/* Aalto XML processor
 *
 * Copyright (c) 2006- Tatu Saloranta, tatu.saloranta@iki.fi
 *
 * Licensed under the License specified in the file LICENSE which is
 * included with the source code.
 * You may not use this file except in compliance with the License.
 *
 * 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 com.fasterxml.aalto.impl;

import javax.xml.stream.*;

Base class for all XMLStreamException instances that we use. Sometimes used as is, but usually there should be more specific sub-class that indicates class of exception.
/** * Base class for all {@link XMLStreamException} instances that * we use. Sometimes used as is, but usually there should be more * specific sub-class that indicates class of exception. */
@SuppressWarnings("serial") public class StreamExceptionBase extends XMLStreamException {
D'oh. Super-class munges and hides the message, have to duplicate here
/** * D'oh. Super-class munges and hides the message, have to duplicate here */
final String mMsg; public StreamExceptionBase(String msg) { super(msg); mMsg = msg; } public StreamExceptionBase(Throwable th) { super(th.getMessage(), th); mMsg = th.getMessage(); if (getCause() == null) { initCause(th); } } public StreamExceptionBase(String msg, Location loc) { super(msg, loc); mMsg = msg; } public StreamExceptionBase(String msg, Location loc, Throwable th) { super(msg, loc, th); mMsg = msg; if (th != null && getCause() == null) { initCause(th); } }
Method is overridden for two main reasons: first, default method does not display public/system id information, even if it exists, and second, default implementation can not handle nested Location information.
/** * Method is overridden for two main reasons: first, default method * does not display public/system id information, even if it exists, and * second, default implementation can not handle nested Location * information. */
@Override public String getMessage() { String locMsg = getLocationDesc(); /* Better not use super's message if we do have location information, * since parent's message contains (part of) Location * info; something we can regenerate better... */ if (locMsg == null) { return super.getMessage(); } StringBuilder sb = new StringBuilder(mMsg.length() + locMsg.length() + 20); sb.append(mMsg); sb.append('\n'); sb.append(" at "); sb.append(locMsg); return sb.toString(); } @Override public String toString() { return getClass().getName()+": "+getMessage(); } /* /********************************************************************** /* Internal methods /********************************************************************** */ protected String getLocationDesc() { Location loc = getLocation(); return (loc == null) ? null : loc.toString(); } }