HttpExecutor.java 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. package com.uas.eis.sdk.okhttp;
  2. import com.uas.eis.sdk.core.HttpRequest;
  3. import com.uas.eis.sdk.core.HttpResponse;
  4. import com.uas.eis.sdk.core.HttpResponseImpl;
  5. import okhttp3.Response;
  6. import org.slf4j.Logger;
  7. import org.slf4j.LoggerFactory;
  8. public class HttpExecutor {
  9. private static final Logger LOG = LoggerFactory.getLogger(HttpExecutor.class);
  10. private static final HttpExecutor INSTANCE = new HttpExecutor();
  11. private HttpExecutor() {
  12. }
  13. public static HttpExecutor create() {
  14. return INSTANCE;
  15. }
  16. public <R> HttpResponse execute(HttpRequest<R> request) throws Exception {
  17. LOG.debug("Executing Request: {} -> {}", request.getEndpoint(), request.getPath());
  18. HttpCommand<R> command = HttpCommand.create(request);
  19. return invokeRequest(command);
  20. }
  21. private <R> HttpResponse invokeRequest(HttpCommand<R> command) throws Exception {
  22. Response response = command.execute();
  23. if (command.getRetries() == 0 && response.code() != 200) {
  24. return invokeRequest(command.incrementRetriesAndReturn());
  25. }
  26. return HttpResponseImpl.wrap(response);
  27. }
  28. }