Skip to content

[11.x.x] Add RuneFIXMapper to serialise Rune model objects to FIX messages - #24

Closed
hugohills-regnosys wants to merge 3 commits into
11.x.xfrom
feature/fix-serialisation
Closed

hugohills-regnosys wants to merge 3 commits into
11.x.xfrom
feature/fix-serialisation

Conversation

@hugohills-regnosys

@hugohills-regnosys hugohills-regnosys commented Oct 6, 2026 •

Copy link
Copy Markdown

Adds RuneFIXMapper under com.regnosys.rosetta.common.serialisation.fix, which serialises a Rune model object to a QuickFIX/J Message or FIX string. It takes field tags from the model's labels (via LabelProviderResolver) and repeating-group structure from the QuickFIX/J DataDictionary. Like RosettaCsvMapper, it is a Jackson ObjectMapper, created through RosettaObjectMapperCreator.forFIX, which loads the DataDictionary from the configuration's dictionaryPath. Moved here from the DRR repository; still in progress, and deserialisation is stubbed. Targets 11.x.x first, to be cherry-picked to main.

Adds quickfixj-core 3.0.2 (Java 8 bytecode), and mockito-junit-jupiter for tests.

RuneFIXMapperSerialisationTest runs the mapper end to end against a generated test model and a minimal FIX 5.0 SP2 dictionary. Two of its tests are disabled until the bugs they expose are fixed in a follow-up commit on this PR: validation failures never reach the report (validateBodyOnlyReport builds reportIssues but returns issues), and a type with no labels of its own throws a NullPointerException because LabelProviderResolver.fromType returns null.

Type of change

  • New feature (non-breaking change which adds functionality)

🤖 Generated with Claude Code

Moves the FIX serialiser from the DRR repository into rune-common under
com.regnosys.rosetta.common.serialisation.fix, built on QuickFIX/J. Field tags
come from the model's labels and repeating-group structure from the QuickFIX/J
DataDictionary. Deserialisation is still stubbed.
…dictionary

Adds a test model shaped like a MiFIR TradeCaptureReport and a minimal FIX 5.0 SP2 dictionary, and exercises scalars, components, enum and complex repeating groups, nested groups, validation, unmappable attributes, routing and concurrent use. Two tests are disabled pending fixes: validation failures are dropped from the report, and a type with no labels throws a NullPointerException.
…ectMapperCreator.forFIX

Like RosettaCsvMapper, it extends ObjectMapper and overrides writeValueAsString, writeValueAsBytes, writer, writerWithDefaultPrettyPrinter, readValue(String, Class) and copy. forFIX overloads load the DataDictionary from the configuration's dictionaryPath, which the mapper previously ignored.
@hugohills-regnosys

Copy link
Copy Markdown
Author

Moved to finos#756.

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.

1 participant