diff --git a/README.md b/README.md index e0d77fd..fe0a116 100644 --- a/README.md +++ b/README.md @@ -20,10 +20,10 @@ If you need support using AfterShip products, please contact support@aftership.c - [Error Handling](#error-handling) - [Error List](#error-list) - [Endpoints](#endpoints) - - [/trackings](#trackings) - [/couriers](#couriers) - [/courier-connections](#courier-connections) - [/estimated-delivery-date](#estimated-delivery-date) + - [/trackings](#trackings) - [Help](#help) - [License](#license) @@ -47,7 +47,7 @@ Before you begin to integrate: com.aftership tracking-sdk - 10.0.0 + 10.0.1 ``` @@ -144,14 +144,6 @@ The SDK will return an error object when there is any error during the request, The AfterShip SDK has the following resource which are exactly the same as the API endpoints: -- TrackingResource - - Get trackings - - Create a tracking - - Get a tracking by ID - - Update a tracking by ID - - Delete a tracking by ID - - Retrack an expired tracking by ID - - Mark tracking as completed by ID - CourierResource - Get couriers - Detect courier @@ -164,169 +156,177 @@ The AfterShip SDK has the following resource which are exactly the same as the A - EstimatedDeliveryDateResource - Prediction for the Estimated Delivery Date - Batch prediction for the Estimated Delivery Date +- TrackingResource + - Get trackings + - Create a tracking + - Get a tracking by ID + - Update a tracking by ID + - Delete a tracking by ID + - Retrack an expired tracking by ID + - Mark tracking as completed by ID -### /trackings -**GET** /trackings +### /couriers +**GET** /couriers ```java - GetTrackingsResponse response = TrackingResource.getTrackings() + GetCouriersResponse response = CourierResource.getCouriers() .fetch(); System.out.println(response.getData()); ``` -**POST** /trackings +**POST** /couriers/detect ```java - CreateTrackingRequest request = new CreateTrackingRequest(); + DetectCourierRequest request = new DetectCourierRequest(); request.setTrackingNumber("valid_value"); - CreateTrackingResponse response = TrackingResource.createTracking() - .setCreateTrackingRequest(request) + DetectCourierResponse response = CourierResource.detectCourier() + .setDetectCourierRequest(request) .create(); System.out.println(response.getData()); ``` -**GET** /trackings/{id} +### /courier-connections +**GET** /courier-connections ```java - GetTrackingByIdResponse response = TrackingResource.getTrackingById() - .setId("valid_value") + GetCourierConnectionsResponse response = CourierConnectionResource.getCourierConnections() .fetch(); System.out.println(response.getData()); ``` -**PUT** /trackings/{id} +**POST** /courier-connections ```java - UpdateTrackingByIdRequest request = new UpdateTrackingByIdRequest(); - UpdateTrackingByIdResponse response = TrackingResource.updateTrackingById() - .setId("valid_value") - .setUpdateTrackingByIdRequest(request) - .update(); + PostCourierConnectionsRequest request = new PostCourierConnectionsRequest(); + request.setCourierSlug("valid_value"); + request.setCredentials(); + PostCourierConnectionsResponse response = CourierConnectionResource.postCourierConnections() + .setPostCourierConnectionsRequest(request) + .create(); System.out.println(response.getData()); ``` -**DELETE** /trackings/{id} +**GET** /courier-connections/{id} ```java - DeleteTrackingByIdResponse response = TrackingResource.deleteTrackingById() + GetCourierConnectionsByIdResponse response = CourierConnectionResource.getCourierConnectionsById() .setId("valid_value") - .delete(); + .fetch(); System.out.println(response.getData()); ``` -**POST** /trackings/{id}/retrack +**PATCH** /courier-connections/{id} ```java - RetrackTrackingByIdResponse response = TrackingResource.retrackTrackingById() + PutCourierConnectionsByIdRequest request = new PutCourierConnectionsByIdRequest(); + request.setCredentials(); + PutCourierConnectionsByIdResponse response = CourierConnectionResource.putCourierConnectionsById() .setId("valid_value") - .create(); + .setPutCourierConnectionsByIdRequest(request) + .update(); System.out.println(response.getData()); ``` -**POST** /trackings/{id}/mark-as-completed +**DELETE** /courier-connections/{id} ```java - MarkTrackingCompletedByIdRequest request = new MarkTrackingCompletedByIdRequest(); - MarkTrackingCompletedByIdResponse response = TrackingResource.markTrackingCompletedById() + DeleteCourierConnectionsByIdResponse response = CourierConnectionResource.deleteCourierConnectionsById() .setId("valid_value") - .setMarkTrackingCompletedByIdRequest(request) - .create(); + .delete(); System.out.println(response.getData()); ``` -### /couriers -**GET** /couriers +### /estimated-delivery-date +**POST** /estimated-delivery-date/predict ```java - GetCouriersResponse response = CourierResource.getCouriers() - .fetch(); + EstimatedDeliveryDateRequest request = new EstimatedDeliveryDateRequest(); + request.setSlug("valid_value"); + EstimatedDeliveryDateRequestOriginAddress originAddress = new EstimatedDeliveryDateRequestOriginAddress(); + request.setOriginAddress(originAddress); + EstimatedDeliveryDateRequestDestinationAddress destinationAddress = new EstimatedDeliveryDateRequestDestinationAddress(); + request.setDestinationAddress(destinationAddress); + PredictResponse response = EstimatedDeliveryDateResource.predict() + .setPredictRequest(request) + .create(); System.out.println(response.getData()); ``` -**POST** /couriers/detect +**POST** /estimated-delivery-date/predict-batch ```java - DetectCourierRequest request = new DetectCourierRequest(); - request.setTrackingNumber("valid_value"); - DetectCourierResponse response = CourierResource.detectCourier() - .setDetectCourierRequest(request) + PredictBatchRequest request = new PredictBatchRequest(); + PredictBatchResponse response = EstimatedDeliveryDateResource.predictBatch() + .setPredictBatchRequest(request) .create(); System.out.println(response.getData()); ``` -### /courier-connections -**GET** /courier-connections +### /trackings +**GET** /trackings ```java - GetCourierConnectionsResponse response = CourierConnectionResource.getCourierConnections() + GetTrackingsResponse response = TrackingResource.getTrackings() .fetch(); System.out.println(response.getData()); ``` -**POST** /courier-connections +**POST** /trackings ```java - PostCourierConnectionsRequest request = new PostCourierConnectionsRequest(); - request.setCourierSlug("valid_value"); - request.setCredentials(); - PostCourierConnectionsResponse response = CourierConnectionResource.postCourierConnections() - .setPostCourierConnectionsRequest(request) + CreateTrackingRequest request = new CreateTrackingRequest(); + request.setTrackingNumber("valid_value"); + CreateTrackingResponse response = TrackingResource.createTracking() + .setCreateTrackingRequest(request) .create(); System.out.println(response.getData()); ``` -**GET** /courier-connections/{id} +**GET** /trackings/{id} ```java - GetCourierConnectionsByIdResponse response = CourierConnectionResource.getCourierConnectionsById() + GetTrackingByIdResponse response = TrackingResource.getTrackingById() .setId("valid_value") .fetch(); System.out.println(response.getData()); ``` -**PATCH** /courier-connections/{id} +**PUT** /trackings/{id} ```java - PutCourierConnectionsByIdRequest request = new PutCourierConnectionsByIdRequest(); - request.setCredentials(); - PutCourierConnectionsByIdResponse response = CourierConnectionResource.putCourierConnectionsById() + UpdateTrackingByIdRequest request = new UpdateTrackingByIdRequest(); + UpdateTrackingByIdResponse response = TrackingResource.updateTrackingById() .setId("valid_value") - .setPutCourierConnectionsByIdRequest(request) + .setUpdateTrackingByIdRequest(request) .update(); System.out.println(response.getData()); ``` -**DELETE** /courier-connections/{id} +**DELETE** /trackings/{id} ```java - DeleteCourierConnectionsByIdResponse response = CourierConnectionResource.deleteCourierConnectionsById() + DeleteTrackingByIdResponse response = TrackingResource.deleteTrackingById() .setId("valid_value") .delete(); System.out.println(response.getData()); ``` -### /estimated-delivery-date -**POST** /estimated-delivery-date/predict +**POST** /trackings/{id}/retrack ```java - EstimatedDeliveryDateRequest request = new EstimatedDeliveryDateRequest(); - request.setSlug("valid_value"); - EstimatedDeliveryDateRequestOriginAddress originAddress = new EstimatedDeliveryDateRequestOriginAddress(); - request.setOriginAddress(originAddress); - EstimatedDeliveryDateRequestDestinationAddress destinationAddress = new EstimatedDeliveryDateRequestDestinationAddress(); - request.setDestinationAddress(destinationAddress); - PredictResponse response = EstimatedDeliveryDateResource.predict() - .setPredictRequest(request) + RetrackTrackingByIdResponse response = TrackingResource.retrackTrackingById() + .setId("valid_value") .create(); System.out.println(response.getData()); ``` -**POST** /estimated-delivery-date/predict-batch +**POST** /trackings/{id}/mark-as-completed ```java - PredictBatchRequest request = new PredictBatchRequest(); - PredictBatchResponse response = EstimatedDeliveryDateResource.predictBatch() - .setPredictBatchRequest(request) + MarkTrackingCompletedByIdRequest request = new MarkTrackingCompletedByIdRequest(); + MarkTrackingCompletedByIdResponse response = TrackingResource.markTrackingCompletedById() + .setId("valid_value") + .setMarkTrackingCompletedByIdRequest(request) .create(); System.out.println(response.getData()); ``` diff --git a/pom.xml b/pom.xml index faa23e2..b3ec00e 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.aftership tracking-sdk - 10.0.0 + 10.0.1 AfterShip Tracking SDK The official AfterShip Tracking Java API library diff --git a/src/main/java/com/aftership/tracking/http/HttpClient.java b/src/main/java/com/aftership/tracking/http/HttpClient.java index 6edaeb6..44d401b 100644 --- a/src/main/java/com/aftership/tracking/http/HttpClient.java +++ b/src/main/java/com/aftership/tracking/http/HttpClient.java @@ -19,16 +19,18 @@ import org.apache.http.message.BasicHeader; import org.apache.http.util.EntityUtils; +import java.net.SocketException; import java.net.SocketTimeoutException; import java.net.URI; import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.Collection; import java.util.Map; +import java.util.concurrent.TimeUnit; public class HttpClient { - private static final String DEFAULT_USER_AGENT = "tracking-sdk-java/10.0.0 (https://www.aftership.com) apache-httpclient/4.5.14"; + private static final String DEFAULT_USER_AGENT = "tracking-sdk-java/10.0.1 (https://www.aftership.com) apache-httpclient/4.5.14"; protected final org.apache.http.client.HttpClient client; public HttpClient(final RequestConfig requestConfig, String userAgent) { @@ -46,6 +48,9 @@ public HttpClient(final RequestConfig requestConfig, String userAgent) { client = clientBuilder .setDefaultHeaders(headers) .setDefaultRequestConfig(requestConfig) + .setMaxConnPerRoute(20) + .setMaxConnTotal(100) + .setConnectionTimeToLive(300, TimeUnit.SECONDS).evictExpiredConnections() .build(); } @@ -66,6 +71,17 @@ public Response request(final Request request, int retries) throws Exception { "Request timed out." ); } + } catch (SocketException e) { + if (e.getMessage().equals("Connection reset")) { + if (i > retries) { + throw new ApiException( + ErrorEnum.TIMED_OUT.name(), + "Request timed out." + ); + } + } else { + throw e; + } } catch (Exception e) { throw e; } @@ -115,7 +131,7 @@ private boolean shouldRetry(Response response) { private int delay(int retryAttempt) { int delayBase = 3; - int delay = delayBase * (2 ^ (retryAttempt - 1)); + int delay = delayBase * (1 << (retryAttempt - 1)); double jitter = delay * (Math.random() - 0.5); return (int) (Math.max(1, delay + jitter) * 1000); }