forked from loafle/openapi-generator-original
Implementing retry logic to restTemplate (#17375)
* Implementing retry logic to restTemplate * Fixing the issue * Adding import * Fix * Fix * minor update, add tests * fix * Adding the maxRetryAttempt, threadWaitTime as additionalProperty * Updating the apiClient * Removing reduntant variable * Generating samples * Fixing format --------- Co-authored-by: Rubini <rubini@Rubinis-MacBook-Air.local> Co-authored-by: William Cheng <wing328hk@gmail.com>
This commit is contained in:
@@ -22,6 +22,7 @@ import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.LinkedMultiValueMap;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.web.client.HttpServerErrorException;
|
||||
import org.springframework.web.client.RestClientException;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
import org.springframework.web.util.UriComponentsBuilder;
|
||||
@@ -79,6 +80,10 @@ public class ApiClient extends JavaTimeFormatter {
|
||||
private HttpHeaders defaultHeaders = new HttpHeaders();
|
||||
private MultiValueMap<String, String> defaultCookies = new LinkedMultiValueMap<String, String>();
|
||||
|
||||
private int maxAttemptsForRetry = 1;
|
||||
|
||||
private long waitTimeMillis = 10;
|
||||
|
||||
private String basePath = "http://localhost:3000";
|
||||
|
||||
private RestTemplate restTemplate;
|
||||
@@ -136,6 +141,46 @@ public class ApiClient extends JavaTimeFormatter {
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the max attempts for retry
|
||||
*
|
||||
* @return int the max attempts
|
||||
*/
|
||||
public int getMaxAttemptsForRetry() {
|
||||
return maxAttemptsForRetry;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the max attempts for retry
|
||||
*
|
||||
* @param getMaxAttemptsForRetry the max attempts for retry
|
||||
* @return ApiClient this client
|
||||
*/
|
||||
public ApiClient setMaxAttemptsForRetry(int maxAttemptsForRetry) {
|
||||
this.maxAttemptsForRetry = maxAttemptsForRetry;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the wait time in milliseconds
|
||||
*
|
||||
* @return long wait time in milliseconds
|
||||
*/
|
||||
public long getWaitTimeMillis() {
|
||||
return waitTimeMillis;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the wait time in milliseconds
|
||||
*
|
||||
* @param waitTimeMillis the wait time in milliseconds
|
||||
* @return ApiClient this client
|
||||
*/
|
||||
public ApiClient setWaitTimeMillis(long waitTimeMillis) {
|
||||
this.waitTimeMillis = waitTimeMillis;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get authentications (key: authentication name, value: authentication).
|
||||
*
|
||||
@@ -637,7 +682,23 @@ public class ApiClient extends JavaTimeFormatter {
|
||||
|
||||
RequestEntity<Object> requestEntity = requestBuilder.body(selectBody(body, formParams, contentType));
|
||||
|
||||
ResponseEntity<T> responseEntity = restTemplate.exchange(requestEntity, returnType);
|
||||
ResponseEntity<T> responseEntity = null;
|
||||
int attempts = 0;
|
||||
while (attempts < maxAttemptsForRetry) {
|
||||
try {
|
||||
responseEntity = restTemplate.exchange(requestEntity, returnType);
|
||||
break;
|
||||
} catch (HttpServerErrorException ex) {
|
||||
attempts++;
|
||||
if (attempts < maxAttemptsForRetry) {
|
||||
try {
|
||||
Thread.sleep(waitTimeMillis);
|
||||
} catch (InterruptedException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (responseEntity.getStatusCode().is2xxSuccessful()) {
|
||||
return responseEntity;
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Echo Server API
|
||||
* Echo Server API
|
||||
*
|
||||
* The version of the OpenAPI document: 0.1.0
|
||||
* Contact: team@openapitools.oprg
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
|
||||
package org.openapitools.client;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.openapitools.client.api.*;
|
||||
import org.openapitools.client.model.*;
|
||||
import org.junit.Test;
|
||||
import org.junit.Ignore;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
|
||||
|
||||
/**
|
||||
* API tests
|
||||
*/
|
||||
public class CustomTest {
|
||||
|
||||
private final QueryApi api = new QueryApi();
|
||||
private final BodyApi bodyApi = new BodyApi();
|
||||
|
||||
/**
|
||||
* Test body parameter(s)
|
||||
* <p>
|
||||
* Test body parameter(s)
|
||||
*
|
||||
*/
|
||||
@Test
|
||||
public void testEchoBodyPet() {
|
||||
Pet pet = new Pet().id(12345L).name("Hello World").
|
||||
photoUrls(Arrays.asList(new String[]{"http://a.com", "http://b.com"})).category(new Category().id(987L).name("new category"));
|
||||
|
||||
Pet p = bodyApi.testEchoBodyPet(pet);
|
||||
Assert.assertNotNull(p);
|
||||
Assert.assertEquals("Hello World", p.getName());
|
||||
Assert.assertEquals(Long.valueOf(12345L), p.getId());
|
||||
|
||||
// response is empty body
|
||||
Pet p2 = bodyApi.testEchoBodyPet(null);
|
||||
Assert.assertNull(p2);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user