package com.googlecode.jsonrpc4j;
import com.fasterxml.jackson.databind.node.ObjectNode;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
/**
* {@link ExceptionResolver} that supports the use
* of multiple {@link ExceptionResolver} used one
* after another until one is able to resolve
* the Exception.
*/
@SuppressWarnings({"unused", "WeakerAccess"})
public class MultipleExceptionResolver implements ExceptionResolver {
private final List<ExceptionResolver> resolvers;
/**
* Creates with the given {@link ExceptionResolver}s,
* {@link #addExceptionResolver(ExceptionResolver)} can be called to
* add additional {@link ExceptionResolver}s.
*
* @param resolvers the {@link ExceptionResolver}s
*/
public MultipleExceptionResolver(ExceptionResolver... resolvers) {
this.resolvers = new LinkedList<>();
Collections.addAll(this.resolvers, resolvers);
}
/**
* Adds an {@link ExceptionResolver} to the end of the
* resolver chain.
*
* @param ExceptionResolver the {@link ExceptionResolver} to add
*/
public void addExceptionResolver(ExceptionResolver ExceptionResolver) {
this.resolvers.add(ExceptionResolver);
}
/**
* {@inheritDoc}
*/
public Throwable resolveException(ObjectNode response) {
for (ExceptionResolver resolver : resolvers) {
Throwable resolvedException = resolver.resolveException(response);
if (resolvedException != null) {
return resolvedException;
}
}
return null;
}
}