Skip to content

Add msgpack-jackson3 module for Jackson 3.x support#987

Open
komamitsu wants to merge 1 commit into
msgpack:mainfrom
komamitsu:support-jackson3
Open

Add msgpack-jackson3 module for Jackson 3.x support#987
komamitsu wants to merge 1 commit into
msgpack:mainfrom
komamitsu:support-jackson3

Conversation

@komamitsu

@komamitsu komamitsu commented May 31, 2026

Copy link
Copy Markdown
Member

Summary

  • Adds a new msgpack-jackson3 submodule (jackson-dataformat-msgpack3) that ports the existing Jackson 2.x integration to Jackson 3.x (tools.jackson namespace)
  • Requires Java 17+ and Jackson 3.1.2; the module is excluded from the build on older JDKs so existing Java 8 users are unaffected
  • Includes JMH benchmarks (src/jmh/java) runnable via ./sbt "msgpack-jackson3/jmh:run"
  • Fixes Add Jackson 3 support #933

Key differences from msgpack-jackson

  • Package namespace: com.fasterxml.jacksontools.jackson
  • TokenStreamLocation replaces JsonLocation; byte offset passed as columnNr
  • Lightweight MessagePackWriteContext replaces SimpleStreamWriteContext

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.

Pull request overview

This PR adds a new msgpack-jackson3 submodule that ports the existing Jackson 2.x MessagePack integration to Jackson 3.x (tools.jackson namespace). It is published as a separate artifact (jackson-dataformat-msgpack-jackson3), requires Java 17+, and is conditionally included in the SBT build / CI / release pipelines so existing Java 8 users of msgpack-jackson are unaffected.

Changes:

  • New msgpack-jackson3 module mirroring msgpack-jackson, adapted for Jackson 3 APIs (ObjectWriteContext/ObjectReadContext, TokenStreamLocation, ValueSerializer/ValueDeserializer, builder-style MapperBuilder/TSFBuilder, etc.) and including a lightweight MessagePackWriteContext replacement for SimpleStreamWriteContext.
  • SBT build, CI workflow, and release workflow updated to compile/test/publish the new module only on JDK 17+, plus a new sbt-jmh plugin and JMH benchmarks under src/jmh/java.
  • Numerous regression tests covering tricky edge cases (null keys, write-context state, dup-detection NPEs, root-scalar ordering, multi-root containers, writeNumber(String) NaN/Infinity, etc.).

Reviewed changes

Copilot reviewed 41 out of 42 changed files in this pull request and generated no comments.

Show a summary per file
File Description
build.sbt Adds msgpack-jackson3 project, JMH plugin, Java 17 gating via isJava17Plus.
project/plugins.sbt Adds sbt-jmh plugin.
.github/workflows/CI.yml Skips msgpack-jackson3 tests on JDKs < 17.
.github/workflows/release.yml Splits publishing so jackson3 is only published with JDK 17.
msgpack-jackson3/README.md New documentation for the Jackson 3 module.
msgpack-jackson3/src/main/java/.../MessagePackFactory.java Jackson 3 BinaryTSFactory implementation.
msgpack-jackson3/src/main/java/.../MessagePackFactoryBuilder.java New TSFBuilder for the factory.
msgpack-jackson3/src/main/java/.../MessagePackGenerator.java Port of generator; uses new MessagePackWriteContext, node-buffering model.
msgpack-jackson3/src/main/java/.../MessagePackParser.java Port of parser to ParserMinimalBase; uses MessagePackReadContext.
msgpack-jackson3/src/main/java/.../MessagePackReadContext.java Read context (replaces JsonReadContext).
msgpack-jackson3/src/main/java/.../MessagePackWriteContext.java Lightweight write context.
msgpack-jackson3/src/main/java/.../MessagePackMapper.java ObjectMapper subclass with new builder API.
msgpack-jackson3/src/main/java/.../MessagePackSerializerFactory.java Custom serializer factory installing key serializer.
msgpack-jackson3/src/main/java/.../MessagePackSerializedString.java SerializableString impl tolerant of null values.
msgpack-jackson3/src/main/java/.../MessagePackKeySerializer.java Key serializer using MessagePackSerializedString.
msgpack-jackson3/src/main/java/.../MessagePackExtensionType.java Extension type value + serializer.
msgpack-jackson3/src/main/java/.../ExtensionTypeCustomDeserializers.java Per-type extension deserializer registry.
msgpack-jackson3/src/main/java/.../TimestampExtensionModule.java Module serializing Instant as msgpack timestamp ext type.
msgpack-jackson3/src/main/java/.../JsonArrayFormat.java AnnotationIntrospector forcing ARRAY shape.
msgpack-jackson3/src/main/java/.../PackageVersion.java Hard-coded package version.
msgpack-jackson3/src/main/java/.../Tuple.java Small Tuple helper.
msgpack-jackson3/src/test/java/... Ported test suite plus new regression tests for Jackson 3 specific behavior.
msgpack-jackson3/src/jmh/java/... New JMH benchmarks (read/write/UTF-8) and model classes.

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

@komamitsu komamitsu requested a review from xerial May 31, 2026 14:27
@komamitsu

Copy link
Copy Markdown
Member Author

@xerial Can you take a quick look at the changes of .github/workflows/* and *.sbt?

@xerial

xerial commented Jun 16, 2026

Copy link
Copy Markdown
Member

@komamitsu Do you still need to maintain msgpack-jackson for Jackson 2.x? If we don't have critical use cases, I'll lean to dropping Jackson 2 support as supporting both Jackson2 and 3 will be overkill for msgpack-java project.

@komamitsu

Copy link
Copy Markdown
Member Author

@xerial Jackson 2 is still actively used, and Jackson 3 requires Java 17+, so not everyone can migrate yet. I think we should support both for a while.

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

3 participants