code: private <T> T send(String method, Class<T> responseType, @Nullable Object entity) {
          // Narrow the response type
          if (responseType == EmoResponse.class) {
              // noinspection unchecked
              return (T) toEmoResponse(entity == null ?
                      builder().method(method, ClientResponse.class) :
                      builder().method(method, ClientResponse.class, entity));
          }
  
          try {
              ClientResponse response = entity == null ?
                      builder().method(method, ClientResponse.class) :
                      builder().method(method, ClientResponse.class, entity);
  
              // This is as per Jersey's WebResource builder() code.
              if (response.getStatus() >= 300) {
                  throw new UniformInterfaceException(response);
              }
  
              if (!response.getType().equals(MediaType.APPLICATION_JSON_TYPE)) {
                  return response.getEntity(responseType);
              }
              return EntityHelper.getEntity(response.getEntity(InputStream.class), responseType);
          } catch (UniformInterfaceException e) {
              throw asEmoClientException(e);
          }
      }
docs: Sends the optionally provided request entity using the provided method.  The response entity is then
  deserialized to the provided type.