Skip to content

Commit 8a5a58f

Browse files
authored
Merge pull request #16 from 1415003719/2025-07
fix connection reset error
2 parents 6a19e86 + b38a1da commit 8a5a58f

3 files changed

Lines changed: 97 additions & 81 deletions

File tree

README.md

Lines changed: 78 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ If you need support using AfterShip products, please contact support@aftership.c
2020
- [Error Handling](#error-handling)
2121
- [Error List](#error-list)
2222
- [Endpoints](#endpoints)
23-
- [/trackings](#trackings)
2423
- [/couriers](#couriers)
2524
- [/courier-connections](#courier-connections)
2625
- [/estimated-delivery-date](#estimated-delivery-date)
26+
- [/trackings](#trackings)
2727
- [Help](#help)
2828
- [License](#license)
2929

@@ -47,7 +47,7 @@ Before you begin to integrate:
4747
<dependency>
4848
<groupId>com.aftership</groupId>
4949
<artifactId>tracking-sdk</artifactId>
50-
<version>10.0.0</version>
50+
<version>10.0.1</version>
5151
</dependency>
5252
```
5353

@@ -144,14 +144,6 @@ The SDK will return an error object when there is any error during the request,
144144

145145
The AfterShip SDK has the following resource which are exactly the same as the API endpoints:
146146

147-
- TrackingResource
148-
- Get trackings
149-
- Create a tracking
150-
- Get a tracking by ID
151-
- Update a tracking by ID
152-
- Delete a tracking by ID
153-
- Retrack an expired tracking by ID
154-
- Mark tracking as completed by ID
155147
- CourierResource
156148
- Get couriers
157149
- Detect courier
@@ -164,169 +156,177 @@ The AfterShip SDK has the following resource which are exactly the same as the A
164156
- EstimatedDeliveryDateResource
165157
- Prediction for the Estimated Delivery Date
166158
- Batch prediction for the Estimated Delivery Date
159+
- TrackingResource
160+
- Get trackings
161+
- Create a tracking
162+
- Get a tracking by ID
163+
- Update a tracking by ID
164+
- Delete a tracking by ID
165+
- Retrack an expired tracking by ID
166+
- Mark tracking as completed by ID
167167

168-
### /trackings
169-
**GET** /trackings
168+
### /couriers
169+
**GET** /couriers
170170

171171
```java
172-
GetTrackingsResponse response = TrackingResource.getTrackings()
172+
GetCouriersResponse response = CourierResource.getCouriers()
173173
.fetch();
174174
System.out.println(response.getData());
175175
```
176176

177-
**POST** /trackings
177+
**POST** /couriers/detect
178178

179179
```java
180-
CreateTrackingRequest request = new CreateTrackingRequest();
180+
DetectCourierRequest request = new DetectCourierRequest();
181181
request.setTrackingNumber("valid_value");
182-
CreateTrackingResponse response = TrackingResource.createTracking()
183-
.setCreateTrackingRequest(request)
182+
DetectCourierResponse response = CourierResource.detectCourier()
183+
.setDetectCourierRequest(request)
184184
.create();
185185
System.out.println(response.getData());
186186
```
187187

188-
**GET** /trackings/{id}
188+
### /courier-connections
189+
**GET** /courier-connections
189190

190191
```java
191-
GetTrackingByIdResponse response = TrackingResource.getTrackingById()
192-
.setId("valid_value")
192+
GetCourierConnectionsResponse response = CourierConnectionResource.getCourierConnections()
193193
.fetch();
194194
System.out.println(response.getData());
195195
```
196196

197-
**PUT** /trackings/{id}
197+
**POST** /courier-connections
198198

199199
```java
200-
UpdateTrackingByIdRequest request = new UpdateTrackingByIdRequest();
201-
UpdateTrackingByIdResponse response = TrackingResource.updateTrackingById()
202-
.setId("valid_value")
203-
.setUpdateTrackingByIdRequest(request)
204-
.update();
200+
PostCourierConnectionsRequest request = new PostCourierConnectionsRequest();
201+
request.setCourierSlug("valid_value");
202+
request.setCredentials();
203+
PostCourierConnectionsResponse response = CourierConnectionResource.postCourierConnections()
204+
.setPostCourierConnectionsRequest(request)
205+
.create();
205206
System.out.println(response.getData());
206207
```
207208

208-
**DELETE** /trackings/{id}
209+
**GET** /courier-connections/{id}
209210

210211
```java
211-
DeleteTrackingByIdResponse response = TrackingResource.deleteTrackingById()
212+
GetCourierConnectionsByIdResponse response = CourierConnectionResource.getCourierConnectionsById()
212213
.setId("valid_value")
213-
.delete();
214+
.fetch();
214215
System.out.println(response.getData());
215216
```
216217

217-
**POST** /trackings/{id}/retrack
218+
**PATCH** /courier-connections/{id}
218219

219220
```java
220-
RetrackTrackingByIdResponse response = TrackingResource.retrackTrackingById()
221+
PutCourierConnectionsByIdRequest request = new PutCourierConnectionsByIdRequest();
222+
request.setCredentials();
223+
PutCourierConnectionsByIdResponse response = CourierConnectionResource.putCourierConnectionsById()
221224
.setId("valid_value")
222-
.create();
225+
.setPutCourierConnectionsByIdRequest(request)
226+
.update();
223227
System.out.println(response.getData());
224228
```
225229

226-
**POST** /trackings/{id}/mark-as-completed
230+
**DELETE** /courier-connections/{id}
227231

228232
```java
229-
MarkTrackingCompletedByIdRequest request = new MarkTrackingCompletedByIdRequest();
230-
MarkTrackingCompletedByIdResponse response = TrackingResource.markTrackingCompletedById()
233+
DeleteCourierConnectionsByIdResponse response = CourierConnectionResource.deleteCourierConnectionsById()
231234
.setId("valid_value")
232-
.setMarkTrackingCompletedByIdRequest(request)
233-
.create();
235+
.delete();
234236
System.out.println(response.getData());
235237
```
236238

237-
### /couriers
238-
**GET** /couriers
239+
### /estimated-delivery-date
240+
**POST** /estimated-delivery-date/predict
239241

240242
```java
241-
GetCouriersResponse response = CourierResource.getCouriers()
242-
.fetch();
243+
EstimatedDeliveryDateRequest request = new EstimatedDeliveryDateRequest();
244+
request.setSlug("valid_value");
245+
EstimatedDeliveryDateRequestOriginAddress originAddress = new EstimatedDeliveryDateRequestOriginAddress();
246+
request.setOriginAddress(originAddress);
247+
EstimatedDeliveryDateRequestDestinationAddress destinationAddress = new EstimatedDeliveryDateRequestDestinationAddress();
248+
request.setDestinationAddress(destinationAddress);
249+
PredictResponse response = EstimatedDeliveryDateResource.predict()
250+
.setPredictRequest(request)
251+
.create();
243252
System.out.println(response.getData());
244253
```
245254

246-
**POST** /couriers/detect
255+
**POST** /estimated-delivery-date/predict-batch
247256

248257
```java
249-
DetectCourierRequest request = new DetectCourierRequest();
250-
request.setTrackingNumber("valid_value");
251-
DetectCourierResponse response = CourierResource.detectCourier()
252-
.setDetectCourierRequest(request)
258+
PredictBatchRequest request = new PredictBatchRequest();
259+
PredictBatchResponse response = EstimatedDeliveryDateResource.predictBatch()
260+
.setPredictBatchRequest(request)
253261
.create();
254262
System.out.println(response.getData());
255263
```
256264

257-
### /courier-connections
258-
**GET** /courier-connections
265+
### /trackings
266+
**GET** /trackings
259267

260268
```java
261-
GetCourierConnectionsResponse response = CourierConnectionResource.getCourierConnections()
269+
GetTrackingsResponse response = TrackingResource.getTrackings()
262270
.fetch();
263271
System.out.println(response.getData());
264272
```
265273

266-
**POST** /courier-connections
274+
**POST** /trackings
267275

268276
```java
269-
PostCourierConnectionsRequest request = new PostCourierConnectionsRequest();
270-
request.setCourierSlug("valid_value");
271-
request.setCredentials();
272-
PostCourierConnectionsResponse response = CourierConnectionResource.postCourierConnections()
273-
.setPostCourierConnectionsRequest(request)
277+
CreateTrackingRequest request = new CreateTrackingRequest();
278+
request.setTrackingNumber("valid_value");
279+
CreateTrackingResponse response = TrackingResource.createTracking()
280+
.setCreateTrackingRequest(request)
274281
.create();
275282
System.out.println(response.getData());
276283
```
277284

278-
**GET** /courier-connections/{id}
285+
**GET** /trackings/{id}
279286

280287
```java
281-
GetCourierConnectionsByIdResponse response = CourierConnectionResource.getCourierConnectionsById()
288+
GetTrackingByIdResponse response = TrackingResource.getTrackingById()
282289
.setId("valid_value")
283290
.fetch();
284291
System.out.println(response.getData());
285292
```
286293

287-
**PATCH** /courier-connections/{id}
294+
**PUT** /trackings/{id}
288295

289296
```java
290-
PutCourierConnectionsByIdRequest request = new PutCourierConnectionsByIdRequest();
291-
request.setCredentials();
292-
PutCourierConnectionsByIdResponse response = CourierConnectionResource.putCourierConnectionsById()
297+
UpdateTrackingByIdRequest request = new UpdateTrackingByIdRequest();
298+
UpdateTrackingByIdResponse response = TrackingResource.updateTrackingById()
293299
.setId("valid_value")
294-
.setPutCourierConnectionsByIdRequest(request)
300+
.setUpdateTrackingByIdRequest(request)
295301
.update();
296302
System.out.println(response.getData());
297303
```
298304

299-
**DELETE** /courier-connections/{id}
305+
**DELETE** /trackings/{id}
300306

301307
```java
302-
DeleteCourierConnectionsByIdResponse response = CourierConnectionResource.deleteCourierConnectionsById()
308+
DeleteTrackingByIdResponse response = TrackingResource.deleteTrackingById()
303309
.setId("valid_value")
304310
.delete();
305311
System.out.println(response.getData());
306312
```
307313

308-
### /estimated-delivery-date
309-
**POST** /estimated-delivery-date/predict
314+
**POST** /trackings/{id}/retrack
310315

311316
```java
312-
EstimatedDeliveryDateRequest request = new EstimatedDeliveryDateRequest();
313-
request.setSlug("valid_value");
314-
EstimatedDeliveryDateRequestOriginAddress originAddress = new EstimatedDeliveryDateRequestOriginAddress();
315-
request.setOriginAddress(originAddress);
316-
EstimatedDeliveryDateRequestDestinationAddress destinationAddress = new EstimatedDeliveryDateRequestDestinationAddress();
317-
request.setDestinationAddress(destinationAddress);
318-
PredictResponse response = EstimatedDeliveryDateResource.predict()
319-
.setPredictRequest(request)
317+
RetrackTrackingByIdResponse response = TrackingResource.retrackTrackingById()
318+
.setId("valid_value")
320319
.create();
321320
System.out.println(response.getData());
322321
```
323322

324-
**POST** /estimated-delivery-date/predict-batch
323+
**POST** /trackings/{id}/mark-as-completed
325324

326325
```java
327-
PredictBatchRequest request = new PredictBatchRequest();
328-
PredictBatchResponse response = EstimatedDeliveryDateResource.predictBatch()
329-
.setPredictBatchRequest(request)
326+
MarkTrackingCompletedByIdRequest request = new MarkTrackingCompletedByIdRequest();
327+
MarkTrackingCompletedByIdResponse response = TrackingResource.markTrackingCompletedById()
328+
.setId("valid_value")
329+
.setMarkTrackingCompletedByIdRequest(request)
330330
.create();
331331
System.out.println(response.getData());
332332
```

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>com.aftership</groupId>
88
<artifactId>tracking-sdk</artifactId>
9-
<version>10.0.0</version>
9+
<version>10.0.1</version>
1010

1111
<name>AfterShip Tracking SDK</name>
1212
<description>The official AfterShip Tracking Java API library</description>

src/main/java/com/aftership/tracking/http/HttpClient.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,18 @@
1919
import org.apache.http.message.BasicHeader;
2020
import org.apache.http.util.EntityUtils;
2121

22+
import java.net.SocketException;
2223
import java.net.SocketTimeoutException;
2324
import java.net.URI;
2425
import java.nio.charset.StandardCharsets;
2526
import java.util.Arrays;
2627
import java.util.Collection;
2728
import java.util.Map;
29+
import java.util.concurrent.TimeUnit;
2830

2931
public class HttpClient {
3032

31-
private static final String DEFAULT_USER_AGENT = "tracking-sdk-java/10.0.0 (https://www.aftership.com) apache-httpclient/4.5.14";
33+
private static final String DEFAULT_USER_AGENT = "tracking-sdk-java/10.0.1 (https://www.aftership.com) apache-httpclient/4.5.14";
3234
protected final org.apache.http.client.HttpClient client;
3335

3436
public HttpClient(final RequestConfig requestConfig, String userAgent) {
@@ -46,6 +48,9 @@ public HttpClient(final RequestConfig requestConfig, String userAgent) {
4648
client = clientBuilder
4749
.setDefaultHeaders(headers)
4850
.setDefaultRequestConfig(requestConfig)
51+
.setMaxConnPerRoute(20)
52+
.setMaxConnTotal(100)
53+
.setConnectionTimeToLive(300, TimeUnit.SECONDS).evictExpiredConnections()
4954
.build();
5055
}
5156

@@ -66,6 +71,17 @@ public Response request(final Request request, int retries) throws Exception {
6671
"Request timed out."
6772
);
6873
}
74+
} catch (SocketException e) {
75+
if (e.getMessage().equals("Connection reset")) {
76+
if (i > retries) {
77+
throw new ApiException(
78+
ErrorEnum.TIMED_OUT.name(),
79+
"Request timed out."
80+
);
81+
}
82+
} else {
83+
throw e;
84+
}
6985
} catch (Exception e) {
7086
throw e;
7187
}
@@ -115,7 +131,7 @@ private boolean shouldRetry(Response response) {
115131

116132
private int delay(int retryAttempt) {
117133
int delayBase = 3;
118-
int delay = delayBase * (2 ^ (retryAttempt - 1));
134+
int delay = delayBase * (1 << (retryAttempt - 1));
119135
double jitter = delay * (Math.random() - 0.5);
120136
return (int) (Math.max(1, delay + jitter) * 1000);
121137
}

0 commit comments

Comments
 (0)