From 3cd697c85432bdefd21f91161906da9b046eef19 Mon Sep 17 00:00:00 2001 From: kstich Date: Fri, 8 Oct 2021 16:21:28 -0700 Subject: [PATCH] Maintain schema property order in JsonSchema --- .../java/software/amazon/smithy/jsonschema/Schema.java | 5 +++-- .../software/amazon/smithy/jsonschema/SchemaTest.java | 10 ++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/smithy-jsonschema/src/main/java/software/amazon/smithy/jsonschema/Schema.java b/smithy-jsonschema/src/main/java/software/amazon/smithy/jsonschema/Schema.java index 12e5fa67872..f7b970a4ce2 100644 --- a/smithy-jsonschema/src/main/java/software/amazon/smithy/jsonschema/Schema.java +++ b/smithy-jsonschema/src/main/java/software/amazon/smithy/jsonschema/Schema.java @@ -20,6 +20,7 @@ import java.util.Collection; import java.util.Collections; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Objects; @@ -575,10 +576,10 @@ public static final class Builder implements SmithyBuilder { private Integer maxProperties; private Integer minProperties; private Collection required = new ArrayList<>(); - private Map properties = new HashMap<>(); + private Map properties = new LinkedHashMap<>(); private Schema additionalProperties; private Schema propertyNames; - private Map patternProperties = new HashMap<>(); + private Map patternProperties = new LinkedHashMap<>(); private List allOf = ListUtils.of(); private List anyOf = ListUtils.of(); diff --git a/smithy-jsonschema/src/test/java/software/amazon/smithy/jsonschema/SchemaTest.java b/smithy-jsonschema/src/test/java/software/amazon/smithy/jsonschema/SchemaTest.java index 451e78184f6..3c218f32256 100644 --- a/smithy-jsonschema/src/test/java/software/amazon/smithy/jsonschema/SchemaTest.java +++ b/smithy-jsonschema/src/test/java/software/amazon/smithy/jsonschema/SchemaTest.java @@ -183,6 +183,16 @@ public void ignoresNegativeNumericPositions() { assertThat(schema.selectSchema("allOf", "-1"), equalTo(Optional.empty())); } + @Test + public void maintainsPropertyOrder() { + Schema schema = Schema.builder() + .putProperty("foo", Schema.builder().build()) + .putProperty("bar", Schema.builder().build()) + .build(); + + assertThat(schema.getProperties().keySet(), contains("foo", "bar")); + } + @Test public void removingPropertiesRemovesRequiredPropertiesToo() { Schema schema = Schema.builder()