Repository navigation
feat: support JVM SDK 20 and Jackson 3 - #1250
Conversation
There was a problem hiding this comment.
🔵 Needs a closer look
The broad breaking migration of runtime dependencies, public JSON types, and the Java baseline warrants complete CI and human release validation.
0 open findings
What changed in this PR
Migrates the library to JVM SDK 20, Jackson 3, and Java 17 while preserving reference-resolution and synchronization behavior.
Changes:
- Replaces Jackson 2 types and APIs with Jackson 3 equivalents.
- Updates JVM SDK dependencies, Java compilation, and CI/CD to Java 17.
- Updates tests, fixtures, documentation, and release notes for the breaking 11.0.0 release.
| File | Description |
|---|---|
src/test/java/com/commercetools/sync/shoppinglists/utils/ShoppingListTransformUtilsTest.java |
Migrates Jackson exception type. |
src/test/java/com/commercetools/sync/services/impl/UnresolvedReferencesServiceImplTest.java |
Migrates Jackson serialization APIs. |
src/test/java/com/commercetools/sync/services/impl/StateServiceImplTest.java |
Migrates Jackson serialization APIs. |
src/test/java/com/commercetools/sync/services/impl/ProductServiceTest.java |
Migrates Jackson serialization APIs. |
src/test/java/com/commercetools/sync/services/impl/CustomObjectServiceImplTest.java |
Migrates Jackson node APIs. |
src/test/java/com/commercetools/sync/services/impl/BaseServiceImplTest.java |
Migrates Jackson exception type. |
src/test/java/com/commercetools/sync/products/utils/productvariantupdateactionutils/prices/PriceFixtures.java |
Migrates fixture string nodes. |
src/test/java/com/commercetools/sync/products/utils/productvariantupdateactionutils/prices/PriceDraftFixtures.java |
Migrates draft fixture nodes. |
src/test/java/com/commercetools/sync/products/utils/productvariantupdateactionutils/attributes/BuildProductVariantAttributeUpdateActionsTest.java |
Tests normalized numeric equality. |
src/test/java/com/commercetools/sync/products/utils/ProductVariantPriceUpdateActionUtilsTest.java |
Migrates Jackson string nodes. |
src/test/java/com/commercetools/sync/products/utils/ProductVariantAssetUpdateActionUtilsTest.java |
Migrates Jackson imports. |
src/test/java/com/commercetools/sync/products/utils/ProductTransformUtilsTest.java |
Migrates parsing and node APIs. |
src/test/java/com/commercetools/sync/products/helpers/VariantReferenceResolverTest.java |
Migrates reference-node assertions. |
src/test/java/com/commercetools/sync/products/helpers/variantreferenceresolver/WithStateReferencesTest.java |
Migrates array-node import. |
src/test/java/com/commercetools/sync/products/helpers/variantreferenceresolver/withsetofnestedattributes/WithStateReferencesTest.java |
Migrates array-node import. |
src/test/java/com/commercetools/sync/products/helpers/variantreferenceresolver/withsetofnestedattributes/WithProductTypeReferencesTest.java |
Migrates array-node import. |
src/test/java/com/commercetools/sync/products/helpers/variantreferenceresolver/withsetofnestedattributes/WithProductReferencesTest.java |
Migrates array-node import. |
src/test/java/com/commercetools/sync/products/helpers/variantreferenceresolver/withsetofnestedattributes/WithCustomObjectReferencesTest.java |
Migrates array-node import. |
src/test/java/com/commercetools/sync/products/helpers/variantreferenceresolver/withsetofnestedattributes/WithCustomerReferencesTest.java |
Migrates array-node import. |
src/test/java/com/commercetools/sync/products/helpers/variantreferenceresolver/withsetofnestedattributes/WithCategoryReferencesTest.java |
Migrates array-node import. |
src/test/java/com/commercetools/sync/products/helpers/variantreferenceresolver/WithProductTypeReferencesTest.java |
Migrates Jackson node imports. |
src/test/java/com/commercetools/sync/products/helpers/variantreferenceresolver/WithProductReferencesTest.java |
Migrates Jackson node imports. |
src/test/java/com/commercetools/sync/products/helpers/variantreferenceresolver/withnestedattributes/WithStateReferencesTest.java |
Migrates array-node import. |
src/test/java/com/commercetools/sync/products/helpers/variantreferenceresolver/withnestedattributes/WithProductTypeReferencesTest.java |
Migrates array-node import. |
src/test/java/com/commercetools/sync/products/helpers/variantreferenceresolver/withnestedattributes/WithProductReferencesTest.java |
Migrates array-node import. |
src/test/java/com/commercetools/sync/products/helpers/variantreferenceresolver/withnestedattributes/WithCustomObjectReferencesTest.java |
Migrates array-node import. |
src/test/java/com/commercetools/sync/products/helpers/variantreferenceresolver/withnestedattributes/WithCustomerReferencesTest.java |
Migrates array-node import. |
src/test/java/com/commercetools/sync/products/helpers/variantreferenceresolver/withnestedattributes/WithCategoryReferencesTest.java |
Migrates array-node import. |
src/test/java/com/commercetools/sync/products/helpers/variantreferenceresolver/WithCustomObjectReferencesTest.java |
Migrates Jackson node imports. |
src/test/java/com/commercetools/sync/products/helpers/variantreferenceresolver/WithCustomerReferencesTest.java |
Migrates array-node import. |
src/test/java/com/commercetools/sync/products/helpers/variantreferenceresolver/WithCategoryReferencesTest.java |
Migrates Jackson node imports. |
src/test/java/com/commercetools/sync/products/helpers/ProductBatchValidatorTest.java |
Migrates Jackson node imports. |
src/test/java/com/commercetools/sync/inventories/utils/InventorySyncUtilsTest.java |
Migrates custom-field nodes. |
src/test/java/com/commercetools/sync/inventories/utils/InventoryEntryTransformUtilsTest.java |
Migrates Jackson exception type. |
src/test/java/com/commercetools/sync/customobjects/utils/CustomObjectSyncUtilsTest.java |
Migrates string-node checks. |
src/test/java/com/commercetools/sync/customobjects/helpers/CustomObjectBatchValidatorTest.java |
Migrates node factory import. |
src/test/java/com/commercetools/sync/customobjects/CustomObjectSyncTest.java |
Migrates node factory import. |
src/test/java/com/commercetools/sync/customers/utils/CustomerSyncUtilsTest.java |
Migrates custom-field string nodes. |
src/test/java/com/commercetools/sync/commons/utils/TestUtils.java |
Migrates shared JSON test utilities. |
src/test/java/com/commercetools/sync/commons/utils/ResourceIdentifierUtilsTest.java |
Migrates Jackson node imports. |
src/test/java/com/commercetools/sync/commons/utils/ProductPriceCustomUpdateActionUtilsTest.java |
Migrates custom value nodes. |
src/test/java/com/commercetools/sync/commons/utils/InventoryEntryCustomUpdateActionUtilsTest.java |
Migrates custom value nodes. |
src/test/java/com/commercetools/sync/commons/utils/CustomUpdateActionUtilsTest.java |
Migrates mapper and string nodes. |
src/test/java/com/commercetools/sync/commons/utils/CustomerCustomUpdateActionUtilsTest.java |
Migrates custom value nodes. |
src/test/java/com/commercetools/sync/commons/utils/CartDiscountCustomUpdateActionUtilsTest.java |
Migrates custom value nodes. |
src/test/java/com/commercetools/sync/commons/ExceptionUtils.java |
Migrates error serialization APIs. |
src/test/java/com/commercetools/sync/commons/CleanupUnresolvedReferenceCustomObjectsTest.java |
Migrates cleanup JSON types. |
src/test/java/com/commercetools/sync/categories/utils/CategoryAssetUpdateActionUtilsTest.java |
Migrates node factory import. |
src/test/java/com/commercetools/sync/categories/CategorySyncTest.java |
Migrates error serialization APIs. |
src/test/java/com/commercetools/sync/cartdiscounts/utils/CartDiscountTransformUtilsTest.java |
Migrates Jackson exception type. |
src/test/java/com/commercetools/sync/cartdiscounts/utils/CartDiscountSyncUtilsTest.java |
Migrates custom-field nodes. |
src/test/java/com/commercetools/sync/cartdiscounts/utils/CartDiscountReferenceResolutionUtilsTest.java |
Adds required recurring-order scope. |
src/main/java/com/commercetools/sync/services/impl/UnresolvedReferencesServiceImpl.java |
Uses Jackson 3 mapper. |
src/main/java/com/commercetools/sync/services/impl/BaseTransformServiceImpl.java |
Migrates JSON traversal APIs. |
src/main/java/com/commercetools/sync/services/impl/BaseService.java |
Migrates GraphQL JSON traversal. |
src/main/java/com/commercetools/sync/products/utils/ProductVariantAttributeUpdateActionUtils.java |
Normalizes attribute JSON comparisons. |
src/main/java/com/commercetools/sync/products/utils/ProductTransformUtils.java |
Migrates transformed reference nodes. |
src/main/java/com/commercetools/sync/products/utils/AttributeUtils.java |
Adds normalized Jackson 3 conversion. |
src/main/java/com/commercetools/sync/products/helpers/VariantReferenceResolver.java |
Migrates reference key extraction. |
src/main/java/com/commercetools/sync/products/helpers/ProductBatchValidator.java |
Migrates referenced-key extraction. |
src/main/java/com/commercetools/sync/customobjects/utils/CustomObjectSyncUtils.java |
Uses Jackson 3 node type. |
src/main/java/com/commercetools/sync/commons/utils/ResourceIdentifierUtils.java |
Migrates public node API. |
src/main/java/com/commercetools/sync/commons/utils/CustomValueConverter.java |
Migrates custom-value conversion. |
src/main/java/com/commercetools/sync/commons/utils/CustomUpdateActionUtils.java |
Uses Jackson 3 node type. |
src/main/java/com/commercetools/sync/commons/models/WaitingToBeResolvedTransitions.java |
Updates Jackson documentation. |
src/main/java/com/commercetools/sync/commons/models/WaitingToBeResolvedProducts.java |
Updates Jackson documentation. |
src/main/java/com/commercetools/sync/commons/models/WaitingToBeResolvedCategories.java |
Updates Jackson documentation. |
src/main/java/com/commercetools/sync/commons/CleanupUnresolvedReferenceCustomObjects.java |
Migrates cleanup JSON traversal. |
src/integration-test/java/com/commercetools/sync/integration/services/impl/CustomObjectServiceImplIT.java |
Migrates object-property assertions. |
src/integration-test/java/com/commercetools/sync/integration/externalsource/products/ProductSyncWithReferencedProductTypesIT.java |
Migrates reference assertions. |
src/integration-test/java/com/commercetools/sync/integration/externalsource/products/ProductSyncWithReferencedProductsIT.java |
Migrates reference JSON types. |
src/integration-test/java/com/commercetools/sync/integration/externalsource/products/ProductSyncWithReferencedProductsInAnyOrderIT.java |
Migrates Jackson node imports. |
src/integration-test/java/com/commercetools/sync/integration/externalsource/products/ProductSyncWithPricesIT.java |
Migrates Jackson node imports. |
src/integration-test/java/com/commercetools/sync/integration/externalsource/products/ProductSyncWithNestedReferencedProductTypesIT.java |
Migrates nested-reference nodes. |
src/integration-test/java/com/commercetools/sync/integration/externalsource/products/ProductSyncWithNestedReferencedProductsIT.java |
Migrates nested-reference nodes. |
src/integration-test/java/com/commercetools/sync/integration/externalsource/products/ProductSyncWithNestedReferencedCustomObjectsIT.java |
Migrates nested-reference nodes. |
src/integration-test/java/com/commercetools/sync/integration/externalsource/products/ProductSyncWithNestedReferencedCategoriesIT.java |
Migrates nested-reference nodes. |
src/integration-test/java/com/commercetools/sync/integration/externalsource/inventories/utils/InventoryUpdateActionUtilsIT.java |
Migrates custom-field nodes. |
src/integration-test/java/com/commercetools/sync/integration/externalsource/inventories/InventorySyncIT.java |
Migrates JSON node type. |
src/integration-test/java/com/commercetools/sync/integration/externalsource/customobjects/CustomObjectSyncIT.java |
Migrates Jackson serialization APIs. |
src/integration-test/java/com/commercetools/sync/integration/externalsource/categories/CategorySyncIT.java |
Migrates node factory import. |
src/integration-test/java/com/commercetools/sync/integration/externalsource/cartdiscounts/CartDiscountSyncIT.java |
Migrates node factory import. |
src/integration-test/java/com/commercetools/sync/integration/ctpprojectsource/products/ProductSyncIT.java |
Migrates attribute string nodes. |
src/integration-test/java/com/commercetools/sync/integration/commons/utils/ProductTypeITUtils.java |
Migrates product-type fixture nodes. |
src/integration-test/java/com/commercetools/sync/integration/commons/utils/ITUtils.java |
Migrates integration serialization utilities. |
src/integration-test/java/com/commercetools/sync/integration/commons/utils/InventoryITUtils.java |
Migrates inventory fixture nodes. |
src/benchmark/java/com/commercetools/sync/benchmark/BenchmarkUtils.java |
Migrates benchmark JSON APIs. |
README.md |
Documents Java and SDK compatibility. |
gradle-scripts/java-compile.gradle |
Raises compilation target to Java 17. |
docs/usage/QUICK_START.md |
Updates JDK prerequisite. |
docs/RELEASE_NOTES.md |
Documents the 11.0.0 release. |
build.gradle |
Upgrades JVM SDK to 20.2.0. |
.github/workflows/ci.yml |
Standardizes CI on Java 17. |
.github/workflows/cd.yml |
Standardizes release jobs on Java 17. |
🧠 Review effort: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
|
Jackson 2’s JsonProcessingException is checked, but Jackson 3’s JacksonException is unchecked. If someone used |
thanks! added it to the 11.0.0 release notes as a breaking change 👍 -> 8c2cbaf |
Summary
Makes the library compatible with commercetools JVM SDK 20 and Jackson 3, and raises the minimum Java version to 17. This is a breaking change, to be released as 11.0.0.
Description
Version 10.5.0 is built against JVM SDK 19, which uses Jackson 2. JVM SDK 20 moved to Jackson 3 (package
tools.jackson) and requires Java 17, so applications on SDK 20 fail with aNoSuchMethodErroras soon as the library loadsUnresolvedReferencesServiceImpl.Changes:
19.3.0→20.2.0, and Java 11 → 17, both for compilation and in all CI/CD jobs. The code checks and benchmark jobs had no Java setup step and relied on the runner's default JDK; they now set up JDK 17 explicitly.com.fasterxml.jackson.core/databindtotools.jackson(jackson-annotationskeeps its package). APIs that Jackson 3 removed or renamed are replaced:JsonProcessingException→JacksonException,TextNode→StringNode,elements()→values(),fieldNames()→propertyNames(),asText()→asString().recurringOrderScope, which SDK 20 made required onCartDiscountBuilder.Breaking changes:
CustomValueConverter,AttributeUtils,ResourceIdentifierUtils.isReferenceOfType(JsonNode, String)and the protected helpers ofBaseTransformServiceImpl.Not included: syncing fields that are new in SDK 20, such as
recurringOrderScopeon cart discounts.Relevant Issues
https://commercetools.atlassian.net/browse/SUPPORT-42725
https://commercetools.atlassian.net/browse/SUPPORT-43182
https://commercetools.atlassian.net/browse/BMU-2922