/* 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();
}
}