Skip to content

feat: support JVM SDK 20 and Jackson 3 - #1250

Merged
nicolasnieto92 merged 5 commits into
masterfrom
BMU-2922_sdk_20_jackson_3
Oct 20, 2026
Merged

nicolasnieto92 merged 5 commits into
masterfrom
BMU-2922_sdk_20_jackson_3

Conversation

@nicolasnieto92

Copy link
Copy Markdown
Contributor

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 a NoSuchMethodError as soon as the library loads UnresolvedReferencesServiceImpl.
Changes:

  • JVM SDK 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.
  • Jackson imports moved from com.fasterxml.jackson.core/databind to tools.jackson (jackson-annotations keeps its package). APIs that Jackson 3 removed or renamed are replaced: JsonProcessingException → JacksonException, TextNode → StringNode, elements() → values(), fieldNames() → propertyNames(), asText() → asString().
  • Two cart discount test fixtures now set recurringOrderScope, which SDK 20 made required on CartDiscountBuilder.
  • README and Quick Start now require JDK 17 and explain which library version works with which SDK version. New 11.0.0 entry in the release notes.
    Breaking changes:
  • Java 17 or above is required.
  • Public methods that take or return Jackson types now use the Jackson 3 types: CustomValueConverter, AttributeUtils, ResourceIdentifierUtils.isReferenceOfType(JsonNode, String) and the protected helpers of BaseTransformServiceImpl.
  • Applications on JVM SDK 19.x or earlier should stay on 10.x.
    Not included: syncing fields that are new in SDK 20, such as recurringOrderScope on 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

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 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.

@ShipilA

ShipilA commented Oct 12, 2026

Copy link
Copy Markdown

Jackson 2’s JsonProcessingException is checked, but Jackson 3’s JacksonException is unchecked. If someone used try/catch (JsonProcessingException) before, it will break now, so I suggest adding it to release notes

@nicolasnieto92

Copy link
Copy Markdown
Contributor Author

Jackson 2’s JsonProcessingException is checked, but Jackson 3’s JacksonException is unchecked. If someone used try/catch (JsonProcessingException) before, it will break now, so I suggest adding it to release notes

thanks! added it to the 11.0.0 release notes as a breaking change 👍 -> 8c2cbaf

@nicolasnieto92
nicolasnieto92 merged commit f02867c into master Oct 20, 2026
11 of 14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants