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
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"

Key differences from msgpack-jackson

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

Copy link
Copy Markdown

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 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?

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants