/** * Makes an asynchronous call. * * @param method the method on the API to call * @param request the request to forward to the API * @param responseBuilder the response builder used to fill the response * @param deadline the deadline of the call. if it is null, the default api deadline will be used */ private <T extends GeneratedMessage.Builder<T>> Future<T> makeAsyncCall( String method, GeneratedMessage request, final T responseBuilder, Double deadline) { Future<byte[]> response; if (deadline == null) { response = ApiProxy.makeAsyncCall(PACKAGE, method, request.toByteArray()); } else { ApiProxy.ApiConfig apiConfig = new ApiProxy.ApiConfig(); apiConfig.setDeadlineInSeconds(deadline); response = ApiProxy.makeAsyncCall(PACKAGE, method, request.toByteArray(), apiConfig); } return new FutureWrapper<byte[], T>(response) { @Override protected T wrap(byte[] responseBytes) { if (responseBytes != null) { try { responseBuilder.mergeFrom(responseBytes); } catch (InvalidProtocolBufferException e) { throw new SearchServiceException(e.toString()); } } return responseBuilder; } @Override protected Throwable convertException(Throwable cause) { return cause; } }; }
private String toHex(GeneratedMessage m) { return java.util.Base64.getEncoder().encodeToString(m.toByteArray()); }