Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Consistent ordering of subtypes in schema #4

Open
big-andy-coates opened this issue Apr 27, 2022 · 0 comments
Open

Consistent ordering of subtypes in schema #4

big-andy-coates opened this issue Apr 27, 2022 · 0 comments
Labels
enhancement New feature or request

Comments

@big-andy-coates
Copy link
Member

Add a test such as the following to SchemaGeneratorTest.java:

@Test
 void shouldConsistentlyOrderSubTypes() {
        // Given:
        @JsonTypeInfo(use = JsonTypeInfo.Id.NAME)
        class BaseType {}
        class SubType1 extends BaseType {}
        class SubType2 extends BaseType {}

        generator.registerSubTypes(List.of(BaseType.class));

        // When:
        final String result = generator.generateSchema(BaseType.class);

        // Then:
        assertThat(
                result,
                containsString(
                        ""
                                + "oneOf:"
                                + lineSeparator()
                                + "- $ref: '#/definitions/SubType1'"
                                + lineSeparator()
                                + "- $ref: '#/definitions/SubType2'"));
    }

and this test may or may not fail, depending on the ordering of the sub types. The issue is that the order is defined by Jackson's StdSubtypeResolver.collectAndResolveSubtypesByClass(), which is storing the found NamedType's in a HashMap ... which leads to inconsistencies...

The work around would be to install a 'fixed' subclass resolver that orders the returned set of named types.

The longer term fix is to have mbknor-jackson-jsonschema sort the returned collection by type name.

@big-andy-coates big-andy-coates added the enhancement New feature or request label Mar 18, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
Status: To do
Development

No branches or pull requests

1 participant