From 58c973797aed01f72459dc7d7d1ec6685ab93d6c Mon Sep 17 00:00:00 2001 From: Ignacio del Valle Alles Date: Tue, 1 Sep 2015 15:18:38 +0200 Subject: [PATCH 1/5] object schema property order https://github.com/FasterXML/jackson-module-jsonSchema/issues/27 --- .../module/jsonSchema/types/ObjectSchema.java | 6 +- .../jsonSchema/TestPropertyOrderInSchema.java | 55 +++++++++++++++++++ 2 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 src/test/java/com/fasterxml/jackson/module/jsonSchema/TestPropertyOrderInSchema.java diff --git a/src/main/java/com/fasterxml/jackson/module/jsonSchema/types/ObjectSchema.java b/src/main/java/com/fasterxml/jackson/module/jsonSchema/types/ObjectSchema.java index 446cea18..0f06c889 100644 --- a/src/main/java/com/fasterxml/jackson/module/jsonSchema/types/ObjectSchema.java +++ b/src/main/java/com/fasterxml/jackson/module/jsonSchema/types/ObjectSchema.java @@ -1,7 +1,6 @@ package com.fasterxml.jackson.module.jsonSchema.types; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -12,6 +11,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatTypes; import com.fasterxml.jackson.module.jsonSchema.JsonSchema; +import java.util.LinkedHashMap; /** * This type represents a {@link JsonSchema} as an object type @@ -68,8 +68,8 @@ public class ObjectSchema extends ContainerTypeSchema public ObjectSchema() { dependencies = new ArrayList(); - patternProperties = new HashMap(); - properties = new HashMap(); + patternProperties = new LinkedHashMap(); + properties = new LinkedHashMap(); } public boolean addSchemaDependency(String depender, JsonSchema parentMustMatch) { diff --git a/src/test/java/com/fasterxml/jackson/module/jsonSchema/TestPropertyOrderInSchema.java b/src/test/java/com/fasterxml/jackson/module/jsonSchema/TestPropertyOrderInSchema.java new file mode 100644 index 00000000..3b09f55e --- /dev/null +++ b/src/test/java/com/fasterxml/jackson/module/jsonSchema/TestPropertyOrderInSchema.java @@ -0,0 +1,55 @@ +package com.fasterxml.jackson.module.jsonSchema; + +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +import com.fasterxml.jackson.databind.ObjectMapper; + +public class TestPropertyOrderInSchema extends SchemaTestBase { + + @JsonPropertyOrder({"a", "b", "c"}) + static class Bean { + + private int b; + private String c; + private String a; + + public int getB() { + return b; + } + + public void setB(int b) { + this.b = b; + } + + public String getC() { + return c; + } + + public void setC(String c) { + this.c = c; + } + + public String getA() { + return a; + } + + public void setA(String a) { + this.a = a; + } + } + + /* + /********************************************************** + /* Unit tests + /********************************************************** + */ + final ObjectMapper MAPPER = objectMapper(); + + public void testCorrectOrder() throws Exception { + JsonSchemaGenerator generator = new JsonSchemaGenerator(MAPPER); + JsonSchema jsonSchema = generator.generateSchema(Bean.class); + System.out.println(jsonSchema.asObjectSchema().getProperties().keySet()); + assertEquals(jsonSchema.asObjectSchema().getProperties().keySet().toString(), "[a, b, c]"); + } + +} From 163f7db8335f9f3e30a64bf525619e476a043fee Mon Sep 17 00:00:00 2001 From: Ignacio del Valle Alles Date: Tue, 1 Sep 2015 15:37:50 +0200 Subject: [PATCH 2/5] https://github.com/FasterXML/jackson-module-jsonSchema/issues/27 --- .../com/fasterxml/jackson/module/jsonSchema/TestCyclic.java | 5 +++++ .../jackson/module/jsonSchema/TestReadJsonSchema.java | 3 +-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/fasterxml/jackson/module/jsonSchema/TestCyclic.java b/src/test/java/com/fasterxml/jackson/module/jsonSchema/TestCyclic.java index 5d37f5de..bff9e684 100644 --- a/src/test/java/com/fasterxml/jackson/module/jsonSchema/TestCyclic.java +++ b/src/test/java/com/fasterxml/jackson/module/jsonSchema/TestCyclic.java @@ -1,5 +1,6 @@ package com.fasterxml.jackson.module.jsonSchema; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.databind.ObjectMapper; import java.util.List; import java.util.Map; @@ -7,6 +8,7 @@ public class TestCyclic extends SchemaTestBase { // [Issue#4] + @JsonPropertyOrder({"next", "name"}) public class Loop { public String name; public Loop next; @@ -42,6 +44,9 @@ public void testSimpleCyclic() throws Exception "\"properties\":{\"next\":{\"type\":\"object\"," + "\"$ref\":\"urn:jsonschema:com:fasterxml:jackson:module:jsonSchema:TestCyclic:Loop\"}" + ",\"name\":{\"type\":\"string\"}}}"; + + System.out.println(EXP); + System.out.println(json); assertEquals(aposToQuotes(EXP), json); } diff --git a/src/test/java/com/fasterxml/jackson/module/jsonSchema/TestReadJsonSchema.java b/src/test/java/com/fasterxml/jackson/module/jsonSchema/TestReadJsonSchema.java index 33ea716d..2a441be8 100644 --- a/src/test/java/com/fasterxml/jackson/module/jsonSchema/TestReadJsonSchema.java +++ b/src/test/java/com/fasterxml/jackson/module/jsonSchema/TestReadJsonSchema.java @@ -19,10 +19,9 @@ public class TestReadJsonSchema extends SchemaTestBase { enum SchemaEnum { - YES, NO; + NO,YES; } - @JsonPropertyOrder(alphabetic=true) static class SchemableBasic { public SchemaEnum testEnum; From f82823ecf4499bee0937f5e6273656bb6145e72e Mon Sep 17 00:00:00 2001 From: Ignacio del Valle Alles Date: Tue, 1 Sep 2015 15:50:24 +0200 Subject: [PATCH 3/5] https://github.com/FasterXML/jackson-module-jsonSchema/issues/27 --- .../jsonSchema/TestPropertyOrderInSchema.java | 48 +++++++++++++++++-- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/src/test/java/com/fasterxml/jackson/module/jsonSchema/TestPropertyOrderInSchema.java b/src/test/java/com/fasterxml/jackson/module/jsonSchema/TestPropertyOrderInSchema.java index 3b09f55e..5f5421e3 100644 --- a/src/test/java/com/fasterxml/jackson/module/jsonSchema/TestPropertyOrderInSchema.java +++ b/src/test/java/com/fasterxml/jackson/module/jsonSchema/TestPropertyOrderInSchema.java @@ -1,12 +1,13 @@ package com.fasterxml.jackson.module.jsonSchema; import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.MapperFeature; import com.fasterxml.jackson.databind.ObjectMapper; public class TestPropertyOrderInSchema extends SchemaTestBase { - @JsonPropertyOrder({"a", "b", "c"}) + @JsonPropertyOrder({"c", "b", "a"}) static class Bean { private int b; @@ -37,18 +38,59 @@ public void setA(String a) { this.a = a; } } + + @JsonPropertyOrder(alphabetic = true) + static class Bean2 { + + private int b; + private String c; + private String a; + + public int getB() { + return b; + } + + public void setB(int b) { + this.b = b; + } + + public String getC() { + return c; + } + + public void setC(String c) { + this.c = c; + } + + public String getA() { + return a; + } + + public void setA(String a) { + this.a = a; + } + } /* /********************************************************** /* Unit tests /********************************************************** */ - final ObjectMapper MAPPER = objectMapper(); + - public void testCorrectOrder() throws Exception { + public void testAnnotationOrder() throws Exception { + ObjectMapper MAPPER = objectMapper(); JsonSchemaGenerator generator = new JsonSchemaGenerator(MAPPER); JsonSchema jsonSchema = generator.generateSchema(Bean.class); System.out.println(jsonSchema.asObjectSchema().getProperties().keySet()); + assertEquals(jsonSchema.asObjectSchema().getProperties().keySet().toString(), "[c, b, a]"); + } + + public void testAlphabeticOrder() throws Exception { + final ObjectMapper MAPPER = objectMapper(); + JsonSchemaGenerator generator = new JsonSchemaGenerator(MAPPER); + JsonSchema jsonSchema = generator.generateSchema(Bean2.class); + System.out.println(jsonSchema.asObjectSchema().getProperties().keySet()); assertEquals(jsonSchema.asObjectSchema().getProperties().keySet().toString(), "[a, b, c]"); } From 165f3120177f812c603780471289e7f31c3dc4ac Mon Sep 17 00:00:00 2001 From: Ignacio del Valle Alles Date: Tue, 1 Sep 2015 16:02:41 +0200 Subject: [PATCH 4/5] Enum is a hashset and hence elements can have arbitrary order --- .../jackson/module/jsonSchema/TestReadJsonSchema.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/fasterxml/jackson/module/jsonSchema/TestReadJsonSchema.java b/src/test/java/com/fasterxml/jackson/module/jsonSchema/TestReadJsonSchema.java index 2a441be8..27d3a17d 100644 --- a/src/test/java/com/fasterxml/jackson/module/jsonSchema/TestReadJsonSchema.java +++ b/src/test/java/com/fasterxml/jackson/module/jsonSchema/TestReadJsonSchema.java @@ -19,12 +19,12 @@ public class TestReadJsonSchema extends SchemaTestBase { enum SchemaEnum { - NO,YES; + YES, NO; } + @JsonPropertyOrder(alphabetic=true) static class SchemableBasic { - public SchemaEnum testEnum; public String name; public JsonSerializable someSerializable; } From d273183c06d07fd2dec4a6e892b6b83f9795b297 Mon Sep 17 00:00:00 2001 From: Ignacio del Valle Alles Date: Tue, 1 Sep 2015 16:02:51 +0200 Subject: [PATCH 5/5] Enum is a hashset and hence elements can have arbitrary order --- .../jackson/module/jsonSchema/TestPropertyOrderInSchema.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/test/java/com/fasterxml/jackson/module/jsonSchema/TestPropertyOrderInSchema.java b/src/test/java/com/fasterxml/jackson/module/jsonSchema/TestPropertyOrderInSchema.java index 5f5421e3..2c06ceb0 100644 --- a/src/test/java/com/fasterxml/jackson/module/jsonSchema/TestPropertyOrderInSchema.java +++ b/src/test/java/com/fasterxml/jackson/module/jsonSchema/TestPropertyOrderInSchema.java @@ -82,7 +82,6 @@ public void testAnnotationOrder() throws Exception { ObjectMapper MAPPER = objectMapper(); JsonSchemaGenerator generator = new JsonSchemaGenerator(MAPPER); JsonSchema jsonSchema = generator.generateSchema(Bean.class); - System.out.println(jsonSchema.asObjectSchema().getProperties().keySet()); assertEquals(jsonSchema.asObjectSchema().getProperties().keySet().toString(), "[c, b, a]"); } @@ -90,7 +89,6 @@ public void testAlphabeticOrder() throws Exception { final ObjectMapper MAPPER = objectMapper(); JsonSchemaGenerator generator = new JsonSchemaGenerator(MAPPER); JsonSchema jsonSchema = generator.generateSchema(Bean2.class); - System.out.println(jsonSchema.asObjectSchema().getProperties().keySet()); assertEquals(jsonSchema.asObjectSchema().getProperties().keySet().toString(), "[a, b, c]"); }