10.0.0
Breaking Changes - AfterShip Tracking Java SDK v10.0.0
1. Main Class Renamed
Main Class Change
// v9
import com.aftership.AfterShip;
// v10
import com.aftership.tracking.TrackingSdk;
// Initialization methods remain the same
AfterShip.init(apiKey); // v9
TrackingSdk.init(apiKey); // v10Impact: All initialization and configuration code must update class references
2. Package Structure Complete Refactor
Package Structure Comparison
// v9 - Top-level package structure
import com.aftership.tracking.TrackingResource;
import com.aftership.courier.CourierResource;
import com.aftership.model.*;
// v10 - Nested package structure
import com.aftership.tracking.tracking.TrackingResource;
import com.aftership.tracking.courier.CourierResource;
import com.aftership.tracking.model.*;Impact: All import statements need updating, with deeper package hierarchy
3. Response Structure Complete Refactor
v9 direct property access
// v9 - Direct property access
CreateTrackingResponse response = creator.create();
String id = response.getId();
String trackingNumber = response.getTrackingNumber();v10 must access through getData()
// v10 - Access through getData()
CreateTrackingResponse response = creator.create();
Tracking data = response.getData();
String id = data.getId();
String trackingNumber = data.getTrackingNumber();
// Can also access response headers
Meta responseHeader = response.getResponseHeader();Impact: All API response handling code needs rewriting to access actual data through getData() method
4. Model Name Changes - Prefix Naming Convention
Model classes changed from suffix naming to prefix naming
// v9 - Suffix naming
import com.aftership.model.CourierEstimatedDeliveryDateTracking;
import com.aftership.model.ShipmentWeightTracking;
import com.aftership.model.AftershipEstimatedDeliveryDateTracking;
import com.aftership.model.CarbonEmissionsTracking;
import com.aftership.model.CustomEstimatedDeliveryDateTracking;
import com.aftership.model.FirstEstimatedDeliveryTracking;
import com.aftership.model.FirstMileTracking;
import com.aftership.model.LastMileTracking;
import com.aftership.model.CustomersTracking;
// v10 - Prefix naming
import com.aftership.tracking.model.TrackingCourierEstimatedDeliveryDate;
import com.aftership.tracking.model.TrackingShipmentWeight;
import com.aftership.tracking.model.TrackingAftershipEstimatedDeliveryDate;
import com.aftership.tracking.model.TrackingCarbonEmissions;
import com.aftership.tracking.model.TrackingCustomEstimatedDeliveryDate;
import com.aftership.tracking.model.TrackingFirstEstimatedDelivery;
import com.aftership.tracking.model.TrackingFirstMile;
import com.aftership.tracking.model.TrackingLastMile;
import com.aftership.tracking.model.TrackingCustomers;Impact: All nested Tracking model class names need updating, from XxxTracking to TrackingXxx
5. Enum Member Name Changes
Tag enum member names changed to PascalCase
| v9 | v10 |
|---|---|
Tag.Inforeceived |
Tag.InfoReceived |
Tag.Intransit |
Tag.InTransit |
Tag.Outfordelivery |
Tag.OutForDelivery |
Tag.Attemptfail |
Tag.AttemptFail |
Tag.Availableforpickup |
Tag.AvailableForPickup |
Impact: Code using these enum members needs name updates
6. String to Enum Changes
Several string fields changed to enum types (following API documentation)
Request Models (Input)
// 1. CreateTrackingRequest.DeliveryType
// v9
CreateTrackingRequest request = new CreateTrackingRequest();
request.setDeliveryType("pickup_at_store");
// v10
CreateTrackingRequest request = new CreateTrackingRequest();
request.setDeliveryType(CreateTrackingRequestDeliveryType.PickupAtStore);
// 2. UpdateTrackingByIdRequest.DeliveryType
// v9
updateRequest.setDeliveryType("door_to_door");
// v10
updateRequest.setDeliveryType(UpdateTrackingByIdRequestDeliveryType.DoorToDoor);
// 3. MarkTrackingCompletedByIdRequest.Reason
// v9
markRequest.setReason("DELIVERED");
// v10
markRequest.setReason(MarkTrackingCompletedByIdRequestReason.Delivered);7. Error Code Constants Simplified
v9 ErrorEnum detailed structure
// v9 - Contains detailed error information and methods
ErrorEnum.INVALID_API_KEY.getCode() // Returns numeric error code (e.g. 1)
ErrorEnum.INVALID_API_KEY.getMessage() // Returns error message (e.g. "Invalid API key")
ErrorEnum.INVALID_API_KEY.getStatusCode() // Returns status codev10 ErrorEnum simplified to enum names
// v10 - Simplified to pure enum with only name() method
ErrorEnum.INVALID_API_KEY.name() // Returns enum name string "INVALID_API_KEY"
// getCode(), getMessage(), getStatusCode() methods no longer available8. Reader → Fetcher Architecture Change
v9 uses Reader returning Page objects
// v9
import com.aftership.tracking.GetTrackingsReader;
import com.aftership.base.Page;
GetTrackingsReader reader = TrackingResource.getTrackings();
Page<Tracking> result = reader.read();
List<Tracking> trackings = result.getRecords();
String nextCursor = result.getNextCursor();v10 uses Fetcher returning Response objects
// v10
import com.aftership.tracking.tracking.GetTrackingsFetcher;
import com.aftership.tracking.model.GetTrackingsResponse;
GetTrackingsFetcher fetcher = TrackingResource.getTrackings();
GetTrackingsResponse response = fetcher.fetch();
List<Tracking> trackings = response.getData().getTrackings();
String nextCursor = response.getData().getPagination().getNextCursor();