Skip to content

Upgrade jackson to 3.1.0#5425

Open
holgerfriedrich wants to merge 12 commits intoopenhab:mainfrom
holgerfriedrich:pr-jackson3
Open

Upgrade jackson to 3.1.0#5425
holgerfriedrich wants to merge 12 commits intoopenhab:mainfrom
holgerfriedrich:pr-jackson3

Conversation

@holgerfriedrich
Copy link
Copy Markdown
Member

@holgerfriedrich holgerfriedrich commented Mar 19, 2026

  • Upgrade jackson from 2.21.1 to 3.1.0
  • Upgrade jollyday-jackson from 1.8.1 to 2.2.0
  • Code adaptation due to changed interfaces

@wborn This is a reaction to your question if we could upgrade to 3.1.0.

There are a few remarks:

  • jackson packages change the namespace to tools.jackson. An exception is jackson-annotations, which stays as it is. This is intended by the developers.
  • There are some issues with 3.1.0, though, due to transitive dependencies. swagger-jaxrs2 restricts jackson to 2.x - without adding the old dependencies to the feature, I could pass not the karaf-verify step. Not sure if this will cause trouble, though.
  • I could not find a valid replacement for one setting of the parser: objectMapper.enable(JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN);. Maybe @lolodomo has some insights how to proceed? I am lacking expertise in this area :-)

@holgerfriedrich holgerfriedrich added the dependencies Pull requests that update a dependency file label Mar 19, 2026
@wborn
Copy link
Copy Markdown
Member

wborn commented Mar 19, 2026

Nice that is a good start! 👍

objectMapper.enable(JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN)

ChatGPT suggest doing this via the factory builder:

JsonFactory factory = JsonFactory.builder()
    .enable(JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN)
    .build();

JsonMapper mapper = new JsonMapper(factory);

@holgerfriedrich
Copy link
Copy Markdown
Member Author

My GPT says that it is no longer needed and thus removed. Jackson 3 should keep booleans as strings per default.
I am not an expert in this area.

At least all of our tests seem to pass now as well 🎉

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR upgrades the project’s Jackson stack to 3.1.0 (new tools.jackson.* namespace) and updates jollyday-jackson to 2.2.0, adjusting YAML/JSON parsing and related OSGi feature/test wiring accordingly.

Changes:

  • Bump Jackson to 3.1.0 and migrate imports/usages from com.fasterxml.jackson.* to tools.jackson.* where applicable.
  • Update Karaf features/BOMs/itest run configurations to install and resolve the new Jackson/SnakeYAML artifacts, and bump Jollyday to 2.2.0.
  • Adapt YAML model parsing/serialization, marketplace YAML handlers, websocket JSON handling, and Swagger OpenAPI serialization to the updated Jackson APIs.

Reviewed changes

Copilot reviewed 39 out of 39 changed files in this pull request and generated 8 comments.

Show a summary per file
File Description
tools/upgradetool/src/main/java/org/openhab/core/tools/internal/YamlConfigurationV1TagsUpgrader.java Switch upgrader YAML processing to Jackson 3 YAML mapper/API updates.
tools/upgradetool/pom.xml Update Jackson dependency coordinates to tools.jackson.* and rely on parent properties.
pom.xml Set global Jackson version properties (Jackson 3.1.0 + annotations 2.21).
itests/org.openhab.core.thing.tests/itest.bndrun Update itest bundles for tools.jackson 3 + snakeyaml-engine + Jollyday 2.2.0.
itests/org.openhab.core.model.thing.tests/itest.bndrun Update itest bundles for tools.jackson 3 + snakeyaml-engine + Jollyday 2.2.0.
itests/org.openhab.core.model.script.tests/itest.bndrun Update itest bundles for tools.jackson 3 + snakeyaml-engine + Jollyday 2.2.0.
itests/org.openhab.core.model.rule.tests/itest.bndrun Update itest bundles for tools.jackson 3 + snakeyaml-engine + Jollyday 2.2.0.
itests/org.openhab.core.model.item.tests/itest.bndrun Update itest bundles for tools.jackson 3 + snakeyaml-engine + Jollyday 2.2.0.
itests/org.openhab.core.ephemeris.tests/itest.bndrun Update itest bundles for tools.jackson 3 + Jollyday 2.2.0.
itests/org.openhab.core.automation.tests/itest.bndrun Update itest bundles for tools.jackson 3 + snakeyaml-engine + Jollyday 2.2.0.
itests/org.openhab.core.automation.module.timer.tests/itest.bndrun Update itest bundles for tools.jackson 3 + snakeyaml-engine + Jollyday 2.2.0.
itests/org.openhab.core.automation.module.script.tests/itest.bndrun Update itest bundles for tools.jackson 3 + snakeyaml-engine + Jollyday 2.2.0.
itests/org.openhab.core.automation.module.core.tests/itest.bndrun Update itest bundles for tools.jackson 3 + snakeyaml-engine + Jollyday 2.2.0.
itests/org.openhab.core.automation.integration.tests/itest.bndrun Update itest bundles for tools.jackson 3 + snakeyaml-engine + Jollyday 2.2.0.
features/karaf/openhab-tp/src/main/feature/feature.xml Update Karaf target platform features for Jackson 3/Jollyday 2.2.0 and add temporary Jackson 2.x bundles for swagger.
bundles/org.openhab.core.model.yaml/src/test/java/org/openhab/core/model/yaml/internal/semantics/YamlSemanticTagDTOTest.java Update test imports to tools.jackson ObjectMapper.
bundles/org.openhab.core.model.yaml/src/test/java/org/openhab/core/model/yaml/internal/items/YamlMetadataDTOSerializerTest.java Use YAMLMapper/tools.jackson for serializer tests.
bundles/org.openhab.core.model.yaml/src/test/java/org/openhab/core/model/yaml/internal/items/YamlMetadataDTODeserializerTest.java Use YAMLMapper/tools.jackson for deserializer tests.
bundles/org.openhab.core.model.yaml/src/main/java/org/openhab/core/model/yaml/internal/YamlModelWrapper.java Update JsonNode import to tools.jackson.
bundles/org.openhab.core.model.yaml/src/main/java/org/openhab/core/model/yaml/internal/YamlModelRepositoryImpl.java Migrate YAML repository implementation to Jackson 3 mapper/features/APIs.
bundles/org.openhab.core.model.yaml/src/main/java/org/openhab/core/model/yaml/internal/rules/YamlRuleTemplateDTO.java Update Jackson exception/node APIs for rule template DTO parsing.
bundles/org.openhab.core.model.yaml/src/main/java/org/openhab/core/model/yaml/internal/rules/YamlRuleDTO.java Update Jackson exception/node APIs for rule DTO parsing.
bundles/org.openhab.core.model.yaml/src/main/java/org/openhab/core/model/yaml/internal/items/YamlMetadataDTOSerializer.java Port custom serializer to Jackson 3 serializer APIs.
bundles/org.openhab.core.model.yaml/src/main/java/org/openhab/core/model/yaml/internal/items/YamlMetadataDTODeserializer.java Port custom deserializer to Jackson 3 deserializer APIs.
bundles/org.openhab.core.model.yaml/src/main/java/org/openhab/core/model/yaml/internal/items/YamlMetadataDTO.java Update serialize/deserialize annotation imports to tools.jackson.
bundles/org.openhab.core.model.yaml/pom.xml Add explicit jackson-annotations dependency (com.fasterxml) for mixed-namespace setup.
bundles/org.openhab.core.io.websocket.audio/src/main/java/org/openhab/core/io/websocket/audio/internal/PCMWebSocketConnection.java Switch websocket JSON parsing/serialization to tools.jackson APIs/exceptions.
bundles/org.openhab.core.io.websocket.audio/pom.xml Add Jackson dependency (currently via yaml artifact).
bundles/org.openhab.core.io.rest.swagger/src/main/java/org/openhab/core/io/rest/swagger/impl/OpenApiResource.java Replace swagger Json.mapper() usage with tools.jackson mapper for OpenAPI output.
bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/internal/parser/jackson/TemplateYAMLParser.java Update Jackson TypeReference/JsonNode imports to tools.jackson.
bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/internal/parser/jackson/AbstractJacksonYAMLParser.java Replace YAMLFactory mapper construction with YAMLMapper builder for Jackson 3.
bundles/org.openhab.core.automation/pom.xml Add tools.jackson YAML dataformat dependency for YAML parsing.
bundles/org.openhab.core.addon.marketplace/src/main/java/org/openhab/core/addon/marketplace/internal/community/SerializedNameAnnotationIntrospector.java Update AnnotationIntrospector overrides to Jackson 3 signatures/packages.
bundles/org.openhab.core.addon.marketplace/src/main/java/org/openhab/core/addon/marketplace/internal/community/CommunityUIWidgetAddonHandler.java Switch YAML mapper creation/config to YAMLMapper builder + tools.jackson exceptions.
bundles/org.openhab.core.addon.marketplace/src/main/java/org/openhab/core/addon/marketplace/internal/community/CommunityTransformationAddonHandler.java Switch YAML mapper creation/config to YAMLMapper builder + tools.jackson exceptions.
bundles/org.openhab.core.addon.marketplace/src/main/java/org/openhab/core/addon/marketplace/internal/community/CommunityBlockLibaryAddonHandler.java Switch YAML mapper creation/config to YAMLMapper builder + tools.jackson exceptions.
bundles/org.openhab.core.addon.marketplace/src/main/java/org/openhab/core/addon/marketplace/internal/automation/MarketplaceRuleTemplateProvider.java Switch YAML mapper creation to YAMLMapper builder.
bom/runtime/pom.xml Update managed deps to tools.jackson coordinates; bump jollyday-jackson to 2.2.0.
bom/compile/pom.xml Bump jollyday-jackson to 2.2.0.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread bundles/org.openhab.core.io.websocket.audio/pom.xml Outdated
Comment thread features/karaf/openhab-tp/src/main/feature/feature.xml Outdated
@holgerfriedrich
Copy link
Copy Markdown
Member Author

I did a full build (including the PR on add-ons) and launched it as fresh install. I installed a few bindings, including HA, Jinjava, androidtv (the ones which still need jackson 2.x). No errors in the log, all in state active. Though, I could not test much, as I don't use them.

Though, now we have both old and new jackson installed:

 30 │ Active │  80 │ 2.21.0                │ Jackson-annotations
 31 │ Active │  80 │ 2.21.1                │ Jackson-core
 32 │ Active │  80 │ 2.21.1                │ jackson-databind
 33 │ Active │  80 │ 2.21.1                │ Jackson-dataformat-YAML
 34 │ Active │  80 │ 2.21.1                │ Jackson datatype: JSR310
 44 │ Active │  80 │ 2.2.0                 │ Jollyday with Jackson
247 │ Active │  80 │ 3.1.0                 │ Jackson-core
248 │ Active │  80 │ 3.1.0                 │ jackson-databind
249 │ Active │  80 │ 3.1.0                 │ Jackson-dataformat-XML
250 │ Active │  80 │ 3.1.0                 │ Jackson-dataformat-YAML
326 │ Active │  80 │ 2.21.1                │ Jackson datatype: jdk8

The distro can be grabbed from here:
https://github.com/holgerfriedrich/openhab-builds/actions/runs/23365126640
All tests are green.

@wborn from my side this is finished for now, what is your recommendation how to proceed?

@holgerfriedrich holgerfriedrich marked this pull request as ready for review March 21, 2026 06:16
@holgerfriedrich holgerfriedrich requested a review from a team as a code owner March 21, 2026 06:16
@kaikreuzer kaikreuzer requested a review from wborn March 26, 2026 21:46
Copy link
Copy Markdown
Member

@wborn wborn left a comment

Choose a reason for hiding this comment

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

It looks good to me! 👍
Do you know if the Eclipse app keeps working with both versions being there?

Comment thread bom/compile/pom.xml Outdated
holgerfriedrich and others added 11 commits March 28, 2026 12:42
* Upgrade jackson from 2.21.1 to 3.1.0
* Upgrade jollyday-jackson from 1.8.1 to 2.2.0
* Code adaptation due to changed interfaces

Signed-off-by: Holger Friedrich <mail@holger-friedrich.de>
Signed-off-by: Holger Friedrich <mail@holger-friedrich.de>
Signed-off-by: Holger Friedrich <mail@holger-friedrich.de>
…openhab/core/io/websocket/audio/internal/PCMWebSocketConnection.java

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Holger Friedrich <mail@holger-friedrich.de>
…openhab/core/io/websocket/audio/internal/PCMWebSocketConnection.java

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Holger Friedrich <mail@holger-friedrich.de>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Holger Friedrich <mail@holger-friedrich.de>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Holger Friedrich <mail@holger-friedrich.de>
…core/model/yaml/internal/YamlModelRepositoryImpl.java

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Holger Friedrich <mail@holger-friedrich.de>
Signed-off-by: Holger Friedrich <mail@holger-friedrich.de>
Signed-off-by: Holger Friedrich <mail@holger-friedrich.de>
Signed-off-by: Holger Friedrich <mail@holger-friedrich.de>
@holgerfriedrich holgerfriedrich force-pushed the pr-jackson3 branch 2 times, most recently from c2b0dd2 to 3ef8e42 Compare March 28, 2026 17:26
* Upgrade jollyday-jackson from 2.2.0 to 2.3.0
* Add new transitive dependency jspecify 1.0.0

Signed-off-by: Holger Friedrich <mail@holger-friedrich.de>
@holgerfriedrich
Copy link
Copy Markdown
Member Author

@wborn I upgraded jollyday and introduced the new transitive dependency jspecify required since 2.3.0.

The app did not resolve without further work, as we still need both snakeyaml versions :-(

I still see an issue in the app, not 100% sure yet if I just need to recompile everything....
openhab/openhab-distro#1890 (comment)

The cleanest way would probably to get rid of this jackson2/3 hybrid stuff.
I know too little about swagger-jaxrs2 and how to deal with it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants