@Override
  public Response toResponse(Exception exception) {
    logError(exception);

    Error error;
    int httpCode =
        isRuntimeClass(exception.getClass())
            ? defaultRuntimeExceptionHttpCode
            : defaultCheckedExceptionHttpCode;
    try {
      Integer code = findCode(exception);
      if (code != null) {
        httpCode = code;
      }

      error = buildError(exception);
      if (hideExceptionClass) {
        error.setException(null);
      }
      if (hideMessage) {
        error.setMessage(null);
      }
    } catch (Exception e) {
      httpCode = 500;
      error = new Error(e);
      logError(e);
    }

    return Response.status(httpCode).entity(error).type(findMediaType()).build();
  }