package com.googlecode.jsonrpc4j; import com.fasterxml.jackson.databind.JsonNode; import java.lang.reflect.Method; import java.util.List; /** * Resolves {@link Throwable}s thrown by JSON-RPC services. */ public interface ErrorResolver { /** * Resolves the error using the {@link Throwable} that * was thrown by the given {@link Method} when passed * the given {@code arguments}. If the error can not * be resolved then null is returned. * * @param t the {@link Throwable} * @param method the {@link Method} that threw the {@link Throwable} * @param arguments the {@code arguments} that were passed to the {@link Method} * @return the {@link JsonError} or null if it couldn't be resolved */ JsonError resolveError(Throwable t, Method method, List<JsonNode> arguments); /** * A JSON error. */ @SuppressWarnings({"WeakerAccess", "unused"}) class JsonError { public static final JsonError OK = new JsonError(0, "ok", null); public static final JsonError PARSE_ERROR = new JsonError(-32700, "JSON parse error", null); public static final JsonError INVALID_REQUEST = new JsonError(-32600, "invalid request", null); public static final JsonError METHOD_NOT_FOUND = new JsonError(-32601, "method not found", null); public static final JsonError METHOD_PARAMS_INVALID = new JsonError(-32602, "method parameters invalid", null); public static final JsonError INTERNAL_ERROR = new JsonError(-32603, "internal error", null); public static final JsonError ERROR_NOT_HANDLED = new JsonError(-32001, "error not handled", null); public static final JsonError BULK_ERROR = new JsonError(-32002, "bulk error", null); public static final int CUSTOM_SERVER_ERROR_UPPER = -32000; public static final int CUSTOM_SERVER_ERROR_LOWER = -32099; public final int code; public final String message; public final Object data; /** * Creates the error. * * @param code the code * @param message the message * @param data the data */ public JsonError(int code, String message, Object data) { this.code = code; this.message = message; this.data = data; } /** * @return the code */ int getCode() { return code; } /** * @return the message */ String getMessage() { return message; } /** * @return the data */ Object getData() { return data; } @Override public String toString() { return "JsonError{" + "code=" + code + ", message='" + message + '\'' + ", data=" + data + '}'; } } }