Skip to content

Commit 691dd80

Browse files
Merge pull request #24 from ShipEngine/fixExceptions
Fix exception throwing
2 parents f265b21 + b3ea152 commit 691dd80

2 files changed

Lines changed: 50 additions & 13 deletions

File tree

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.shipengine;
2+
3+
import java.util.ArrayList;
4+
import java.util.Map;
5+
6+
public class ErrorResponse
7+
{
8+
private String requestId;
9+
private ArrayList<Map<String, String>> errors;
10+
11+
public String getRequestId() {
12+
return this.requestId;
13+
}
14+
15+
public ArrayList<Map<String, String>> getErrors() {
16+
return this.errors;
17+
}
18+
19+
public void setRequestId(String requestId) {
20+
this.requestId = requestId;
21+
}
22+
23+
public void setErrors(ArrayList<Map<String, String>> errors)
24+
{
25+
this.errors = errors;
26+
}
27+
28+
public ErrorResponse() {
29+
}
30+
}

src/main/java/com/shipengine/InternalClient.java

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22

33
import com.google.gson.Gson;
44
import com.google.gson.GsonBuilder;
5+
import com.google.gson.reflect.TypeToken;
56
import com.shipengine.exception.ClientTimeoutException;
67
import com.shipengine.exception.RateLimitExceededException;
78
import com.shipengine.exception.ShipEngineException;
9+
import com.shipengine.ErrorResponse;
810

911
import java.io.IOException;
1012
import java.io.InputStream;
@@ -416,7 +418,12 @@ private String listToJson(List list) {
416418
private static Map apiResponseToMap(String apiResponse) {
417419
return gson.fromJson(apiResponse, HashMap.class);
418420
}
419-
421+
422+
private static ErrorResponse apiResponseToErrorResponse(String apiResponse) {
423+
TypeToken<ErrorResponse> mapType = new TypeToken<ErrorResponse>(){};
424+
return gson.fromJson(apiResponse, mapType.getType());
425+
}
426+
420427
private static List<Map<String, String>> apiResponseToList(String apiResponse) {
421428
List<Map<String, String>> newList = new ArrayList<>();
422429
List apiResponseAsList = gson.fromJson(apiResponse, List.class);
@@ -436,44 +443,44 @@ private void checkResponseForErrors(
436443
switch (statusCode) {
437444
case 400:
438445
case 500:
439-
Map<String, ArrayList<Map<String, String>>> responseBody400And500 = apiResponseToMap(httpResponseBody);
440-
Map<String, String> error400And500 = responseBody400And500.get("errors").get(0);
446+
ErrorResponse responseBody400And500 = apiResponseToErrorResponse(httpResponseBody);
447+
Map<String, String> error400And500 = responseBody400And500.getErrors().get(0);
441448
throw new ShipEngineException(
442449
error400And500.get("message"),
443-
responseBody400And500.get("request_id").toString(),
450+
responseBody400And500.getRequestId(),
444451
error400And500.get("error_source"),
445452
error400And500.get("error_type"),
446453
error400And500.get("error_code")
447454
);
448455
case 404:
449-
Map<String, ArrayList<Map<String, String>>> responseBody404 = httpResponseBody.equals("") ?
450-
Map.of() :
451-
apiResponseToMap(httpResponseBody);
452-
Map<String, String> error404 = responseBody404.containsKey("errors") ?
453-
responseBody404.get("errors").get(0) :
456+
ErrorResponse responseBody404 = httpResponseBody.equals("") ?
457+
new ErrorResponse() :
458+
apiResponseToErrorResponse(httpResponseBody);
459+
Map<String, String> error404 = responseBody404.getErrors() != null ?
460+
responseBody404.getErrors().get(0) :
454461
Map.of();
455462
throw new ShipEngineException(
456463
mapSizeIsNotZero(error404) ? error404.get("message") : "404 Error Occurred..",
457-
responseBody404.size() != 0 ? responseBody404.get("request_id").toString() : "",
464+
responseBody404.getRequestId() != null ? responseBody404.getRequestId() : "",
458465
"shipengine",
459466
mapSizeIsNotZero(error404) ? error404.get("error_type") : "error",
460467
mapSizeIsNotZero(error404) ? error404.get("error_code") : "not_found"
461468
);
462469
case 429:
463470
Optional<String> retryAfterHeader = responseHeaders.firstValue("retry-after");
464-
Map<String, String> responseBody429 = apiResponseToMap(httpResponseBody);
471+
ErrorResponse responseBody429 = apiResponseToErrorResponse(httpResponseBody);
465472
if (retryAfterHeader.isPresent()) {
466473
int retry = Integer.parseInt(retryAfterHeader.get()) * 1000;
467474

468475
if (retry > config.getTimeout()) {
469476
throw new ClientTimeoutException(
470-
responseBody429.get("request_id"),
477+
responseBody429.getRequestId(),
471478
"shipengine",
472479
config.getTimeout()
473480
);
474481
} else {
475482
throw new RateLimitExceededException(
476-
responseBody429.get("request_id"),
483+
responseBody429.getRequestId(),
477484
"shipengine",
478485
retry
479486
);

0 commit comments

Comments
 (0)