code: public final <F> F search(
        RequestT request,
        GenomicsRequestInitializer<? super RequestSubT> initializer,
        Callback<ItemT, ? extends F> callback,
        RetryPolicy retryPolicy) throws IOException {
      try {
        return callback.consumeResponses(search(request, initializer, retryPolicy));
      } catch (SearchException e) {
        throw e.getCause();
      }
    }
docs: An exception safe way of consuming search results. Client code supplies a callback which is
  used to consume the result stream and accumulate a value, which becomes the value returned from
  this method.
  
  @param request The search request.
  @param initializer The {@link GenomicsRequestInitializer} with which to initialize requests.
  @param callback The {@link Callback} used to consume search results.
  @param retryPolicy A retry policy specifying behavior when a request fails
  (usually due to SocketTimeoutExceptions)
  @return whatever value {@link Callback#consumeResponses} returned.
  @throws IOException if an IOException occurred while consuming search results.