001package com.thetransactioncompany.jsonrpc2.client;
002
003
004/**
005 * Thrown to indicate a JSON-RPC 2.0 client session exception. Allows a general
006 * cause type to be specified to ease diagnostics and exception reporting.
007 *
008 * @author Vladimir Dzhuvinov
009 */
010public class JSONRPC2SessionException extends Exception {
011
012        
013        /**
014         * Unspecified cause type.
015         */
016        public static final int UNSPECIFIED = 0;
017
018        
019        /**
020         * The exception cause is network or I/O related.
021         */
022        public static final int NETWORK_EXCEPTION = 1;
023        
024        
025        /**
026         * Unexpected "Content-Type" header value of the HTTP response.
027         */
028        public static final int UNEXPECTED_CONTENT_TYPE = 2;
029        
030        
031        /**
032         * Invalid JSON-RPC 2.0 response (invalid JSON or invalid JSON-RPC 2.0
033         * response message).
034         */
035        public static final int BAD_RESPONSE = 3;
036        
037        
038        /**
039         * Unexpected JSON-RPC 2.0 response result (the result doesn't match the
040         * JSON type / format expected by the client).
041         */
042        public static final int UNEXPECTED_RESULT = 4;
043        
044        
045        /**
046         * Received a JSON-RPC 2.0 error response.
047         */
048        public static final int JSONRPC2_ERROR = 5;
049        
050        
051        /**
052         * Indicates the type of cause for this exception, see
053         * constants.
054         */
055        private final int causeType;
056        
057        
058        /**
059         * Creates a new JSON-RPC 2.0 session exception with the specified 
060         * message; the cause type is {@link #UNSPECIFIED}.
061         *
062         * @param message The message.
063         */
064        public JSONRPC2SessionException(final String message) {
065        
066                super(message);
067                causeType = UNSPECIFIED;
068        }
069        
070        
071        /**
072         * Creates a new JSON-RPC 2.0 session exception with the specified 
073         * message and cause type.
074         *
075         * @param message   The message.
076         * @param causeType The cause type, see the constants.
077         */
078        public JSONRPC2SessionException(final String message, final int causeType) {
079        
080                super(message);
081                this.causeType = causeType;
082        }
083        
084        
085        /**
086         * Creates a new JSON-RPC 2.0 session exception with the specified 
087         * message, cause type and cause.
088         *
089         * @param message   The message.
090         * @param causeType The cause type, see the constants.
091         * @param cause     The original exception.
092         */
093        public JSONRPC2SessionException(final String message, final int causeType, final Throwable cause) {
094        
095                super(message, cause);
096                this.causeType = causeType;
097        }
098        
099        
100        /**
101         * Returns the exception cause type.
102         *
103         * @return The cause type constant.
104         */
105        public int getCauseType() {
106        
107                return causeType;
108        }
109}