@Test public void clientSideResolverResolvesServerSideErrors() throws Exception { ErrorResolver server = new PojoErrorResolver(mapper); ExceptionResolver client = new PojoExceptionResolver(mapper); PojoTestException originalException = new PojoTestException("alpha", "beta"); JsonError originalError = server.resolveError( originalException, PojoService.class.getMethod("pojoCall", String.class), Collections.emptyList()); ObjectNode response = wrapErrorAsResponse(originalError); Throwable deserializedThrowable = client.resolveException(response); assertThat(deserializedThrowable) .isInstanceOf(PojoTestException.class) .isEqualToComparingFieldByField(originalException); }
/** * {@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; }
private JsonError resolveError(AMethodWithItsArgs methodArgs, Throwable e) { JsonError error; final ErrorResolver currentResolver = errorResolver == null ? DEFAULT_ERROR_RESOLVER : errorResolver; error = currentResolver.resolveError(e, methodArgs.method, methodArgs.arguments); if (error == null) { error = new JsonError(ERROR_NOT_HANDLED.code, e.getMessage(), e.getClass().getName()); } return error; }