Releases · AfterShip/tracking-sdk-java
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); // v10
Impact: 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 code
v10 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 available
8. 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();