package com.googlecode.jsonrpc4j; import com.fasterxml.jackson.databind.JsonNode; import java.lang.reflect.Method; import java.util.Collections; import java.util.LinkedList; import java.util.List; /** * {@link ErrorResolver} that supports the use * of multiple {@link ErrorResolver} used one * after another until one is able to resolve * the error. */ @SuppressWarnings({"WeakerAccess", "unused"}) public class MultipleErrorResolver implements ErrorResolver { private final List<ErrorResolver> resolvers; /** * Creates with the given {@link ErrorResolver}s, * {@link #addErrorResolver(ErrorResolver)} can be called to * add additional {@link ErrorResolver}s. * * @param resolvers the {@link ErrorResolver}s */ public MultipleErrorResolver(ErrorResolver... resolvers) { this.resolvers = new LinkedList<>(); Collections.addAll(this.resolvers, resolvers); } /** * Adds an {@link ErrorResolver} to the end of the * resolver chain. * * @param errorResolver the {@link ErrorResolver} to add */ public void addErrorResolver(ErrorResolver errorResolver) { this.resolvers.add(errorResolver); } /** * {@inheritDoc} */ @Override public JsonError resolveError(Throwable t, Method method, List<JsonNode> arguments) { JsonError resolvedError; for (ErrorResolver resolver : resolvers) { resolvedError = resolver.resolveError(t, method, arguments); if (resolvedError != null) { return resolvedError; } } return null; } }