Skip to content

Commit 2640f44

Browse files
authored
Merge pull request cloudbees-oss#135 from matthewtckr/issue43
Add Rate Limit Exception
2 parents a9448e9 + 3c891d0 commit 2640f44

File tree

2 files changed

+45
-0
lines changed

2 files changed

+45
-0
lines changed

src/main/java/org/zendesk/client/v2/Zendesk.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1684,6 +1684,8 @@ public Void onCompleted(Response response) throws Exception {
16841684
logResponse(response);
16851685
if (isStatus2xx(response)) {
16861686
return null;
1687+
} else if (isRateLimitResponse(response)) {
1688+
throw new ZendeskResponseRateLimitException(response);
16871689
}
16881690
throw new ZendeskResponseException(response);
16891691
}
@@ -1698,6 +1700,8 @@ public T onCompleted(Response response) throws Exception {
16981700
logResponse(response);
16991701
if (isStatus2xx(response)) {
17001702
return (T) mapper.reader(clazz).readValue(response.getResponseBodyAsStream());
1703+
} else if (isRateLimitResponse(response)) {
1704+
throw new ZendeskResponseRateLimitException(response);
17011705
}
17021706
if (response.getStatusCode() == 404) {
17031707
return null;
@@ -1727,6 +1731,8 @@ public T onCompleted(Response response) throws Exception {
17271731
return mapper.convertValue(mapper.readTree(response.getResponseBodyAsStream()).get(name), type);
17281732
}
17291733
return mapper.convertValue(mapper.readTree(response.getResponseBodyAsStream()).get(name), clazz);
1734+
} else if (isRateLimitResponse(response)) {
1735+
throw new ZendeskResponseRateLimitException(response);
17301736
}
17311737
if (response.getStatusCode() == 404) {
17321738
return null;
@@ -1799,6 +1805,8 @@ public List<T> onCompleted(Response response) throws Exception {
17991805
values.add(mapper.convertValue(node, clazz));
18001806
}
18011807
return values;
1808+
} else if (isRateLimitResponse(response)) {
1809+
throw new ZendeskResponseRateLimitException(response);
18021810
}
18031811
throw new ZendeskResponseException(response);
18041812
}
@@ -1876,6 +1884,8 @@ public List<SearchResultEntity> onCompleted(Response response) throws Exception
18761884
}
18771885
}
18781886
return values;
1887+
} else if (isRateLimitResponse(response)) {
1888+
throw new ZendeskResponseRateLimitException(response);
18791889
}
18801890
throw new ZendeskResponseException(response);
18811891
}
@@ -1898,6 +1908,8 @@ public List<Target> onCompleted(Response response) throws Exception {
18981908
}
18991909
}
19001910
return values;
1911+
} else if (isRateLimitResponse(response)) {
1912+
throw new ZendeskResponseRateLimitException(response);
19011913
}
19021914
throw new ZendeskResponseException(response);
19031915
}
@@ -1917,6 +1929,8 @@ public List<ArticleAttachments> onCompleted(Response response) throws Exception
19171929
values.add(mapper.convertValue(node, ArticleAttachments.class));
19181930
}
19191931
return values;
1932+
} else if (isRateLimitResponse(response)) {
1933+
throw new ZendeskResponseRateLimitException(response);
19201934
}
19211935
throw new ZendeskResponseException(response);
19221936
}
@@ -1959,6 +1973,10 @@ private boolean isStatus2xx(Response response) {
19591973
return response.getStatusCode() / 100 == 2;
19601974
}
19611975

1976+
private boolean isRateLimitResponse(Response response) {
1977+
return response.getStatusCode() == 429;
1978+
}
1979+
19621980
//////////////////////////////////////////////////////////////////////
19631981
// Static helper methods
19641982
//////////////////////////////////////////////////////////////////////
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package org.zendesk.client.v2;
2+
3+
import java.io.IOException;
4+
5+
import com.ning.http.client.Response;
6+
7+
public class ZendeskResponseRateLimitException extends ZendeskResponseException {
8+
9+
private static final long serialVersionUID = 1L;
10+
private static final String RETRY_AFTER_HEADER = "Retry-After";
11+
private static final long DEFAULT_RETRY_AFTER = 60L;
12+
13+
private Long retryAfter = DEFAULT_RETRY_AFTER;
14+
15+
public ZendeskResponseRateLimitException(Response resp) throws IOException {
16+
super(resp);
17+
try {
18+
this.retryAfter = Long.valueOf(resp.getHeader(RETRY_AFTER_HEADER));
19+
} catch (NumberFormatException e) {
20+
// Ignore, use the default value already set
21+
}
22+
}
23+
24+
public Long getRetryAfter() {
25+
return retryAfter;
26+
}
27+
}

0 commit comments

Comments
 (0)