001 package com.thetransactioncompany.jsonrpc2;
002
003
004 /**
005 * Thrown to indicate an exception during the parsing of a JSON-RPC 2.0
006 * message string.
007 *
008 * <p>The JSON-RPC 2.0 specification and user group forum can be found
009 * <a href="http://groups.google.com/group/json-rpc">here</a>.
010 *
011 * @author Vladimir Dzhuvinov
012 */
013 public class JSONRPC2ParseException extends Exception {
014
015
016 /**
017 * Serial version UID.
018 */
019 private static final long serialVersionUID = 3376608778436136410l;
020
021
022 /**
023 * Indicates a parse exception caused by a JSON message not conforming
024 * to the JSON-RPC 2.0 protocol.
025 */
026 public static int PROTOCOL = 0;
027
028
029 /**
030 * Indicates a parse exception caused by invalid JSON.
031 */
032 public static int JSON = 1;
033
034
035 /**
036 * The parse exception cause type. Default is {@link #PROTOCOL}.
037 */
038 private int causeType = PROTOCOL;
039
040
041
042 /**
043 * The string that could't be parsed.
044 */
045 private String unparsableString = null;
046
047
048 /**
049 * Creates a new parse exception with the specified message. The cause
050 * type is set to {@link #PROTOCOL}.
051 *
052 * @param message The exception message.
053 */
054 public JSONRPC2ParseException(final String message) {
055
056 super(message);
057 }
058
059
060 /**
061 * Creates a new parse exception with the specified message and the
062 * original string that didn't parse. The cause type is set to
063 * {@link #PROTOCOL}.
064 *
065 * @param message The exception message.
066 * @param unparsableString The unparsable string.
067 */
068 public JSONRPC2ParseException(final String message, final String unparsableString) {
069
070 super(message);
071 this.unparsableString = unparsableString;
072 }
073
074
075 /**
076 * Creates a new parse exception with the specified message, cause type
077 * and the original string that didn't parse.
078 *
079 * @param message The exception message.
080 * @param causeType The exception cause type, either
081 * {@link #PROTOCOL} or {@link #JSON}.
082 * @param unparsableString The unparsable string.
083 */
084 public JSONRPC2ParseException(final String message, final int causeType, final String unparsableString) {
085
086 super(message);
087
088 if (causeType != PROTOCOL && causeType != JSON)
089 throw new IllegalArgumentException("Cause type must be either PROTOCOL or JSON");
090
091 this.causeType = causeType;
092 this.unparsableString = unparsableString;
093 }
094
095
096 /**
097 * Gets the parse exception cause type.
098 *
099 * @return The cause type, either {@link #PROTOCOL} or {@link #JSON}.
100 */
101 public int getCauseType() {
102
103 return causeType;
104 }
105
106
107 /**
108 * Gets original string that caused the parse exception (if specified).
109 *
110 * @return The string that didn't parse, {@code null} if none.
111 */
112 public String getUnparsableString() {
113
114 return unparsableString;
115 }
116 }