code: public Response handle(
              AuthleteApi api, UserInfoRequestHandlerSpi spi, String accessToken)
      {
          try
          {
              // Create a handler.
              UserInfoRequestHandler handler = new UserInfoRequestHandler(api, spi);
  
              // Delegate the task to the handler.
              return handler.handle(accessToken);
          }
          catch (WebApplicationException e)
          {
              // An error occurred in the handler.
              onError(e);
  
              // Convert the error to a Response.
              return e.getResponse();
          }
      }
docs: Handle a userinfo request.
  
  <p>
  This method internally creates a {@link UserInfoRequestHandler} instance
  and calls its {@link UserInfoRequestHandler#handle(String)} method.
  Then, this method uses the value returned from the {@code handle()} method
  as a response from this method.
  </p>
  
  <p>
  When {@code UserInfoRequestHandler.handle()} method raises a {@link
  WebApplicationException}, this method calls {@link #onError(WebApplicationException)
  onError()} method with the exception. The default implementation of {@code onError()}
  calls {@code printStackTrace()} of the exception and does nothing else. You
  can override the method as necessary. After calling {@code onError()} method,
  this method calls {@code getResponse()} method of the exception and uses the
  returned value as a response from this method.
  </p>
  
  @param api
  An implementation of {@link AuthleteApi}.
  
  @param spi
  An implementation of {@link UserInfoRequestHandlerSpi}.
  
  @param accessToken
  An access token.
  
  @return
  A response that should be returned to the client application.