Bug 964854 - Reveal cause of exception. r=rnewman

This fixes an oversight from Bug 1042929, which neglected to push the
underlying exception cause through to the final exception.
This commit is contained in:
Nick Alexander 2015-06-19 10:50:34 -07:00
parent f94ed4ffb8
commit ef8b00f816
2 changed files with 32 additions and 25 deletions

View File

@ -54,7 +54,7 @@ public class ExtendedJSONObject {
return getJSONParser().parse(in); return getJSONParser().parse(in);
} catch (Error e) { } catch (Error e) {
// Don't be stupid, org.json.simple. Bug 1042929. // Don't be stupid, org.json.simple. Bug 1042929.
throw new ParseException(ParseException.ERROR_UNEXPECTED_EXCEPTION); throw new ParseException(ParseException.ERROR_UNEXPECTED_EXCEPTION, e);
} }
} }
@ -72,7 +72,7 @@ public class ExtendedJSONObject {
return getJSONParser().parse(input); return getJSONParser().parse(input);
} catch (Error e) { } catch (Error e) {
// Don't be stupid, org.json.simple. Bug 1042929. // Don't be stupid, org.json.simple. Bug 1042929.
throw new ParseException(ParseException.ERROR_UNEXPECTED_EXCEPTION); throw new ParseException(ParseException.ERROR_UNEXPECTED_EXCEPTION, e);
} }
} }
@ -314,6 +314,7 @@ public class ExtendedJSONObject {
return this.object.toJSONString(); return this.object.toJSONString();
} }
@Override
public String toString() { public String toString() {
return this.object.toString(); return this.object.toString();
} }

View File

@ -2,13 +2,13 @@ package org.json.simple.parser;
/** /**
* ParseException explains why and where the error occurs in source JSON text. * ParseException explains why and where the error occurs in source JSON text.
* *
* @author FangYidong<fangyidong@yahoo.com.cn> * @author FangYidong<fangyidong@yahoo.com.cn>
* *
*/ */
public class ParseException extends Exception { public class ParseException extends Exception {
private static final long serialVersionUID = -7880698968187728548L; private static final long serialVersionUID = -7880698968187728548L;
public static final int ERROR_UNEXPECTED_CHAR = 0; public static final int ERROR_UNEXPECTED_CHAR = 0;
public static final int ERROR_UNEXPECTED_TOKEN = 1; public static final int ERROR_UNEXPECTED_TOKEN = 1;
public static final int ERROR_UNEXPECTED_EXCEPTION = 2; public static final int ERROR_UNEXPECTED_EXCEPTION = 2;
@ -16,45 +16,50 @@ public class ParseException extends Exception {
private int errorType; private int errorType;
private Object unexpectedObject; private Object unexpectedObject;
private int position; private int position;
public ParseException(int errorType){ public ParseException(int errorType, Throwable throwable) {
this(-1, errorType, null); this(-1, errorType, null, throwable);
} }
public ParseException(int errorType, Object unexpectedObject){ public ParseException(int errorType, Object unexpectedObject) {
this(-1, errorType, unexpectedObject); this(-1, errorType, unexpectedObject);
} }
public ParseException(int position, int errorType, Object unexpectedObject){ public ParseException(int position, int errorType, Object unexpectedObject) {
this.position = position; this(-1, errorType, unexpectedObject, null);
this.errorType = errorType;
this.unexpectedObject = unexpectedObject;
} }
public ParseException(int position, int errorType, Object unexpectedObject, Throwable throwable) {
super(throwable);
this.position = position;
this.errorType = errorType;
this.unexpectedObject = unexpectedObject;
}
public int getErrorType() { public int getErrorType() {
return errorType; return errorType;
} }
public void setErrorType(int errorType) { public void setErrorType(int errorType) {
this.errorType = errorType; this.errorType = errorType;
} }
/** /**
* @see org.json.simple.parser.JSONParser#getPosition() * @see org.json.simple.parser.JSONParser#getPosition()
* *
* @return The character position (starting with 0) of the input where the error occurs. * @return The character position (starting with 0) of the input where the error occurs.
*/ */
public int getPosition() { public int getPosition() {
return position; return position;
} }
public void setPosition(int position) { public void setPosition(int position) {
this.position = position; this.position = position;
} }
/** /**
* @see org.json.simple.parser.Yytoken * @see org.json.simple.parser.Yytoken
* *
* @return One of the following base on the value of errorType: * @return One of the following base on the value of errorType:
* ERROR_UNEXPECTED_CHAR java.lang.Character * ERROR_UNEXPECTED_CHAR java.lang.Character
* ERROR_UNEXPECTED_TOKEN org.json.simple.parser.Yytoken * ERROR_UNEXPECTED_TOKEN org.json.simple.parser.Yytoken
@ -63,14 +68,15 @@ public class ParseException extends Exception {
public Object getUnexpectedObject() { public Object getUnexpectedObject() {
return unexpectedObject; return unexpectedObject;
} }
public void setUnexpectedObject(Object unexpectedObject) { public void setUnexpectedObject(Object unexpectedObject) {
this.unexpectedObject = unexpectedObject; this.unexpectedObject = unexpectedObject;
} }
public String toString(){ @Override
public String toString(){
StringBuffer sb = new StringBuffer(); StringBuffer sb = new StringBuffer();
switch(errorType){ switch(errorType){
case ERROR_UNEXPECTED_CHAR: case ERROR_UNEXPECTED_CHAR:
sb.append("Unexpected character (").append(unexpectedObject).append(") at position ").append(position).append("."); sb.append("Unexpected character (").append(unexpectedObject).append(") at position ").append(position).append(".");