package com.fasterxml.jackson.core;
/**
* Intermediate base class for all problems encountered when
* processing (parsing, generating) JSON content
* that are not pure I/O problems.
* Regular {@link java.io.IOException}s will be passed through as is.
* Sub-class of {@link java.io.IOException} for convenience.
*/
public class JsonProcessingException
extends java.io.IOException
{
final static long serialVersionUID = 123; // Stupid eclipse...
protected JsonLocation _location;
protected JsonProcessingException(String msg, JsonLocation loc, Throwable rootCause)
{
/* Argh. IOException(Throwable,String) is only available starting
* with JDK 1.6...
*/
super(msg);
if (rootCause != null) {
initCause(rootCause);
}
_location = loc;
}
protected JsonProcessingException(String msg)
{
super(msg);
}
protected JsonProcessingException(String msg, JsonLocation loc)
{
this(msg, loc, null);
}
protected JsonProcessingException(String msg, Throwable rootCause)
{
this(msg, null, rootCause);
}
protected JsonProcessingException(Throwable rootCause)
{
this(null, null, rootCause);
}
public JsonLocation getLocation() {
return _location;
}
/*
/**********************************************************
/* Extended API
/**********************************************************
*/
/**
* Method that allows accessing the original "message" argument,
* without additional decorations (like location information)
* that overridden {@link #getMessage} adds.
*
* @since 2.1
*/
public String getOriginalMessage()
{
return super.getMessage();
}
/*
/**********************************************************
/* Methods for sub-classes to use, override
/**********************************************************
*/
/**
* Accessor that sub-classes can override to append additional
* information right after the main message, but before
* source location information.
*/
protected String getMessageSuffix() {
return null;
}
/*
/**********************************************************
/* Overrides of standard methods
/**********************************************************
*/
/**
* Default method overridden so that we can add location information
*/
@Override
public String getMessage()
{
String msg = super.getMessage();
if (msg == null) {
msg = "N/A";
}
JsonLocation loc = getLocation();
String suffix = getMessageSuffix();
// mild optimization, if nothing extra is needed:
if (loc != null || suffix != null) {
StringBuilder sb = new StringBuilder(100);
sb.append(msg);
if (suffix != null) {
sb.append(suffix);
}
if (loc != null) {
sb.append('\n');
sb.append(" at ");
sb.append(loc.toString());
}
msg = sb.toString();
}
return msg;
}
@Override
public String toString() {
return getClass().getName()+": "+getMessage();
}
}