blob: c9662dd04a08948478b24f6a4f3baab2b3ec58ea [file] [log] [blame]
/* Jackson JSON-processor.
*
* Copyright (c) 2007- Tatu Saloranta, tatu.saloranta@iki.fi
*/
package com.fasterxml.jackson.core;
import com.fasterxml.jackson.core.util.RequestPayload;
/**
* Exception type for parsing problems, used when non-well-formed content
* (content that does not conform to JSON syntax as per specification)
* is encountered.
*/
public class JsonParseException extends JsonProcessingException {
private static final long serialVersionUID = 2L; // 2.7
// transient since 2.7.4
protected transient JsonParser _processor;
/**
* Optional payload that can be assigned to pass along for error reporting
* or handling purposes. Core streaming parser implementations DO NOT
* initialize this; it is up to using applications and frameworks to
* populate it.
*
* @since 2.8
*/
protected RequestPayload _requestPayload;
@Deprecated // since 2.7
public JsonParseException(String msg, JsonLocation loc) {
super(msg, loc);
}
@Deprecated // since 2.7
public JsonParseException(String msg, JsonLocation loc, Throwable root) {
super(msg, loc, root);
}
/**
* Constructor that uses current parsing location as location, and
* sets processor (accessible via {@link #getProcessor()}) to
* specified parser.
*
* @since 2.7
*/
public JsonParseException(JsonParser p, String msg) {
super(msg, (p == null) ? null : p.getCurrentLocation());
_processor = p;
}
/**
* @since 2.7
*/
public JsonParseException(JsonParser p, String msg, Throwable root) {
super(msg, (p == null) ? null : p.getCurrentLocation(), root);
_processor = p;
}
/**
* @since 2.7
*/
public JsonParseException(JsonParser p, String msg, JsonLocation loc) {
super(msg, loc);
_processor = p;
}
/**
* @since 2.7
*/
public JsonParseException(JsonParser p, String msg, JsonLocation loc, Throwable root) {
super(msg, loc, root);
_processor = p;
}
/**
* Fluent method that may be used to assign originating {@link JsonParser},
* to be accessed using {@link #getProcessor()}.
*<p>
* NOTE: `this` instance is modified and no new instance is constructed.
*
* @since 2.7
*/
public JsonParseException withParser(JsonParser p) {
_processor = p;
return this;
}
/**
* Fluent method that may be used to assign payload to this exception,
* to let recipient access it for diagnostics purposes.
*<p>
* NOTE: `this` instance is modified and no new instance is constructed.
*
* @since 2.8
*/
public JsonParseException withRequestPayload(RequestPayload p) {
_requestPayload = p;
return this;
}
@Override
public JsonParser getProcessor() {
return _processor;
}
/**
* Method that may be called to find payload that was being parsed, if
* one was specified for parser that threw this Exception.
*
* @return request body, if payload was specified; `null` otherwise
*
* @since 2.8
*/
public RequestPayload getRequestPayload() {
return _requestPayload;
}
/**
* The method returns the String representation of the request payload if
* one was specified for parser that threw this Exception.
*
* @return request body as String, if payload was specified; `null` otherwise
*
* @since 2.8
*/
public String getRequestPayloadAsString() {
return (_requestPayload != null) ? _requestPayload.toString() : null;
}
/**
* Overriding the getMessage() to include the request body
*/
@Override
public String getMessage() {
String msg = super.getMessage();
if (_requestPayload != null) {
msg += "\nRequest payload : " + _requestPayload.toString();
}
return msg;
}
}