Skip to content

Commit b0ce05e

Browse files
authored
Merge pull request #26 from vikadata/feature-add-okhttp
feat: add okhttp callTimeout and writeTimeout
2 parents 418e971 + f5952b5 commit b0ce05e

File tree

4 files changed

+94
-2
lines changed

4 files changed

+94
-2
lines changed

client/src/main/java/cn/vika/client/api/AttachmentApi.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import cn.vika.client.api.http.ApiHttpClient;
3030
import cn.vika.client.api.model.Attachment;
3131
import cn.vika.client.api.model.HttpResult;
32+
import cn.vika.core.exception.HttpClientException;
3233
import cn.vika.core.http.FormDataMap;
3334
import cn.vika.core.http.GenericTypeReference;
3435
import cn.vika.core.http.HttpHeader;
@@ -69,7 +70,11 @@ public Attachment upload(String datasheetId, File file) throws ApiException {
6970
public Attachment upload(String datasheetId, FormDataMap formData) throws ApiException {
7071
HttpHeader httpHeader = new HttpHeader();
7172
httpHeader.setContentType(HttpMediaType.MULTIPART_FORM_DATA);
72-
HttpResult<Attachment> result = getDefaultHttpClient().post(String.format(PATH, datasheetId), httpHeader, formData, new GenericTypeReference<HttpResult<Attachment>>() {});
73-
return result.getData();
73+
try {
74+
HttpResult<Attachment> result = getDefaultHttpClient().post(String.format(PATH, datasheetId), httpHeader, formData, new GenericTypeReference<HttpResult<Attachment>>() {});
75+
return result.getData();
76+
} catch (HttpClientException e) {
77+
throw new HttpClientException("timeout retry", e);
78+
}
7479
}
7580
}

client/src/main/java/cn/vika/client/api/VikaApiClient.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,44 @@ public VikaApiClient withReadTimeout(Integer readTimeout) {
131131
return this;
132132
}
133133

134+
/**
135+
* Sets the per request write timeout.
136+
*
137+
* @param writeTimeout the per request read timeout in milliseconds, can be null to use default
138+
*/
139+
public void setWriteTimeout(Integer writeTimeout) {
140+
this.apiHttpClient.setWriteTimeout(writeTimeout);
141+
}
142+
143+
/**
144+
* Build method that sets the per request write timeout.
145+
* @param writeTimeout the per request write timeout in milliseconds, can be null to use default
146+
* @return VikaApiClient instance
147+
*/
148+
public VikaApiClient withWriteTimeout(Integer writeTimeout) {
149+
apiHttpClient.setWriteTimeout(writeTimeout);
150+
return this;
151+
}
152+
153+
/**
154+
* Sets the per request call timeout.
155+
*
156+
* @param callTimeout the per request call timeout in milliseconds, can be null to use default
157+
*/
158+
public void setCallTimeout(Integer callTimeout) {
159+
this.apiHttpClient.setCallTimeout(callTimeout);
160+
}
161+
162+
/**
163+
* Build method that sets the per request call timeout.
164+
* @param callTimeout the per request call timeout in milliseconds, can be null to use default
165+
* @return VikaApiClient instance
166+
*/
167+
public VikaApiClient withCallTimeout(Integer callTimeout) {
168+
apiHttpClient.setCallTimeout(callTimeout);
169+
return this;
170+
}
171+
134172
public RecordApi getRecordApi() {
135173
if (this.recordApi == null) {
136174
synchronized (this) {

client/src/main/java/cn/vika/client/api/http/ApiHttpClient.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@ public String getApiNamespace() {
5050

5151
public static final int DEFAULT_READ_TIMEOUT = 60000;
5252

53+
public static final int DEFAULT_CALL_TIMEOUT = 60000;
54+
55+
public static final int DEFAULT_WRITE_TIMEOUT = 60000;
56+
5357
private final DefaultHttpClient defaultHttpClient;
5458

5559
private int defaultPerPage = DEFAULT_PER_PAGE;
@@ -58,6 +62,10 @@ public String getApiNamespace() {
5862

5963
private Integer readTimeout = DEFAULT_READ_TIMEOUT;
6064

65+
private Integer writeTimeout = DEFAULT_WRITE_TIMEOUT;
66+
67+
private Integer callTimeout = DEFAULT_CALL_TIMEOUT;
68+
6169
public ApiHttpClient(ApiVersion apiVersion, String baseUrl, ApiCredential apiCredential) {
6270
baseUrl += apiVersion.getApiNamespace();
6371
this.defaultHttpClient = new DefaultHttpClient(baseUrl);
@@ -81,6 +89,10 @@ public void setReadTimeout(Integer readTimeout) {
8189
this.readTimeout = readTimeout;
8290
}
8391

92+
public void setWriteTimeout(Integer writeTimeout){ this.writeTimeout = writeTimeout; }
93+
94+
public void setCallTimeout(Integer callTimeout){ this.callTimeout = callTimeout; }
95+
8496
public void setDefaultPerPage(int defaultPerPage) {
8597
this.defaultPerPage = defaultPerPage;
8698
}
@@ -105,6 +117,23 @@ public DefaultHttpClient getDefaultHttpClient() {
105117
((OkHttpClientHttpRequestFactory) requestFactory).setReadTimeout(readTimeout);
106118
}
107119
}
120+
121+
if (writeTimeout != null) {
122+
// Sets the per request write timeout.
123+
ClientHttpRequestFactory requestFactory = this.defaultHttpClient.getRequestFactory();
124+
if (requestFactory instanceof OkHttpClientHttpRequestFactory) {
125+
((OkHttpClientHttpRequestFactory) requestFactory).setWriteTimeout(writeTimeout);
126+
}
127+
}
128+
129+
if (callTimeout != null) {
130+
// Sets the per request call timeout.
131+
ClientHttpRequestFactory requestFactory = this.defaultHttpClient.getRequestFactory();
132+
if (requestFactory instanceof OkHttpClientHttpRequestFactory) {
133+
((OkHttpClientHttpRequestFactory) requestFactory).setCallTimeout(callTimeout);
134+
}
135+
}
136+
108137
return this.defaultHttpClient;
109138
}
110139
}

core/src/main/java/cn/vika/core/http/OkHttpClientHttpRequestFactory.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,26 @@ public void setConnectTimeout(int connectTimeout) {
7272
.build();
7373
}
7474

75+
/**
76+
* Set call timeout in milliseconds.
77+
* @param callTimeout call timeout
78+
*/
79+
public void setCallTimeout(int callTimeout){
80+
this.client = this.client.newBuilder()
81+
.callTimeout(callTimeout, TimeUnit.MICROSECONDS)
82+
.build();
83+
}
84+
85+
/**
86+
* Set write timeout in milliseconds.
87+
* @param writeTimeout write timeout
88+
*/
89+
public void setWriteTimeout(int writeTimeout){
90+
this.client = this.client.newBuilder()
91+
.writeTimeout(writeTimeout, TimeUnit.MILLISECONDS)
92+
.build();
93+
}
94+
7595
@Override
7696
public ClientHttpRequest createRequest(URI uri, HttpMethod httpMethod) {
7797
return new OkHttpClientRequest(this.client, uri, httpMethod);

0 commit comments

Comments
 (0)