From 950e487ed4ea94de373c30ca59c097c3f54ddf51 Mon Sep 17 00:00:00 2001 From: Justin Black Date: Wed, 10 Jan 2024 17:38:50 -0800 Subject: [PATCH 1/8] Adds initial ContainsValidator --- .../schemas/validation/ContainsValidator.hbs | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 src/main/resources/java/src/main/java/packagename/schemas/validation/ContainsValidator.hbs diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/ContainsValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/ContainsValidator.hbs new file mode 100644 index 00000000000..217fd28be54 --- /dev/null +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/ContainsValidator.hbs @@ -0,0 +1,83 @@ +package {{{packageName}}}.schemas.validation; + +import org.checkerframework.checker.nullness.qual.Nullable; + +import java.util.ArrayList; +import java.util.List; + +public class ContainsValidator implements KeywordValidator { + public final Class contains; + + public ItemsValidator(Class contains) { + this.contains = contains; + } + + @Override + public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + if (!(arg instanceof List)) { + return null; + } + PathToSchemasMap pathToSchemas = new PathToSchemasMap(); + // todo add handling for prefixItems + int i = 0; + for(Object itemValue: (List) arg) { + List itemPathToItem = new ArrayList<>(validationMetadata.pathToItem()); + itemPathToItem.add(i); + ValidationMetadata itemValidationMetadata = new ValidationMetadata( + itemPathToItem, + validationMetadata.configuration(), + validationMetadata.validatedPathToSchemas(), + validationMetadata.seenClasses() + ); + JsonSchema itemsSchema = JsonSchemaFactory.getInstance(items); + if (itemValidationMetadata.validationRanEarlier(itemsSchema)) { + // todo add_deeper_validated_schemas + i +=1; + continue; + } + PathToSchemasMap otherPathToSchemas = JsonSchema.validate(itemsSchema, itemValue, itemValidationMetadata); + pathToSchemas.update(otherPathToSchemas); + i += 1; + } + return pathToSchemas; + } + + public List getContainsPathToSchemas( + arg: typing.Any, + ValidationMetadata validation_metadata, + PathToSchemasMap path_to_schemas, + ) { + if (!(arg instanceof List)) { + return new ArrayList<>(); + } + List containsPathToSchemas = new ArrayList<>(); + int i = 0; + for(Object itemValue: (List) arg) { + PathToSchemasMap thesePathToSchemas = new PathToSchemasMap(); + + List itemPathToItem = new ArrayList<>(validationMetadata.pathToItem()); + itemPathToItem.add(i); + ValidationMetadata itemValidationMetadata = new ValidationMetadata( + itemPathToItem, + validationMetadata.configuration(), + validationMetadata.validatedPathToSchemas(), + validationMetadata.seenClasses() + ); + if (itemValidationMetadata.validationRanEarlier(itemsSchema)) { + // todo add_deeper_validated_schemas + containsPathToSchemas.add(thesePathToSchemas); + i +=1; + continue; + } + + JsonSchema containsSchema = JsonSchemaFactory.getInstance(contains); + try { + PathToSchemasMap otherPathToSchemas = JsonSchema.validate( + containsSchema, itemValue, itemValidationMetadata) + containsPathToSchemas.append(otherPathToSchemas) + } except (exceptions.OpenApiException ignored) { + ; + } + return containsPathToSchemas; + } +} From 5d67801eb8178c7e68f501a943188b799f668dbd Mon Sep 17 00:00:00 2001 From: Justin Black Date: Wed, 10 Jan 2024 23:15:52 -0800 Subject: [PATCH 2/8] Adds ContainsValidator, adds needed containsPathToSchemas input to the validate method --- .../java/.openapi-generator/FILES | 2 +- .../AdditionalPropertiesValidator.java | 7 +- .../schemas/validation/AllOfValidator.java | 7 +- .../schemas/validation/AnyOfValidator.java | 7 +- .../schemas/validation/ConstValidator.java | 7 +- .../schemas/validation/ContainsValidator.java | 76 +++++++++++++++++++ .../schemas/validation/EnumValidator.java | 7 +- .../validation/ExclusiveMaximumValidator.java | 7 +- .../validation/ExclusiveMinimumValidator.java | 7 +- .../schemas/validation/FormatValidator.java | 7 +- .../schemas/validation/ItemsValidator.java | 7 +- .../schemas/validation/KeywordValidator.java | 8 +- .../schemas/validation/MaxItemsValidator.java | 7 +- .../validation/MaxLengthValidator.java | 7 +- .../validation/MaxPropertiesValidator.java | 7 +- .../schemas/validation/MaximumValidator.java | 7 +- .../schemas/validation/MinItemsValidator.java | 7 +- .../validation/MinLengthValidator.java | 7 +- .../validation/MinPropertiesValidator.java | 7 +- .../schemas/validation/MinimumValidator.java | 7 +- .../validation/MultipleOfValidator.java | 7 +- .../schemas/validation/NotValidator.java | 7 +- .../schemas/validation/OneOfValidator.java | 7 +- .../schemas/validation/PatternValidator.java | 7 +- .../validation/PropertiesValidator.java | 7 +- .../schemas/validation/RequiredValidator.java | 7 +- .../schemas/validation/TypeValidator.java | 7 +- .../validation/UniqueItemsValidator.java | 7 +- .../generators/JavaClientGenerator.java | 2 +- .../AdditionalPropertiesValidator.hbs | 7 +- .../schemas/validation/AllOfValidator.hbs | 7 +- .../schemas/validation/AnyOfValidator.hbs | 7 +- .../schemas/validation/ConstValidator.hbs | 7 +- .../schemas/validation/ContainsValidator.hbs | 39 ++++------ .../schemas/validation/EnumValidator.hbs | 7 +- .../validation/ExclusiveMaximumValidator.hbs | 7 +- .../validation/ExclusiveMinimumValidator.hbs | 7 +- .../schemas/validation/FakeValidator.hbs | 10 --- .../schemas/validation/FormatValidator.hbs | 7 +- .../schemas/validation/ItemsValidator.hbs | 7 +- .../schemas/validation/KeywordValidator.hbs | 8 +- .../schemas/validation/MaxItemsValidator.hbs | 7 +- .../schemas/validation/MaxLengthValidator.hbs | 7 +- .../validation/MaxPropertiesValidator.hbs | 7 +- .../schemas/validation/MaximumValidator.hbs | 7 +- .../schemas/validation/MinItemsValidator.hbs | 7 +- .../schemas/validation/MinLengthValidator.hbs | 7 +- .../validation/MinPropertiesValidator.hbs | 7 +- .../schemas/validation/MinimumValidator.hbs | 7 +- .../validation/MultipleOfValidator.hbs | 7 +- .../schemas/validation/NotValidator.hbs | 7 +- .../schemas/validation/OneOfValidator.hbs | 7 +- .../schemas/validation/PatternValidator.hbs | 7 +- .../validation/PropertiesValidator.hbs | 7 +- .../schemas/validation/RequiredValidator.hbs | 7 +- .../schemas/validation/TypeValidator.hbs | 7 +- .../validation/UniqueItemsValidator.hbs | 7 +- 57 files changed, 404 insertions(+), 91 deletions(-) create mode 100644 samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ContainsValidator.java delete mode 100644 src/main/resources/java/src/main/java/packagename/schemas/validation/FakeValidator.hbs diff --git a/samples/client/3_1_0_unit_test/java/.openapi-generator/FILES b/samples/client/3_1_0_unit_test/java/.openapi-generator/FILES index d4d0a364959..a9810f9cfef 100644 --- a/samples/client/3_1_0_unit_test/java/.openapi-generator/FILES +++ b/samples/client/3_1_0_unit_test/java/.openapi-generator/FILES @@ -254,6 +254,7 @@ src/main/java/org/openapijsonschematools/client/schemas/validation/BooleanEnumVa src/main/java/org/openapijsonschematools/client/schemas/validation/BooleanSchemaValidator.java src/main/java/org/openapijsonschematools/client/schemas/validation/BooleanValueMethod.java src/main/java/org/openapijsonschematools/client/schemas/validation/ConstValidator.java +src/main/java/org/openapijsonschematools/client/schemas/validation/ContainsValidator.java src/main/java/org/openapijsonschematools/client/schemas/validation/CustomIsoparser.java src/main/java/org/openapijsonschematools/client/schemas/validation/DefaultValueMethod.java src/main/java/org/openapijsonschematools/client/schemas/validation/DoubleEnumValidator.java @@ -261,7 +262,6 @@ src/main/java/org/openapijsonschematools/client/schemas/validation/DoubleValueMe src/main/java/org/openapijsonschematools/client/schemas/validation/EnumValidator.java src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMaximumValidator.java src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMinimumValidator.java -src/main/java/org/openapijsonschematools/client/schemas/validation/FakeValidator.java src/main/java/org/openapijsonschematools/client/schemas/validation/FloatEnumValidator.java src/main/java/org/openapijsonschematools/client/schemas/validation/FloatValueMethod.java src/main/java/org/openapijsonschematools/client/schemas/validation/FormatValidator.java diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AdditionalPropertiesValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AdditionalPropertiesValidator.java index 5a5a6cfc917..dc36864089b 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AdditionalPropertiesValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AdditionalPropertiesValidator.java @@ -15,7 +15,12 @@ public AdditionalPropertiesValidator(Class additionalPrope } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Map mapArg)) { return null; } diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AllOfValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AllOfValidator.java index 7b392d027a7..02aecb3dbf2 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AllOfValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AllOfValidator.java @@ -11,7 +11,12 @@ public AllOfValidator(List> allOf) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { PathToSchemasMap pathToSchemas = new PathToSchemasMap(); for(Class allOfClass: allOf) { JsonSchema allOfSchema = JsonSchemaFactory.getInstance(allOfClass); diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AnyOfValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AnyOfValidator.java index 53d61e878b2..e978af7ee5f 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AnyOfValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AnyOfValidator.java @@ -14,7 +14,12 @@ public AnyOfValidator(List> anyOf) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { PathToSchemasMap pathToSchemas = new PathToSchemasMap(); List> validatedAnyOfClasses = new ArrayList<>(); for(Class anyOfClass: anyOf) { diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ConstValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ConstValidator.java index cb863f215ad..780a685f1f3 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ConstValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ConstValidator.java @@ -14,7 +14,12 @@ public ConstValidator(@Nullable Object constValue) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (arg instanceof Number) { BigDecimal castArg = getBigDecimal((Number) arg); if (Objects.equals(castArg, constValue)) { diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ContainsValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ContainsValidator.java new file mode 100644 index 00000000000..348eb310576 --- /dev/null +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ContainsValidator.java @@ -0,0 +1,76 @@ +package org.openapijsonschematools.client.schemas.validation; + +import org.checkerframework.checker.nullness.qual.Nullable; + +import java.util.ArrayList; +import java.util.List; + +public class ContainsValidator implements KeywordValidator { + public final Class contains; + + public ItemsValidator(Class contains) { + this.contains = contains; + } + + @Override + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { + if (!(arg instanceof List)) { + return null; + } + many_path_to_schemas = contains_cls_path_to_schemas[1] + if (containsPathToSchemas.isEmpty()) { + throw new ApiValueError( + "Validation failed for contains keyword in class={} at pathToItem={}. No " + "items validated to the contains schema.".format(cls, validation_metadata.path_to_item) + ) + } + PathToSchemasMap pathToSchemas = new PathToSchemasMap(); + for (PathToSchemasMap otherPathToSchema: containsPathToSchemas) { + pathToSchemas.update(other_path_to_schema) + } + return pathToSchemas; + } + + public List getContainsPathToSchemas( + @Nullable Object arg, + ValidationMetadata validation_metadata, + PathToSchemasMap path_to_schemas, + ) { + if (!(arg instanceof List)) { + return new ArrayList<>(); + } + List containsPathToSchemas = new ArrayList<>(); + int i = 0; + for(Object itemValue: (List) arg) { + PathToSchemasMap thesePathToSchemas = new PathToSchemasMap(); + List itemPathToItem = new ArrayList<>(validationMetadata.pathToItem()); + itemPathToItem.add(i); + ValidationMetadata itemValidationMetadata = new ValidationMetadata( + itemPathToItem, + validationMetadata.configuration(), + validationMetadata.validatedPathToSchemas(), + validationMetadata.seenClasses() + ); + if (itemValidationMetadata.validationRanEarlier(itemsSchema)) { + // todo add_deeper_validated_schemas + containsPathToSchemas.add(thesePathToSchemas); + i +=1; + continue; + } + + JsonSchema containsSchema = JsonSchemaFactory.getInstance(contains); + try { + PathToSchemasMap otherPathToSchemas = JsonSchema.validate( + containsSchema, itemValue, itemValidationMetadata) + containsPathToSchemas.append(otherPathToSchemas) + } except (exceptions.OpenApiException ignored) { + ; + } + return containsPathToSchemas; + } +} diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/EnumValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/EnumValidator.java index 9ec4f9beb0f..e8fce8b0fb3 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/EnumValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/EnumValidator.java @@ -19,7 +19,12 @@ private boolean enumContainsArg(@Nullable Object arg){ } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (enumValues.isEmpty()) { throw new ValidationException("No value can match enum because enum is empty"); } diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMaximumValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMaximumValidator.java index 6f07d0c46e7..9f6b323fdff 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMaximumValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMaximumValidator.java @@ -12,7 +12,12 @@ public ExclusiveMaximumValidator(Number exclusiveMaximum) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Number)) { return null; } diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMinimumValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMinimumValidator.java index 0bb892d6e54..28c07c30ea8 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMinimumValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMinimumValidator.java @@ -12,7 +12,12 @@ public ExclusiveMinimumValidator(Number exclusiveMinimum) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Number)) { return null; } diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/FormatValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/FormatValidator.java index 2f165da7db2..5a90477d7df 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/FormatValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/FormatValidator.java @@ -143,7 +143,12 @@ private Void validateStringFormat(String arg, ValidationMetadata validationMetad } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (arg instanceof Number) { validateNumericFormat( (Number) arg, diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ItemsValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ItemsValidator.java index 5d3bea9fc56..ea82ab7bd19 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ItemsValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ItemsValidator.java @@ -13,7 +13,12 @@ public ItemsValidator(Class items) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof List)) { return null; } diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/KeywordValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/KeywordValidator.java index 42326a9beb3..70d80c011b7 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/KeywordValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/KeywordValidator.java @@ -5,7 +5,9 @@ public interface KeywordValidator { @Nullable PathToSchemasMap validate( - JsonSchema schema, - @Nullable Object arg, - ValidationMetadata validationMetadata) throws ValidationException; + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) throws ValidationException; } \ No newline at end of file diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxItemsValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxItemsValidator.java index bc0e7a66932..05a3c83b919 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxItemsValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxItemsValidator.java @@ -13,7 +13,12 @@ public MaxItemsValidator(int maxItems) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof List)) { return null; } diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxLengthValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxLengthValidator.java index 98986589f7b..0e30ab1c5f7 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxLengthValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxLengthValidator.java @@ -11,7 +11,12 @@ public MaxLengthValidator(int maxLength) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof String)) { return null; } diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxPropertiesValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxPropertiesValidator.java index 985cc631a12..51c048442fa 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxPropertiesValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxPropertiesValidator.java @@ -13,7 +13,12 @@ public MaxPropertiesValidator(int maxProperties) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Map)) { return null; } diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaximumValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaximumValidator.java index 77568666978..ffc31ea7e5a 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaximumValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaximumValidator.java @@ -12,7 +12,12 @@ public MaximumValidator(Number maximum) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Number)) { return null; } diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinItemsValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinItemsValidator.java index a9748b11707..6aa2bfa7161 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinItemsValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinItemsValidator.java @@ -13,7 +13,12 @@ public MinItemsValidator(int minItems) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof List)) { return null; } diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinLengthValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinLengthValidator.java index 2d23fc896c0..a7d21ad6ee5 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinLengthValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinLengthValidator.java @@ -11,7 +11,12 @@ public MinLengthValidator(int minLength) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof String)) { return null; } diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinPropertiesValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinPropertiesValidator.java index 8801e1872ef..365163631b5 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinPropertiesValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinPropertiesValidator.java @@ -13,7 +13,12 @@ public MinPropertiesValidator(int minProperties) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Map)) { return null; } diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinimumValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinimumValidator.java index f8e9b86e1d3..98f4adf304b 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinimumValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinimumValidator.java @@ -12,7 +12,12 @@ public MinimumValidator(Number minimum) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Number)) { return null; } diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MultipleOfValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MultipleOfValidator.java index 1e5342777d4..64e7fe2ee4c 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MultipleOfValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MultipleOfValidator.java @@ -13,7 +13,12 @@ public MultipleOfValidator(BigDecimal multipleOf) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Number)) { return null; } diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/NotValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/NotValidator.java index 34410cf0de0..caafdf59470 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/NotValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/NotValidator.java @@ -18,7 +18,12 @@ public NotValidator(Class not) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { PathToSchemasMap pathToSchemas; try { JsonSchema notSchema = JsonSchemaFactory.getInstance(not); diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/OneOfValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/OneOfValidator.java index 5d33ed1fefb..5206c597b6a 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/OneOfValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/OneOfValidator.java @@ -14,7 +14,12 @@ public OneOfValidator(List> oneOf) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { PathToSchemasMap pathToSchemas = new PathToSchemasMap(); List> validatedOneOfClasses = new ArrayList<>(); for(Class oneOfClass: oneOf) { diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/PatternValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/PatternValidator.java index a16b14f73d3..1efe2ecd3ac 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/PatternValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/PatternValidator.java @@ -13,7 +13,12 @@ public PatternValidator(Pattern pattern) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof String)) { return null; } diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/PropertiesValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/PropertiesValidator.java index ebfe8487bc8..1b8faefd80a 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/PropertiesValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/PropertiesValidator.java @@ -16,7 +16,12 @@ public PropertiesValidator(Map> properties) } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Map mapArg)) { return null; } diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/RequiredValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/RequiredValidator.java index 6f625049000..660f88ac893 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/RequiredValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/RequiredValidator.java @@ -16,7 +16,12 @@ public RequiredValidator(Set required) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Map)) { return null; } diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/TypeValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/TypeValidator.java index a3028cae2db..266c77f4f46 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/TypeValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/TypeValidator.java @@ -15,7 +15,12 @@ public TypeValidator(Set> type) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { Class argClass; if (arg == null) { argClass = Void.class; diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/UniqueItemsValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/UniqueItemsValidator.java index 8b443cc9b29..58376c9b7f2 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/UniqueItemsValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/UniqueItemsValidator.java @@ -15,7 +15,12 @@ public UniqueItemsValidator(boolean uniqueItems) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof List)) { return null; } diff --git a/src/main/java/org/openapijsonschematools/codegen/generators/JavaClientGenerator.java b/src/main/java/org/openapijsonschematools/codegen/generators/JavaClientGenerator.java index 8e8dce081af..b94d3812395 100644 --- a/src/main/java/org/openapijsonschematools/codegen/generators/JavaClientGenerator.java +++ b/src/main/java/org/openapijsonschematools/codegen/generators/JavaClientGenerator.java @@ -567,6 +567,7 @@ public void processOpts() { keywordValidatorFiles.add("BooleanSchemaValidator"); keywordValidatorFiles.add("BooleanValueMethod"); keywordValidatorFiles.add("ConstValidator"); + keywordValidatorFiles.add("ContainsValidator"); keywordValidatorFiles.add("BigDecimalValidator"); keywordValidatorFiles.add("CustomIsoparser"); keywordValidatorFiles.add("DefaultValueMethod"); @@ -575,7 +576,6 @@ public void processOpts() { keywordValidatorFiles.add("EnumValidator"); keywordValidatorFiles.add("ExclusiveMaximumValidator"); keywordValidatorFiles.add("ExclusiveMinimumValidator"); - keywordValidatorFiles.add("FakeValidator"); keywordValidatorFiles.add("FloatEnumValidator"); keywordValidatorFiles.add("FloatValueMethod"); keywordValidatorFiles.add("FormatValidator"); diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/AdditionalPropertiesValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/AdditionalPropertiesValidator.hbs index fb251d07c73..057da5b50c0 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/AdditionalPropertiesValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/AdditionalPropertiesValidator.hbs @@ -15,7 +15,12 @@ public class AdditionalPropertiesValidator implements KeywordValidator { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Map mapArg)) { return null; } diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/AllOfValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/AllOfValidator.hbs index 1265988112d..616d68dc400 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/AllOfValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/AllOfValidator.hbs @@ -11,7 +11,12 @@ public class AllOfValidator implements KeywordValidator { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { PathToSchemasMap pathToSchemas = new PathToSchemasMap(); for(Class allOfClass: allOf) { JsonSchema allOfSchema = JsonSchemaFactory.getInstance(allOfClass); diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/AnyOfValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/AnyOfValidator.hbs index 34cfb02095e..fd1db3b2a31 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/AnyOfValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/AnyOfValidator.hbs @@ -14,7 +14,12 @@ public class AnyOfValidator implements KeywordValidator { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { PathToSchemasMap pathToSchemas = new PathToSchemasMap(); List> validatedAnyOfClasses = new ArrayList<>(); for(Class anyOfClass: anyOf) { diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/ConstValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/ConstValidator.hbs index 69aacc918fe..5f643cbfa6f 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/ConstValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/ConstValidator.hbs @@ -14,7 +14,12 @@ public class ConstValidator extends BigDecimalValidator implements KeywordValida } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (arg instanceof Number) { BigDecimal castArg = getBigDecimal((Number) arg); if (Objects.equals(castArg, constValue)) { diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/ContainsValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/ContainsValidator.hbs index 217fd28be54..d80ef152760 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/ContainsValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/ContainsValidator.hbs @@ -13,37 +13,31 @@ public class ContainsValidator implements KeywordValidator { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof List)) { return null; } + many_path_to_schemas = contains_cls_path_to_schemas[1] + if (containsPathToSchemas.isEmpty()) { + throw new ApiValueError( + "Validation failed for contains keyword in class={} at pathToItem={}. No " + "items validated to the contains schema.".format(cls, validation_metadata.path_to_item) + ) + } PathToSchemasMap pathToSchemas = new PathToSchemasMap(); - // todo add handling for prefixItems - int i = 0; - for(Object itemValue: (List) arg) { - List itemPathToItem = new ArrayList<>(validationMetadata.pathToItem()); - itemPathToItem.add(i); - ValidationMetadata itemValidationMetadata = new ValidationMetadata( - itemPathToItem, - validationMetadata.configuration(), - validationMetadata.validatedPathToSchemas(), - validationMetadata.seenClasses() - ); - JsonSchema itemsSchema = JsonSchemaFactory.getInstance(items); - if (itemValidationMetadata.validationRanEarlier(itemsSchema)) { - // todo add_deeper_validated_schemas - i +=1; - continue; - } - PathToSchemasMap otherPathToSchemas = JsonSchema.validate(itemsSchema, itemValue, itemValidationMetadata); - pathToSchemas.update(otherPathToSchemas); - i += 1; + for (PathToSchemasMap otherPathToSchema: containsPathToSchemas) { + pathToSchemas.update(other_path_to_schema) } return pathToSchemas; } public List getContainsPathToSchemas( - arg: typing.Any, + @Nullable Object arg, ValidationMetadata validation_metadata, PathToSchemasMap path_to_schemas, ) { @@ -54,7 +48,6 @@ public class ContainsValidator implements KeywordValidator { int i = 0; for(Object itemValue: (List) arg) { PathToSchemasMap thesePathToSchemas = new PathToSchemasMap(); - List itemPathToItem = new ArrayList<>(validationMetadata.pathToItem()); itemPathToItem.add(i); ValidationMetadata itemValidationMetadata = new ValidationMetadata( diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/EnumValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/EnumValidator.hbs index 2a35ef9e5fe..8aa3f118ac7 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/EnumValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/EnumValidator.hbs @@ -19,7 +19,12 @@ public class EnumValidator extends BigDecimalValidator implements KeywordValidat } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (enumValues.isEmpty()) { throw new ValidationException("No value can match enum because enum is empty"); } diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/ExclusiveMaximumValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/ExclusiveMaximumValidator.hbs index 3e22c7284a6..aafdb0afc93 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/ExclusiveMaximumValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/ExclusiveMaximumValidator.hbs @@ -12,7 +12,12 @@ public class ExclusiveMaximumValidator implements KeywordValidator { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Number)) { return null; } diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/ExclusiveMinimumValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/ExclusiveMinimumValidator.hbs index aed9d726981..0232486e4e3 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/ExclusiveMinimumValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/ExclusiveMinimumValidator.hbs @@ -12,7 +12,12 @@ public class ExclusiveMinimumValidator implements KeywordValidator { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Number)) { return null; } diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/FakeValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/FakeValidator.hbs deleted file mode 100644 index 2418e8a3552..00000000000 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/FakeValidator.hbs +++ /dev/null @@ -1,10 +0,0 @@ -package {{{packageName}}}.schemas.validation; - -import org.checkerframework.checker.nullness.qual.Nullable; - -public class FakeValidator implements KeywordValidator { - @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { - return null; - } -} diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/FormatValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/FormatValidator.hbs index 315235efcc1..5dec4a39b03 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/FormatValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/FormatValidator.hbs @@ -143,7 +143,12 @@ public class FormatValidator implements KeywordValidator { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (arg instanceof Number) { validateNumericFormat( (Number) arg, diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/ItemsValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/ItemsValidator.hbs index 8ca2f6b7834..362f29e214c 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/ItemsValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/ItemsValidator.hbs @@ -13,7 +13,12 @@ public class ItemsValidator implements KeywordValidator { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof List)) { return null; } diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/KeywordValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/KeywordValidator.hbs index 4c7352bc3ab..4944cc3abc0 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/KeywordValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/KeywordValidator.hbs @@ -5,7 +5,9 @@ import org.checkerframework.checker.nullness.qual.Nullable; public interface KeywordValidator { @Nullable PathToSchemasMap validate( - JsonSchema schema, - @Nullable Object arg, - ValidationMetadata validationMetadata) throws ValidationException; + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) throws ValidationException; } \ No newline at end of file diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/MaxItemsValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/MaxItemsValidator.hbs index ed08a4e64f7..ab22403dab2 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/MaxItemsValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/MaxItemsValidator.hbs @@ -13,7 +13,12 @@ public class MaxItemsValidator implements KeywordValidator { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof List)) { return null; } diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/MaxLengthValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/MaxLengthValidator.hbs index 22d2ad9dc0e..f4050f39df4 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/MaxLengthValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/MaxLengthValidator.hbs @@ -11,7 +11,12 @@ public class MaxLengthValidator extends LengthValidator implements KeywordValida } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof String)) { return null; } diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/MaxPropertiesValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/MaxPropertiesValidator.hbs index 2ada73c7893..de0b53d0337 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/MaxPropertiesValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/MaxPropertiesValidator.hbs @@ -13,7 +13,12 @@ public class MaxPropertiesValidator implements KeywordValidator { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Map)) { return null; } diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/MaximumValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/MaximumValidator.hbs index 7730c282c3e..8c86115a8da 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/MaximumValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/MaximumValidator.hbs @@ -12,7 +12,12 @@ public class MaximumValidator implements KeywordValidator { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Number)) { return null; } diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/MinItemsValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/MinItemsValidator.hbs index 90e247bd943..8d9d4bf8084 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/MinItemsValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/MinItemsValidator.hbs @@ -13,7 +13,12 @@ public class MinItemsValidator implements KeywordValidator { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof List)) { return null; } diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/MinLengthValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/MinLengthValidator.hbs index 8197813a52a..8282c1ae04a 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/MinLengthValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/MinLengthValidator.hbs @@ -11,7 +11,12 @@ public class MinLengthValidator extends LengthValidator implements KeywordValida } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof String)) { return null; } diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/MinPropertiesValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/MinPropertiesValidator.hbs index f8d63210f8d..e7797347e4e 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/MinPropertiesValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/MinPropertiesValidator.hbs @@ -13,7 +13,12 @@ public class MinPropertiesValidator implements KeywordValidator { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Map)) { return null; } diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/MinimumValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/MinimumValidator.hbs index 0153a3b9cff..f0a975802e3 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/MinimumValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/MinimumValidator.hbs @@ -12,7 +12,12 @@ public class MinimumValidator implements KeywordValidator { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Number)) { return null; } diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/MultipleOfValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/MultipleOfValidator.hbs index 08818f0a625..842975465e3 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/MultipleOfValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/MultipleOfValidator.hbs @@ -13,7 +13,12 @@ public class MultipleOfValidator extends BigDecimalValidator implements KeywordV } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Number)) { return null; } diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/NotValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/NotValidator.hbs index 5eb143982a7..933e215680d 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/NotValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/NotValidator.hbs @@ -18,7 +18,12 @@ public class NotValidator implements KeywordValidator { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { PathToSchemasMap pathToSchemas; try { JsonSchema notSchema = JsonSchemaFactory.getInstance(not); diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/OneOfValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/OneOfValidator.hbs index f2d71311cb9..4d5a7ffd0ab 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/OneOfValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/OneOfValidator.hbs @@ -14,7 +14,12 @@ public class OneOfValidator implements KeywordValidator { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { PathToSchemasMap pathToSchemas = new PathToSchemasMap(); List> validatedOneOfClasses = new ArrayList<>(); for(Class oneOfClass: oneOf) { diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/PatternValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/PatternValidator.hbs index 6f4bd5053c1..bffad85b160 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/PatternValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/PatternValidator.hbs @@ -13,7 +13,12 @@ public class PatternValidator implements KeywordValidator { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof String)) { return null; } diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/PropertiesValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/PropertiesValidator.hbs index 065c3c30eb1..48f26a579e2 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/PropertiesValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/PropertiesValidator.hbs @@ -16,7 +16,12 @@ public class PropertiesValidator implements KeywordValidator { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Map mapArg)) { return null; } diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/RequiredValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/RequiredValidator.hbs index 7c9a0b72b16..3c6cdf9ff88 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/RequiredValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/RequiredValidator.hbs @@ -16,7 +16,12 @@ public class RequiredValidator implements KeywordValidator { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Map)) { return null; } diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/TypeValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/TypeValidator.hbs index 3fc3dd6717b..2ad5acc9ef3 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/TypeValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/TypeValidator.hbs @@ -15,7 +15,12 @@ public class TypeValidator implements KeywordValidator { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { Class argClass; if (arg == null) { argClass = Void.class; diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/UniqueItemsValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/UniqueItemsValidator.hbs index e556a59f816..146f6352caf 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/UniqueItemsValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/UniqueItemsValidator.hbs @@ -15,7 +15,12 @@ public class UniqueItemsValidator implements KeywordValidator { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof List)) { return null; } From 5405d01f5ec87652f20b800f489ab7dcc6791e17 Mon Sep 17 00:00:00 2001 From: Justin Black Date: Thu, 11 Jan 2024 11:02:42 -0800 Subject: [PATCH 3/8] Fixes 303 java unit tests --- .../java/.openapi-generator/FILES | 2 +- .../AdditionalPropertiesValidator.java | 7 +- .../schemas/validation/AllOfValidator.java | 7 +- .../schemas/validation/AnyOfValidator.java | 7 +- .../schemas/validation/ConstValidator.java | 8 +- .../schemas/validation/ContainsValidator.java | 77 +++++++++++++++++ .../schemas/validation/EnumValidator.java | 8 +- .../validation/ExclusiveMaximumValidator.java | 8 +- .../validation/ExclusiveMinimumValidator.java | 8 +- .../schemas/validation/FakeValidator.java | 10 --- .../schemas/validation/FormatValidator.java | 8 +- .../schemas/validation/ItemsValidator.java | 7 +- .../client/schemas/validation/JsonSchema.java | 8 +- .../schemas/validation/KeywordValidator.java | 18 +++- .../schemas/validation/MaxItemsValidator.java | 7 +- .../validation/MaxLengthValidator.java | 9 +- .../validation/MaxPropertiesValidator.java | 8 +- .../schemas/validation/MaximumValidator.java | 8 +- .../schemas/validation/MinItemsValidator.java | 7 +- .../validation/MinLengthValidator.java | 9 +- .../validation/MinPropertiesValidator.java | 8 +- .../schemas/validation/MinimumValidator.java | 8 +- .../validation/MultipleOfValidator.java | 8 +- .../schemas/validation/NotValidator.java | 7 +- .../schemas/validation/OneOfValidator.java | 7 +- .../schemas/validation/PatternValidator.java | 8 +- .../validation/PropertiesValidator.java | 7 +- .../schemas/validation/RequiredValidator.java | 7 +- .../schemas/validation/TypeValidator.java | 7 +- .../validation/UniqueItemsValidator.java | 7 +- .../AdditionalPropertiesValidatorTest.java | 9 +- .../validation/FormatValidatorTest.java | 83 ++++++++++++------- .../validation/ItemsValidatorTest.java | 12 +-- .../schemas/validation/JsonSchemaTest.java | 1 - .../validation/PropertiesValidatorTest.java | 14 ++-- .../validation/RequiredValidatorTest.java | 12 +-- .../schemas/validation/TypeValidatorTest.java | 11 +-- .../schemas/validation/ContainsValidator.java | 3 +- .../client/schemas/validation/JsonSchema.java | 8 +- .../schemas/validation/KeywordValidator.java | 10 +++ .../schemas/validation/ConstValidator.hbs | 1 + .../schemas/validation/ContainsValidator.hbs | 33 ++++---- .../schemas/validation/EnumValidator.hbs | 1 + .../validation/ExclusiveMaximumValidator.hbs | 1 + .../validation/ExclusiveMinimumValidator.hbs | 1 + .../schemas/validation/FormatValidator.hbs | 1 + .../schemas/validation/JsonSchema.hbs | 8 +- .../schemas/validation/KeywordValidator.hbs | 10 +++ .../schemas/validation/MaxLengthValidator.hbs | 2 + .../validation/MaxPropertiesValidator.hbs | 1 + .../schemas/validation/MaximumValidator.hbs | 1 + .../schemas/validation/MinLengthValidator.hbs | 2 + .../validation/MinPropertiesValidator.hbs | 1 + .../schemas/validation/MinimumValidator.hbs | 1 + .../validation/MultipleOfValidator.hbs | 1 + .../schemas/validation/PatternValidator.hbs | 1 + .../AdditionalPropertiesValidatorTest.hbs | 9 +- .../validation/FormatValidatorTest.hbs | 83 ++++++++++++------- .../schemas/validation/ItemsValidatorTest.hbs | 12 +-- .../schemas/validation/JsonSchemaTest.hbs | 1 - .../validation/PropertiesValidatorTest.hbs | 14 ++-- .../validation/RequiredValidatorTest.hbs | 12 +-- .../schemas/validation/TypeValidatorTest.hbs | 11 +-- 63 files changed, 508 insertions(+), 168 deletions(-) create mode 100644 samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ContainsValidator.java delete mode 100644 samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/FakeValidator.java diff --git a/samples/client/3_0_3_unit_test/java/.openapi-generator/FILES b/samples/client/3_0_3_unit_test/java/.openapi-generator/FILES index 005c05dacb3..6c89a46b018 100644 --- a/samples/client/3_0_3_unit_test/java/.openapi-generator/FILES +++ b/samples/client/3_0_3_unit_test/java/.openapi-generator/FILES @@ -210,6 +210,7 @@ src/main/java/org/openapijsonschematools/client/schemas/validation/BooleanEnumVa src/main/java/org/openapijsonschematools/client/schemas/validation/BooleanSchemaValidator.java src/main/java/org/openapijsonschematools/client/schemas/validation/BooleanValueMethod.java src/main/java/org/openapijsonschematools/client/schemas/validation/ConstValidator.java +src/main/java/org/openapijsonschematools/client/schemas/validation/ContainsValidator.java src/main/java/org/openapijsonschematools/client/schemas/validation/CustomIsoparser.java src/main/java/org/openapijsonschematools/client/schemas/validation/DefaultValueMethod.java src/main/java/org/openapijsonschematools/client/schemas/validation/DoubleEnumValidator.java @@ -217,7 +218,6 @@ src/main/java/org/openapijsonschematools/client/schemas/validation/DoubleValueMe src/main/java/org/openapijsonschematools/client/schemas/validation/EnumValidator.java src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMaximumValidator.java src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMinimumValidator.java -src/main/java/org/openapijsonschematools/client/schemas/validation/FakeValidator.java src/main/java/org/openapijsonschematools/client/schemas/validation/FloatEnumValidator.java src/main/java/org/openapijsonschematools/client/schemas/validation/FloatValueMethod.java src/main/java/org/openapijsonschematools/client/schemas/validation/FormatValidator.java diff --git a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AdditionalPropertiesValidator.java b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AdditionalPropertiesValidator.java index 5a5a6cfc917..dc36864089b 100644 --- a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AdditionalPropertiesValidator.java +++ b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AdditionalPropertiesValidator.java @@ -15,7 +15,12 @@ public AdditionalPropertiesValidator(Class additionalPrope } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Map mapArg)) { return null; } diff --git a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AllOfValidator.java b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AllOfValidator.java index 7b392d027a7..02aecb3dbf2 100644 --- a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AllOfValidator.java +++ b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AllOfValidator.java @@ -11,7 +11,12 @@ public AllOfValidator(List> allOf) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { PathToSchemasMap pathToSchemas = new PathToSchemasMap(); for(Class allOfClass: allOf) { JsonSchema allOfSchema = JsonSchemaFactory.getInstance(allOfClass); diff --git a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AnyOfValidator.java b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AnyOfValidator.java index 53d61e878b2..e978af7ee5f 100644 --- a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AnyOfValidator.java +++ b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AnyOfValidator.java @@ -14,7 +14,12 @@ public AnyOfValidator(List> anyOf) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { PathToSchemasMap pathToSchemas = new PathToSchemasMap(); List> validatedAnyOfClasses = new ArrayList<>(); for(Class anyOfClass: anyOf) { diff --git a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ConstValidator.java b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ConstValidator.java index cb863f215ad..e2fd692dde0 100644 --- a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ConstValidator.java +++ b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ConstValidator.java @@ -4,6 +4,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; import java.math.BigDecimal; +import java.util.List; import java.util.Objects; public class ConstValidator extends BigDecimalValidator implements KeywordValidator { @@ -14,7 +15,12 @@ public ConstValidator(@Nullable Object constValue) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (arg instanceof Number) { BigDecimal castArg = getBigDecimal((Number) arg); if (Objects.equals(castArg, constValue)) { diff --git a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ContainsValidator.java b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ContainsValidator.java new file mode 100644 index 00000000000..a2bca9506ad --- /dev/null +++ b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ContainsValidator.java @@ -0,0 +1,77 @@ +package org.openapijsonschematools.client.schemas.validation; + +import org.checkerframework.checker.nullness.qual.Nullable; +import org.openapijsonschematools.client.exceptions.ValidationException; + +import java.util.ArrayList; +import java.util.List; + +public class ContainsValidator implements KeywordValidator { + public final Class contains; + + public ContainsValidator(Class contains) { + this.contains = contains; + } + + @Override + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { + if (!(arg instanceof List)) { + return null; + } + if (containsPathToSchemas.isEmpty()) { + throw new ValidationException( + "Validation failed for contains keyword in class="+schema.getClass() + + " at pathToItem="+validationMetadata.pathToItem()+". No " + + "items validated to the contains schema." + ); + } + PathToSchemasMap pathToSchemas = new PathToSchemasMap(); + for (PathToSchemasMap otherPathToSchema: containsPathToSchemas) { + pathToSchemas.update(otherPathToSchema); + } + return pathToSchemas; + } + + public List getContainsPathToSchemas( + @Nullable Object arg, + ValidationMetadata validationMetadata + ) { + if (!(arg instanceof List)) { + return new ArrayList<>(); + } + List containsPathToSchemas = new ArrayList<>(); + int i = 0; + for(Object itemValue: (List) arg) { + PathToSchemasMap thesePathToSchemas = new PathToSchemasMap(); + List itemPathToItem = new ArrayList<>(validationMetadata.pathToItem()); + itemPathToItem.add(i); + ValidationMetadata itemValidationMetadata = new ValidationMetadata( + itemPathToItem, + validationMetadata.configuration(), + validationMetadata.validatedPathToSchemas(), + validationMetadata.seenClasses() + ); + JsonSchema containsSchema = JsonSchemaFactory.getInstance(contains); + if (itemValidationMetadata.validationRanEarlier(containsSchema)) { + // todo add_deeper_validated_schemas + containsPathToSchemas.add(thesePathToSchemas); + i += 1; + continue; + } + + try { + PathToSchemasMap otherPathToSchemas = JsonSchema.validate( + containsSchema, itemValue, itemValidationMetadata); + containsPathToSchemas.add(otherPathToSchemas); + } catch (ValidationException ignored) { + ; + } + } + return containsPathToSchemas; + } +} \ No newline at end of file diff --git a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/EnumValidator.java b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/EnumValidator.java index 9ec4f9beb0f..7f448bb4afa 100644 --- a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/EnumValidator.java +++ b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/EnumValidator.java @@ -4,6 +4,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; import java.math.BigDecimal; +import java.util.List; import java.util.Set; public class EnumValidator extends BigDecimalValidator implements KeywordValidator { @@ -19,7 +20,12 @@ private boolean enumContainsArg(@Nullable Object arg){ } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (enumValues.isEmpty()) { throw new ValidationException("No value can match enum because enum is empty"); } diff --git a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMaximumValidator.java b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMaximumValidator.java index 6f07d0c46e7..e4e7d58d6a0 100644 --- a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMaximumValidator.java +++ b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMaximumValidator.java @@ -3,6 +3,7 @@ import org.openapijsonschematools.client.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; public class ExclusiveMaximumValidator implements KeywordValidator { public final Number exclusiveMaximum; @@ -12,7 +13,12 @@ public ExclusiveMaximumValidator(Number exclusiveMaximum) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Number)) { return null; } diff --git a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMinimumValidator.java b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMinimumValidator.java index 0bb892d6e54..56fe9360e21 100644 --- a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMinimumValidator.java +++ b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMinimumValidator.java @@ -3,6 +3,7 @@ import org.openapijsonschematools.client.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; public class ExclusiveMinimumValidator implements KeywordValidator { public final Number exclusiveMinimum; @@ -12,7 +13,12 @@ public ExclusiveMinimumValidator(Number exclusiveMinimum) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Number)) { return null; } diff --git a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/FakeValidator.java b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/FakeValidator.java deleted file mode 100644 index db5ec573081..00000000000 --- a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/FakeValidator.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.openapijsonschematools.client.schemas.validation; - -import org.checkerframework.checker.nullness.qual.Nullable; - -public class FakeValidator implements KeywordValidator { - @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { - return null; - } -} diff --git a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/FormatValidator.java b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/FormatValidator.java index 2f165da7db2..8753e693df5 100644 --- a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/FormatValidator.java +++ b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/FormatValidator.java @@ -6,6 +6,7 @@ import java.math.BigDecimal; import java.math.BigInteger; import java.time.format.DateTimeParseException; +import java.util.List; import java.util.UUID; public class FormatValidator implements KeywordValidator { @@ -143,7 +144,12 @@ private Void validateStringFormat(String arg, ValidationMetadata validationMetad } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (arg instanceof Number) { validateNumericFormat( (Number) arg, diff --git a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ItemsValidator.java b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ItemsValidator.java index 5d3bea9fc56..ea82ab7bd19 100644 --- a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ItemsValidator.java +++ b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ItemsValidator.java @@ -13,7 +13,12 @@ public ItemsValidator(Class items) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof List)) { return null; } diff --git a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchema.java b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchema.java index 94dcbf21106..a63aaa4f191 100644 --- a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchema.java +++ b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchema.java @@ -242,6 +242,11 @@ public static PathToSchemasMap validate( LinkedHashSet disabledKeywords = validationMetadata.configuration().disabledKeywordFlags().getKeywords(); PathToSchemasMap pathToSchemas = new PathToSchemasMap(); LinkedHashMap thisKeywordToValidator = jsonSchema.keywordToValidator; + List containsPathToSchemas = new ArrayList<>(); + KeywordValidator containsValidator = thisKeywordToValidator.get("contains"); + if (containsValidator != null) { + containsPathToSchemas = containsValidator.getContainsPathToSchemas(arg, validationMetadata); + } for (Map.Entry entry: thisKeywordToValidator.entrySet()) { String jsonKeyword = entry.getKey(); if (disabledKeywords.contains(jsonKeyword)) { @@ -254,7 +259,8 @@ public static PathToSchemasMap validate( @Nullable PathToSchemasMap otherPathToSchemas = validator.validate( jsonSchema, arg, - validationMetadata + validationMetadata, + containsPathToSchemas ); if (otherPathToSchemas == null) { continue; diff --git a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/KeywordValidator.java b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/KeywordValidator.java index 42326a9beb3..896c8b52b35 100644 --- a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/KeywordValidator.java +++ b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/KeywordValidator.java @@ -3,9 +3,21 @@ import org.openapijsonschematools.client.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.ArrayList; +import java.util.List; + public interface KeywordValidator { @Nullable PathToSchemasMap validate( - JsonSchema schema, - @Nullable Object arg, - ValidationMetadata validationMetadata) throws ValidationException; + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) throws ValidationException; + + default List getContainsPathToSchemas( + @Nullable Object arg, + ValidationMetadata validationMetadata + ) { + return new ArrayList<>(); + } } \ No newline at end of file diff --git a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxItemsValidator.java b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxItemsValidator.java index bc0e7a66932..05a3c83b919 100644 --- a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxItemsValidator.java +++ b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxItemsValidator.java @@ -13,7 +13,12 @@ public MaxItemsValidator(int maxItems) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof List)) { return null; } diff --git a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxLengthValidator.java b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxLengthValidator.java index 98986589f7b..ff8b68eb3c6 100644 --- a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxLengthValidator.java +++ b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxLengthValidator.java @@ -3,6 +3,8 @@ import org.openapijsonschematools.client.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; + public class MaxLengthValidator extends LengthValidator implements KeywordValidator { public final int maxLength; @@ -11,7 +13,12 @@ public MaxLengthValidator(int maxLength) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof String)) { return null; } diff --git a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxPropertiesValidator.java b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxPropertiesValidator.java index 985cc631a12..1bff35c458c 100644 --- a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxPropertiesValidator.java +++ b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxPropertiesValidator.java @@ -3,6 +3,7 @@ import org.openapijsonschematools.client.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; import java.util.Map; public class MaxPropertiesValidator implements KeywordValidator { @@ -13,7 +14,12 @@ public MaxPropertiesValidator(int maxProperties) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Map)) { return null; } diff --git a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaximumValidator.java b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaximumValidator.java index 77568666978..023f09353c6 100644 --- a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaximumValidator.java +++ b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaximumValidator.java @@ -3,6 +3,7 @@ import org.openapijsonschematools.client.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; public class MaximumValidator implements KeywordValidator { public final Number maximum; @@ -12,7 +13,12 @@ public MaximumValidator(Number maximum) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Number)) { return null; } diff --git a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinItemsValidator.java b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinItemsValidator.java index a9748b11707..6aa2bfa7161 100644 --- a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinItemsValidator.java +++ b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinItemsValidator.java @@ -13,7 +13,12 @@ public MinItemsValidator(int minItems) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof List)) { return null; } diff --git a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinLengthValidator.java b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinLengthValidator.java index 2d23fc896c0..35bcd82cc60 100644 --- a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinLengthValidator.java +++ b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinLengthValidator.java @@ -3,6 +3,8 @@ import org.openapijsonschematools.client.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; + public class MinLengthValidator extends LengthValidator implements KeywordValidator { public final int minLength; @@ -11,7 +13,12 @@ public MinLengthValidator(int minLength) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof String)) { return null; } diff --git a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinPropertiesValidator.java b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinPropertiesValidator.java index 8801e1872ef..247b730b5a6 100644 --- a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinPropertiesValidator.java +++ b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinPropertiesValidator.java @@ -3,6 +3,7 @@ import org.openapijsonschematools.client.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; import java.util.Map; public class MinPropertiesValidator implements KeywordValidator { @@ -13,7 +14,12 @@ public MinPropertiesValidator(int minProperties) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Map)) { return null; } diff --git a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinimumValidator.java b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinimumValidator.java index f8e9b86e1d3..e8fd4f74954 100644 --- a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinimumValidator.java +++ b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinimumValidator.java @@ -3,6 +3,7 @@ import org.openapijsonschematools.client.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; public class MinimumValidator implements KeywordValidator { public final Number minimum; @@ -12,7 +13,12 @@ public MinimumValidator(Number minimum) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Number)) { return null; } diff --git a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MultipleOfValidator.java b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MultipleOfValidator.java index 1e5342777d4..be7ae76af99 100644 --- a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MultipleOfValidator.java +++ b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MultipleOfValidator.java @@ -3,6 +3,7 @@ import org.openapijsonschematools.client.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; import java.math.BigDecimal; public class MultipleOfValidator extends BigDecimalValidator implements KeywordValidator { @@ -13,7 +14,12 @@ public MultipleOfValidator(BigDecimal multipleOf) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Number)) { return null; } diff --git a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/NotValidator.java b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/NotValidator.java index 34410cf0de0..caafdf59470 100644 --- a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/NotValidator.java +++ b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/NotValidator.java @@ -18,7 +18,12 @@ public NotValidator(Class not) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { PathToSchemasMap pathToSchemas; try { JsonSchema notSchema = JsonSchemaFactory.getInstance(not); diff --git a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/OneOfValidator.java b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/OneOfValidator.java index 5d33ed1fefb..5206c597b6a 100644 --- a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/OneOfValidator.java +++ b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/OneOfValidator.java @@ -14,7 +14,12 @@ public OneOfValidator(List> oneOf) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { PathToSchemasMap pathToSchemas = new PathToSchemasMap(); List> validatedOneOfClasses = new ArrayList<>(); for(Class oneOfClass: oneOf) { diff --git a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/PatternValidator.java b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/PatternValidator.java index a16b14f73d3..9e28025ae9a 100644 --- a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/PatternValidator.java +++ b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/PatternValidator.java @@ -3,6 +3,7 @@ import org.openapijsonschematools.client.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; import java.util.regex.Pattern; public class PatternValidator implements KeywordValidator { @@ -13,7 +14,12 @@ public PatternValidator(Pattern pattern) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof String)) { return null; } diff --git a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/PropertiesValidator.java b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/PropertiesValidator.java index ebfe8487bc8..1b8faefd80a 100644 --- a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/PropertiesValidator.java +++ b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/PropertiesValidator.java @@ -16,7 +16,12 @@ public PropertiesValidator(Map> properties) } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Map mapArg)) { return null; } diff --git a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/RequiredValidator.java b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/RequiredValidator.java index 6f625049000..660f88ac893 100644 --- a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/RequiredValidator.java +++ b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/RequiredValidator.java @@ -16,7 +16,12 @@ public RequiredValidator(Set required) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Map)) { return null; } diff --git a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/TypeValidator.java b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/TypeValidator.java index a3028cae2db..266c77f4f46 100644 --- a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/TypeValidator.java +++ b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/TypeValidator.java @@ -15,7 +15,12 @@ public TypeValidator(Set> type) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { Class argClass; if (arg == null) { argClass = Void.class; diff --git a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/UniqueItemsValidator.java b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/UniqueItemsValidator.java index 8b443cc9b29..58376c9b7f2 100644 --- a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/UniqueItemsValidator.java +++ b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/UniqueItemsValidator.java @@ -15,7 +15,12 @@ public UniqueItemsValidator(boolean uniqueItems) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof List)) { return null; } diff --git a/samples/client/3_0_3_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/AdditionalPropertiesValidatorTest.java b/samples/client/3_0_3_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/AdditionalPropertiesValidatorTest.java index c638dba8c2d..374665ef028 100644 --- a/samples/client/3_0_3_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/AdditionalPropertiesValidatorTest.java +++ b/samples/client/3_0_3_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/AdditionalPropertiesValidatorTest.java @@ -77,7 +77,8 @@ public void testCorrectPropertySucceeds() { PathToSchemasMap pathToSchemas = validator.validate( ObjectWithPropsSchema.getInstance(), arg, - validationMetadata + validationMetadata, + new ArrayList<>() ); if (pathToSchemas == null) { throw new RuntimeException("Invalid null value for pathToSchemas for this test case"); @@ -106,7 +107,8 @@ public void testNotApplicableTypeReturnsNull() { PathToSchemasMap pathToSchemas = validator.validate( MapJsonSchema.getInstance(), 1, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemas); } @@ -128,7 +130,8 @@ public void testIncorrectPropertyValueFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( ObjectWithPropsSchema.getInstance(), arg, - validationMetadata + validationMetadata, + new ArrayList<>() )); } } \ No newline at end of file diff --git a/samples/client/3_0_3_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/FormatValidatorTest.java b/samples/client/3_0_3_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/FormatValidatorTest.java index 10f07ffc2f9..b584efdf406 100644 --- a/samples/client/3_0_3_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/FormatValidatorTest.java +++ b/samples/client/3_0_3_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/FormatValidatorTest.java @@ -23,9 +23,8 @@ public class FormatValidatorTest { ); @SuppressWarnings("nullness") - private Void assertNull(@Nullable Object object) { + private void assertNull(@Nullable Object object) { Assert.assertNull(object); - return null; } @Test @@ -34,7 +33,8 @@ public void testIntFormatSucceedsWithFloat() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), 1.0f, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -45,7 +45,8 @@ public void testIntFormatFailsWithFloat() { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), 3.14f, - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -55,7 +56,8 @@ public void testIntFormatSucceedsWithInt() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), 1, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -66,7 +68,8 @@ public void testInt32UnderMinFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), -2147483649L, - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -76,7 +79,8 @@ public void testInt32InclusiveMinSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), -2147483648, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -87,7 +91,8 @@ public void testInt32InclusiveMaxSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), 2147483647, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -98,7 +103,8 @@ public void testInt32OverMaxFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), 2147483648L, - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -109,7 +115,8 @@ public void testInt64UnderMinFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), new BigInteger("-9223372036854775809"), - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -119,7 +126,8 @@ public void testInt64InclusiveMinSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), -9223372036854775808L, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -130,7 +138,8 @@ public void testInt64InclusiveMaxSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), 9223372036854775807L, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -142,7 +151,8 @@ public void testInt64OverMaxFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), new BigInteger("9223372036854775808"), - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -152,7 +162,8 @@ public void testFloatUnderMinFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), -3.402823466385289e+38d, - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -162,7 +173,8 @@ public void testFloatInclusiveMinSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), -3.4028234663852886e+38f, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -173,7 +185,8 @@ public void testFloatInclusiveMaxSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), 3.4028234663852886e+38f, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -184,7 +197,8 @@ public void testFloatOverMaxFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), 3.402823466385289e+38d, - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -194,7 +208,8 @@ public void testDoubleUnderMinFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), new BigDecimal("-1.7976931348623157082e+308"), - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -204,7 +219,8 @@ public void testDoubleInclusiveMinSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), -1.7976931348623157E+308d, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -215,7 +231,8 @@ public void testDoubleInclusiveMaxSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), 1.7976931348623157E+308d, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -226,7 +243,8 @@ public void testDoubleOverMaxFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), new BigDecimal("1.7976931348623157082e+308"), - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -236,7 +254,8 @@ public void testInvalidNumberStringFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), "abc", - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -246,7 +265,8 @@ public void testValidFloatNumberStringSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), "3.14", - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -257,7 +277,8 @@ public void testValidIntNumberStringSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), "1", - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -268,7 +289,8 @@ public void testInvalidDateStringFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( StringJsonSchema.getInstance(), "abc", - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -278,7 +300,8 @@ public void testValidDateStringSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( StringJsonSchema.getInstance(), "2017-01-20", - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -289,7 +312,8 @@ public void testInvalidDateTimeStringFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( StringJsonSchema.getInstance(), "abc", - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -299,8 +323,9 @@ public void testValidDateTimeStringSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( StringJsonSchema.getInstance(), "2017-07-21T17:32:28Z", - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } -} +} \ No newline at end of file diff --git a/samples/client/3_0_3_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/ItemsValidatorTest.java b/samples/client/3_0_3_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/ItemsValidatorTest.java index 47d743c595d..84da9687817 100644 --- a/samples/client/3_0_3_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/ItemsValidatorTest.java +++ b/samples/client/3_0_3_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/ItemsValidatorTest.java @@ -16,9 +16,8 @@ public class ItemsValidatorTest { @SuppressWarnings("nullness") - private Void assertNull(@Nullable Object object) { + private void assertNull(@Nullable Object object) { Assert.assertNull(object); - return null; } @Test @@ -37,7 +36,8 @@ public void testCorrectItemsSucceeds() { PathToSchemasMap pathToSchemas = validator.validate( ListJsonSchema.getInstance(), arg, - validationMetadata + validationMetadata, + new ArrayList<>() ); if (pathToSchemas == null) { throw new RuntimeException("Invalid null value in pathToSchemas for this test case"); @@ -66,7 +66,8 @@ public void testNotApplicableTypeReturnsNull() { PathToSchemasMap pathToSchemas = validator.validate( ListJsonSchema.getInstance(), 1, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemas); } @@ -87,7 +88,8 @@ public void testIncorrectItemFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( ListJsonSchema.getInstance(), arg, - validationMetadata + validationMetadata, + new ArrayList<>() )); } } diff --git a/samples/client/3_0_3_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/JsonSchemaTest.java b/samples/client/3_0_3_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/JsonSchemaTest.java index f3a945bb88e..525222b9ad7 100644 --- a/samples/client/3_0_3_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/JsonSchemaTest.java +++ b/samples/client/3_0_3_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/JsonSchemaTest.java @@ -8,7 +8,6 @@ import org.openapijsonschematools.client.exceptions.InvalidTypeException; import org.openapijsonschematools.client.exceptions.ValidationException; -import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; diff --git a/samples/client/3_0_3_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/PropertiesValidatorTest.java b/samples/client/3_0_3_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/PropertiesValidatorTest.java index ec16e124740..8d1d3fc053b 100644 --- a/samples/client/3_0_3_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/PropertiesValidatorTest.java +++ b/samples/client/3_0_3_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/PropertiesValidatorTest.java @@ -17,9 +17,8 @@ public class PropertiesValidatorTest { @SuppressWarnings("nullness") - private Void assertNull(@Nullable Object object) { + private void assertNull(@Nullable Object object) { Assert.assertNull(object); - return null; } @Test @@ -41,7 +40,8 @@ public void testCorrectPropertySucceeds() { PathToSchemasMap pathToSchemas = validator.validate( MapJsonSchema.getInstance(), arg, - validationMetadata + validationMetadata, + new ArrayList<>() ); if (pathToSchemas == null) { throw new RuntimeException("Invalid null value for pathToSchemas for this test case"); @@ -72,7 +72,8 @@ public void testNotApplicableTypeReturnsNull() { PathToSchemasMap pathToSchemas = validator.validate( MapJsonSchema.getInstance(), 1, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemas); } @@ -96,7 +97,8 @@ public void testIncorrectPropertyValueFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( MapJsonSchema.getInstance(), arg, - validationMetadata + validationMetadata, + new ArrayList<>() )); } -} +} \ No newline at end of file diff --git a/samples/client/3_0_3_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/RequiredValidatorTest.java b/samples/client/3_0_3_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/RequiredValidatorTest.java index 23f7a37c0d8..a5dbf4a8c03 100644 --- a/samples/client/3_0_3_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/RequiredValidatorTest.java +++ b/samples/client/3_0_3_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/RequiredValidatorTest.java @@ -16,9 +16,8 @@ public class RequiredValidatorTest { @SuppressWarnings("nullness") - private Void assertNull(@Nullable Object object) { + private void assertNull(@Nullable Object object) { Assert.assertNull(object); - return null; } @Test @@ -40,7 +39,8 @@ public void testCorrectPropertySucceeds() { PathToSchemasMap pathToSchemas = validator.validate( MapJsonSchema.getInstance(), arg, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemas); } @@ -61,7 +61,8 @@ public void testNotApplicableTypeReturnsNull() { PathToSchemasMap pathToSchemas = validator.validate( MapJsonSchema.getInstance(), 1, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemas); } @@ -85,7 +86,8 @@ public void testIncorrectPropertyFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( MapJsonSchema.getInstance(), arg, - validationMetadata + validationMetadata, + new ArrayList<>() )); } } \ No newline at end of file diff --git a/samples/client/3_0_3_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/TypeValidatorTest.java b/samples/client/3_0_3_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/TypeValidatorTest.java index 70c3049982c..362cca6e8ba 100644 --- a/samples/client/3_0_3_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/TypeValidatorTest.java +++ b/samples/client/3_0_3_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/TypeValidatorTest.java @@ -13,9 +13,8 @@ public class TypeValidatorTest { @SuppressWarnings("nullness") - private Void assertNull(@Nullable Object object) { + private void assertNull(@Nullable Object object) { Assert.assertNull(object); - return null; } @Test @@ -32,7 +31,8 @@ public void testValidateSucceeds() { @Nullable PathToSchemasMap pathToSchemasMap = validator.validate( StringJsonSchema.getInstance(), "hi", - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -51,7 +51,8 @@ public void testValidateFailsIntIsNotString() { Assert.assertThrows(ValidationException.class, () -> validator.validate( StringJsonSchema.getInstance(), 1, - validationMetadata + validationMetadata, + new ArrayList<>() )); } -} +} \ No newline at end of file diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ContainsValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ContainsValidator.java index 348eb310576..6e18b6fc53f 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ContainsValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ContainsValidator.java @@ -38,8 +38,7 @@ public ItemsValidator(Class contains) { public List getContainsPathToSchemas( @Nullable Object arg, - ValidationMetadata validation_metadata, - PathToSchemasMap path_to_schemas, + ValidationMetadata validationMetadata ) { if (!(arg instanceof List)) { return new ArrayList<>(); diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchema.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchema.java index 94dcbf21106..72eef695e9d 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchema.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchema.java @@ -242,6 +242,11 @@ public static PathToSchemasMap validate( LinkedHashSet disabledKeywords = validationMetadata.configuration().disabledKeywordFlags().getKeywords(); PathToSchemasMap pathToSchemas = new PathToSchemasMap(); LinkedHashMap thisKeywordToValidator = jsonSchema.keywordToValidator; + List containsPathToSchemas = new ArrayList(); + KeywordValidator containsValidator = thisKeywordToValidator.get("contains"); + if (containsValidator != null) { + containsPathToSchemas = containsValidator.getContainsPathToSchemas(arg, validationMetadata); + } for (Map.Entry entry: thisKeywordToValidator.entrySet()) { String jsonKeyword = entry.getKey(); if (disabledKeywords.contains(jsonKeyword)) { @@ -254,7 +259,8 @@ public static PathToSchemasMap validate( @Nullable PathToSchemasMap otherPathToSchemas = validator.validate( jsonSchema, arg, - validationMetadata + validationMetadata, + containsPathToSchemas ); if (otherPathToSchemas == null) { continue; diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/KeywordValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/KeywordValidator.java index 70d80c011b7..896c8b52b35 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/KeywordValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/KeywordValidator.java @@ -3,6 +3,9 @@ import org.openapijsonschematools.client.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.ArrayList; +import java.util.List; + public interface KeywordValidator { @Nullable PathToSchemasMap validate( JsonSchema schema, @@ -10,4 +13,11 @@ public interface KeywordValidator { ValidationMetadata validationMetadata, List containsPathToSchemas ) throws ValidationException; + + default List getContainsPathToSchemas( + @Nullable Object arg, + ValidationMetadata validationMetadata + ) { + return new ArrayList<>(); + } } \ No newline at end of file diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/ConstValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/ConstValidator.hbs index 5f643cbfa6f..fdad6a2e3ed 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/ConstValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/ConstValidator.hbs @@ -4,6 +4,7 @@ import {{{packageName}}}.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; import java.math.BigDecimal; +import java.util.List; import java.util.Objects; public class ConstValidator extends BigDecimalValidator implements KeywordValidator { diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/ContainsValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/ContainsValidator.hbs index d80ef152760..0c762fbd014 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/ContainsValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/ContainsValidator.hbs @@ -1,6 +1,7 @@ package {{{packageName}}}.schemas.validation; import org.checkerframework.checker.nullness.qual.Nullable; +import {{{packageName}}}.exceptions.ValidationException; import java.util.ArrayList; import java.util.List; @@ -8,7 +9,7 @@ import java.util.List; public class ContainsValidator implements KeywordValidator { public final Class contains; - public ItemsValidator(Class contains) { + public ContainsValidator(Class contains) { this.contains = contains; } @@ -22,24 +23,23 @@ public class ContainsValidator implements KeywordValidator { if (!(arg instanceof List)) { return null; } - many_path_to_schemas = contains_cls_path_to_schemas[1] if (containsPathToSchemas.isEmpty()) { - throw new ApiValueError( - "Validation failed for contains keyword in class={} at pathToItem={}. No " - "items validated to the contains schema.".format(cls, validation_metadata.path_to_item) - ) + throw new ValidationException( + "Validation failed for contains keyword in class="+schema.getClass() + + " at pathToItem="+validationMetadata.pathToItem()+". No " + + "items validated to the contains schema." + ); } PathToSchemasMap pathToSchemas = new PathToSchemasMap(); for (PathToSchemasMap otherPathToSchema: containsPathToSchemas) { - pathToSchemas.update(other_path_to_schema) + pathToSchemas.update(otherPathToSchema); } return pathToSchemas; } public List getContainsPathToSchemas( @Nullable Object arg, - ValidationMetadata validation_metadata, - PathToSchemasMap path_to_schemas, + ValidationMetadata validationMetadata ) { if (!(arg instanceof List)) { return new ArrayList<>(); @@ -56,21 +56,22 @@ public class ContainsValidator implements KeywordValidator { validationMetadata.validatedPathToSchemas(), validationMetadata.seenClasses() ); - if (itemValidationMetadata.validationRanEarlier(itemsSchema)) { + JsonSchema containsSchema = JsonSchemaFactory.getInstance(contains); + if (itemValidationMetadata.validationRanEarlier(containsSchema)) { // todo add_deeper_validated_schemas containsPathToSchemas.add(thesePathToSchemas); - i +=1; + i += 1; continue; } - JsonSchema containsSchema = JsonSchemaFactory.getInstance(contains); try { PathToSchemasMap otherPathToSchemas = JsonSchema.validate( - containsSchema, itemValue, itemValidationMetadata) - containsPathToSchemas.append(otherPathToSchemas) - } except (exceptions.OpenApiException ignored) { + containsSchema, itemValue, itemValidationMetadata); + containsPathToSchemas.add(otherPathToSchemas); + } catch (ValidationException ignored) { ; } + } return containsPathToSchemas; } -} +} \ No newline at end of file diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/EnumValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/EnumValidator.hbs index 8aa3f118ac7..7454e4e3c01 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/EnumValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/EnumValidator.hbs @@ -4,6 +4,7 @@ import {{{packageName}}}.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; import java.math.BigDecimal; +import java.util.List; import java.util.Set; public class EnumValidator extends BigDecimalValidator implements KeywordValidator { diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/ExclusiveMaximumValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/ExclusiveMaximumValidator.hbs index aafdb0afc93..1f23dcbfe2b 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/ExclusiveMaximumValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/ExclusiveMaximumValidator.hbs @@ -3,6 +3,7 @@ package {{{packageName}}}.schemas.validation; import {{{packageName}}}.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; public class ExclusiveMaximumValidator implements KeywordValidator { public final Number exclusiveMaximum; diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/ExclusiveMinimumValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/ExclusiveMinimumValidator.hbs index 0232486e4e3..84c9c958918 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/ExclusiveMinimumValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/ExclusiveMinimumValidator.hbs @@ -3,6 +3,7 @@ package {{{packageName}}}.schemas.validation; import {{{packageName}}}.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; public class ExclusiveMinimumValidator implements KeywordValidator { public final Number exclusiveMinimum; diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/FormatValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/FormatValidator.hbs index 5dec4a39b03..38aacc62838 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/FormatValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/FormatValidator.hbs @@ -6,6 +6,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; import java.math.BigDecimal; import java.math.BigInteger; import java.time.format.DateTimeParseException; +import java.util.List; import java.util.UUID; public class FormatValidator implements KeywordValidator { diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/JsonSchema.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/JsonSchema.hbs index 49cfa408753..8e1364e262a 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/JsonSchema.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/JsonSchema.hbs @@ -242,6 +242,11 @@ public abstract class JsonSchema { LinkedHashSet disabledKeywords = validationMetadata.configuration().disabledKeywordFlags().getKeywords(); PathToSchemasMap pathToSchemas = new PathToSchemasMap(); LinkedHashMap thisKeywordToValidator = jsonSchema.keywordToValidator; + List containsPathToSchemas = new ArrayList<>(); + KeywordValidator containsValidator = thisKeywordToValidator.get("contains"); + if (containsValidator != null) { + containsPathToSchemas = containsValidator.getContainsPathToSchemas(arg, validationMetadata); + } for (Map.Entry entry: thisKeywordToValidator.entrySet()) { String jsonKeyword = entry.getKey(); if (disabledKeywords.contains(jsonKeyword)) { @@ -254,7 +259,8 @@ public abstract class JsonSchema { @Nullable PathToSchemasMap otherPathToSchemas = validator.validate( jsonSchema, arg, - validationMetadata + validationMetadata, + containsPathToSchemas ); if (otherPathToSchemas == null) { continue; diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/KeywordValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/KeywordValidator.hbs index 4944cc3abc0..2c418faab06 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/KeywordValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/KeywordValidator.hbs @@ -3,6 +3,9 @@ package {{{packageName}}}.schemas.validation; import {{{packageName}}}.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.ArrayList; +import java.util.List; + public interface KeywordValidator { @Nullable PathToSchemasMap validate( JsonSchema schema, @@ -10,4 +13,11 @@ public interface KeywordValidator { ValidationMetadata validationMetadata, List containsPathToSchemas ) throws ValidationException; + + default List getContainsPathToSchemas( + @Nullable Object arg, + ValidationMetadata validationMetadata + ) { + return new ArrayList<>(); + } } \ No newline at end of file diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/MaxLengthValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/MaxLengthValidator.hbs index f4050f39df4..7ac1512460f 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/MaxLengthValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/MaxLengthValidator.hbs @@ -3,6 +3,8 @@ package {{{packageName}}}.schemas.validation; import {{{packageName}}}.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; + public class MaxLengthValidator extends LengthValidator implements KeywordValidator { public final int maxLength; diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/MaxPropertiesValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/MaxPropertiesValidator.hbs index de0b53d0337..4ca96783d59 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/MaxPropertiesValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/MaxPropertiesValidator.hbs @@ -3,6 +3,7 @@ package {{{packageName}}}.schemas.validation; import {{{packageName}}}.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; import java.util.Map; public class MaxPropertiesValidator implements KeywordValidator { diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/MaximumValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/MaximumValidator.hbs index 8c86115a8da..e896a028443 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/MaximumValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/MaximumValidator.hbs @@ -3,6 +3,7 @@ package {{{packageName}}}.schemas.validation; import {{{packageName}}}.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; public class MaximumValidator implements KeywordValidator { public final Number maximum; diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/MinLengthValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/MinLengthValidator.hbs index 8282c1ae04a..2658276c42d 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/MinLengthValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/MinLengthValidator.hbs @@ -3,6 +3,8 @@ package {{{packageName}}}.schemas.validation; import {{{packageName}}}.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; + public class MinLengthValidator extends LengthValidator implements KeywordValidator { public final int minLength; diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/MinPropertiesValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/MinPropertiesValidator.hbs index e7797347e4e..c600e575856 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/MinPropertiesValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/MinPropertiesValidator.hbs @@ -3,6 +3,7 @@ package {{{packageName}}}.schemas.validation; import {{{packageName}}}.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; import java.util.Map; public class MinPropertiesValidator implements KeywordValidator { diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/MinimumValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/MinimumValidator.hbs index f0a975802e3..aeb8868b2bf 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/MinimumValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/MinimumValidator.hbs @@ -3,6 +3,7 @@ package {{{packageName}}}.schemas.validation; import {{{packageName}}}.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; public class MinimumValidator implements KeywordValidator { public final Number minimum; diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/MultipleOfValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/MultipleOfValidator.hbs index 842975465e3..cc6e1fc2f8a 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/MultipleOfValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/MultipleOfValidator.hbs @@ -3,6 +3,7 @@ package {{{packageName}}}.schemas.validation; import {{{packageName}}}.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; import java.math.BigDecimal; public class MultipleOfValidator extends BigDecimalValidator implements KeywordValidator { diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/PatternValidator.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/PatternValidator.hbs index bffad85b160..ffdad52c829 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/PatternValidator.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/PatternValidator.hbs @@ -3,6 +3,7 @@ package {{{packageName}}}.schemas.validation; import {{{packageName}}}.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; import java.util.regex.Pattern; public class PatternValidator implements KeywordValidator { diff --git a/src/main/resources/java/src/test/java/packagename/schemas/validation/AdditionalPropertiesValidatorTest.hbs b/src/main/resources/java/src/test/java/packagename/schemas/validation/AdditionalPropertiesValidatorTest.hbs index c8019b16bdc..7c8248033a7 100644 --- a/src/main/resources/java/src/test/java/packagename/schemas/validation/AdditionalPropertiesValidatorTest.hbs +++ b/src/main/resources/java/src/test/java/packagename/schemas/validation/AdditionalPropertiesValidatorTest.hbs @@ -77,7 +77,8 @@ public class AdditionalPropertiesValidatorTest { PathToSchemasMap pathToSchemas = validator.validate( ObjectWithPropsSchema.getInstance(), arg, - validationMetadata + validationMetadata, + new ArrayList<>() ); if (pathToSchemas == null) { throw new RuntimeException("Invalid null value for pathToSchemas for this test case"); @@ -106,7 +107,8 @@ public class AdditionalPropertiesValidatorTest { PathToSchemasMap pathToSchemas = validator.validate( MapJsonSchema.getInstance(), 1, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemas); } @@ -128,7 +130,8 @@ public class AdditionalPropertiesValidatorTest { Assert.assertThrows(ValidationException.class, () -> validator.validate( ObjectWithPropsSchema.getInstance(), arg, - validationMetadata + validationMetadata, + new ArrayList<>() )); } } \ No newline at end of file diff --git a/src/main/resources/java/src/test/java/packagename/schemas/validation/FormatValidatorTest.hbs b/src/main/resources/java/src/test/java/packagename/schemas/validation/FormatValidatorTest.hbs index 1a1c3c217d2..7e7c6179705 100644 --- a/src/main/resources/java/src/test/java/packagename/schemas/validation/FormatValidatorTest.hbs +++ b/src/main/resources/java/src/test/java/packagename/schemas/validation/FormatValidatorTest.hbs @@ -23,9 +23,8 @@ public class FormatValidatorTest { ); @SuppressWarnings("nullness") - private Void assertNull(@Nullable Object object) { + private void assertNull(@Nullable Object object) { Assert.assertNull(object); - return null; } @Test @@ -34,7 +33,8 @@ public class FormatValidatorTest { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), 1.0f, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -45,7 +45,8 @@ public class FormatValidatorTest { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), 3.14f, - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -55,7 +56,8 @@ public class FormatValidatorTest { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), 1, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -66,7 +68,8 @@ public class FormatValidatorTest { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), -2147483649L, - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -76,7 +79,8 @@ public class FormatValidatorTest { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), -2147483648, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -87,7 +91,8 @@ public class FormatValidatorTest { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), 2147483647, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -98,7 +103,8 @@ public class FormatValidatorTest { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), 2147483648L, - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -109,7 +115,8 @@ public class FormatValidatorTest { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), new BigInteger("-9223372036854775809"), - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -119,7 +126,8 @@ public class FormatValidatorTest { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), -9223372036854775808L, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -130,7 +138,8 @@ public class FormatValidatorTest { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), 9223372036854775807L, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -142,7 +151,8 @@ public class FormatValidatorTest { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), new BigInteger("9223372036854775808"), - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -152,7 +162,8 @@ public class FormatValidatorTest { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), -3.402823466385289e+38d, - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -162,7 +173,8 @@ public class FormatValidatorTest { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), -3.4028234663852886e+38f, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -173,7 +185,8 @@ public class FormatValidatorTest { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), 3.4028234663852886e+38f, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -184,7 +197,8 @@ public class FormatValidatorTest { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), 3.402823466385289e+38d, - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -194,7 +208,8 @@ public class FormatValidatorTest { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), new BigDecimal("-1.7976931348623157082e+308"), - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -204,7 +219,8 @@ public class FormatValidatorTest { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), -1.7976931348623157E+308d, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -215,7 +231,8 @@ public class FormatValidatorTest { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), 1.7976931348623157E+308d, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -226,7 +243,8 @@ public class FormatValidatorTest { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), new BigDecimal("1.7976931348623157082e+308"), - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -236,7 +254,8 @@ public class FormatValidatorTest { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), "abc", - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -246,7 +265,8 @@ public class FormatValidatorTest { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), "3.14", - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -257,7 +277,8 @@ public class FormatValidatorTest { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), "1", - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -268,7 +289,8 @@ public class FormatValidatorTest { Assert.assertThrows(ValidationException.class, () -> validator.validate( StringJsonSchema.getInstance(), "abc", - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -278,7 +300,8 @@ public class FormatValidatorTest { PathToSchemasMap pathToSchemasMap = validator.validate( StringJsonSchema.getInstance(), "2017-01-20", - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -289,7 +312,8 @@ public class FormatValidatorTest { Assert.assertThrows(ValidationException.class, () -> validator.validate( StringJsonSchema.getInstance(), "abc", - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -299,8 +323,9 @@ public class FormatValidatorTest { PathToSchemasMap pathToSchemasMap = validator.validate( StringJsonSchema.getInstance(), "2017-07-21T17:32:28Z", - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } -} +} \ No newline at end of file diff --git a/src/main/resources/java/src/test/java/packagename/schemas/validation/ItemsValidatorTest.hbs b/src/main/resources/java/src/test/java/packagename/schemas/validation/ItemsValidatorTest.hbs index 53607643d7a..a3aa7ce1fe4 100644 --- a/src/main/resources/java/src/test/java/packagename/schemas/validation/ItemsValidatorTest.hbs +++ b/src/main/resources/java/src/test/java/packagename/schemas/validation/ItemsValidatorTest.hbs @@ -16,9 +16,8 @@ import java.util.List; public class ItemsValidatorTest { @SuppressWarnings("nullness") - private Void assertNull(@Nullable Object object) { + private void assertNull(@Nullable Object object) { Assert.assertNull(object); - return null; } @Test @@ -37,7 +36,8 @@ public class ItemsValidatorTest { PathToSchemasMap pathToSchemas = validator.validate( ListJsonSchema.getInstance(), arg, - validationMetadata + validationMetadata, + new ArrayList<>() ); if (pathToSchemas == null) { throw new RuntimeException("Invalid null value in pathToSchemas for this test case"); @@ -66,7 +66,8 @@ public class ItemsValidatorTest { PathToSchemasMap pathToSchemas = validator.validate( ListJsonSchema.getInstance(), 1, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemas); } @@ -87,7 +88,8 @@ public class ItemsValidatorTest { Assert.assertThrows(ValidationException.class, () -> validator.validate( ListJsonSchema.getInstance(), arg, - validationMetadata + validationMetadata, + new ArrayList<>() )); } } diff --git a/src/main/resources/java/src/test/java/packagename/schemas/validation/JsonSchemaTest.hbs b/src/main/resources/java/src/test/java/packagename/schemas/validation/JsonSchemaTest.hbs index b039257a5a8..0f61a6f2ce9 100644 --- a/src/main/resources/java/src/test/java/packagename/schemas/validation/JsonSchemaTest.hbs +++ b/src/main/resources/java/src/test/java/packagename/schemas/validation/JsonSchemaTest.hbs @@ -8,7 +8,6 @@ import {{{packageName}}}.configurations.SchemaConfiguration; import {{{packageName}}}.exceptions.InvalidTypeException; import {{{packageName}}}.exceptions.ValidationException; -import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; diff --git a/src/main/resources/java/src/test/java/packagename/schemas/validation/PropertiesValidatorTest.hbs b/src/main/resources/java/src/test/java/packagename/schemas/validation/PropertiesValidatorTest.hbs index 5af8d9665dd..a4e7201e6bc 100644 --- a/src/main/resources/java/src/test/java/packagename/schemas/validation/PropertiesValidatorTest.hbs +++ b/src/main/resources/java/src/test/java/packagename/schemas/validation/PropertiesValidatorTest.hbs @@ -17,9 +17,8 @@ import java.util.Map; public class PropertiesValidatorTest { @SuppressWarnings("nullness") - private Void assertNull(@Nullable Object object) { + private void assertNull(@Nullable Object object) { Assert.assertNull(object); - return null; } @Test @@ -41,7 +40,8 @@ public class PropertiesValidatorTest { PathToSchemasMap pathToSchemas = validator.validate( MapJsonSchema.getInstance(), arg, - validationMetadata + validationMetadata, + new ArrayList<>() ); if (pathToSchemas == null) { throw new RuntimeException("Invalid null value for pathToSchemas for this test case"); @@ -72,7 +72,8 @@ public class PropertiesValidatorTest { PathToSchemasMap pathToSchemas = validator.validate( MapJsonSchema.getInstance(), 1, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemas); } @@ -96,7 +97,8 @@ public class PropertiesValidatorTest { Assert.assertThrows(ValidationException.class, () -> validator.validate( MapJsonSchema.getInstance(), arg, - validationMetadata + validationMetadata, + new ArrayList<>() )); } -} +} \ No newline at end of file diff --git a/src/main/resources/java/src/test/java/packagename/schemas/validation/RequiredValidatorTest.hbs b/src/main/resources/java/src/test/java/packagename/schemas/validation/RequiredValidatorTest.hbs index 750811dfa45..be23d531464 100644 --- a/src/main/resources/java/src/test/java/packagename/schemas/validation/RequiredValidatorTest.hbs +++ b/src/main/resources/java/src/test/java/packagename/schemas/validation/RequiredValidatorTest.hbs @@ -16,9 +16,8 @@ import java.util.Set; public class RequiredValidatorTest { @SuppressWarnings("nullness") - private Void assertNull(@Nullable Object object) { + private void assertNull(@Nullable Object object) { Assert.assertNull(object); - return null; } @Test @@ -40,7 +39,8 @@ public class RequiredValidatorTest { PathToSchemasMap pathToSchemas = validator.validate( MapJsonSchema.getInstance(), arg, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemas); } @@ -61,7 +61,8 @@ public class RequiredValidatorTest { PathToSchemasMap pathToSchemas = validator.validate( MapJsonSchema.getInstance(), 1, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemas); } @@ -85,7 +86,8 @@ public class RequiredValidatorTest { Assert.assertThrows(ValidationException.class, () -> validator.validate( MapJsonSchema.getInstance(), arg, - validationMetadata + validationMetadata, + new ArrayList<>() )); } } \ No newline at end of file diff --git a/src/main/resources/java/src/test/java/packagename/schemas/validation/TypeValidatorTest.hbs b/src/main/resources/java/src/test/java/packagename/schemas/validation/TypeValidatorTest.hbs index 99c9bc73d1e..28b970b73e6 100644 --- a/src/main/resources/java/src/test/java/packagename/schemas/validation/TypeValidatorTest.hbs +++ b/src/main/resources/java/src/test/java/packagename/schemas/validation/TypeValidatorTest.hbs @@ -13,9 +13,8 @@ import java.util.LinkedHashSet; public class TypeValidatorTest { @SuppressWarnings("nullness") - private Void assertNull(@Nullable Object object) { + private void assertNull(@Nullable Object object) { Assert.assertNull(object); - return null; } @Test @@ -32,7 +31,8 @@ public class TypeValidatorTest { @Nullable PathToSchemasMap pathToSchemasMap = validator.validate( StringJsonSchema.getInstance(), "hi", - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -51,7 +51,8 @@ public class TypeValidatorTest { Assert.assertThrows(ValidationException.class, () -> validator.validate( StringJsonSchema.getInstance(), 1, - validationMetadata + validationMetadata, + new ArrayList<>() )); } -} +} \ No newline at end of file From 11e467dc387e99b85a4938709980dca9a2fadb29 Mon Sep 17 00:00:00 2001 From: Justin Black Date: Thu, 11 Jan 2024 11:08:41 -0800 Subject: [PATCH 4/8] Regenerates other java samples --- .../schemas/validation/ConstValidator.java | 1 + .../schemas/validation/ContainsValidator.java | 30 +++---- .../schemas/validation/EnumValidator.java | 1 + .../validation/ExclusiveMaximumValidator.java | 1 + .../validation/ExclusiveMinimumValidator.java | 1 + .../schemas/validation/FormatValidator.java | 1 + .../client/schemas/validation/JsonSchema.java | 2 +- .../validation/MaxLengthValidator.java | 2 + .../validation/MaxPropertiesValidator.java | 1 + .../schemas/validation/MaximumValidator.java | 1 + .../validation/MinLengthValidator.java | 2 + .../validation/MinPropertiesValidator.java | 1 + .../schemas/validation/MinimumValidator.java | 1 + .../validation/MultipleOfValidator.java | 1 + .../schemas/validation/PatternValidator.java | 1 + .../AdditionalPropertiesValidatorTest.java | 9 +- .../validation/FormatValidatorTest.java | 83 ++++++++++++------- .../validation/ItemsValidatorTest.java | 12 +-- .../schemas/validation/JsonSchemaTest.java | 1 - .../validation/PropertiesValidatorTest.java | 14 ++-- .../validation/RequiredValidatorTest.java | 12 +-- .../schemas/validation/TypeValidatorTest.java | 11 +-- .../petstore/java/.openapi-generator/FILES | 2 +- .../AdditionalPropertiesValidator.java | 7 +- .../schemas/validation/AllOfValidator.java | 7 +- .../schemas/validation/AnyOfValidator.java | 7 +- .../schemas/validation/ConstValidator.java | 8 +- .../schemas/validation/ContainsValidator.java | 77 +++++++++++++++++ .../schemas/validation/EnumValidator.java | 8 +- .../validation/ExclusiveMaximumValidator.java | 8 +- .../validation/ExclusiveMinimumValidator.java | 8 +- .../schemas/validation/FormatValidator.java | 8 +- .../schemas/validation/ItemsValidator.java | 7 +- .../client/schemas/validation/JsonSchema.java | 8 +- .../schemas/validation/KeywordValidator.java | 18 +++- .../schemas/validation/MaxItemsValidator.java | 7 +- .../validation/MaxLengthValidator.java | 9 +- .../validation/MaxPropertiesValidator.java | 8 +- .../schemas/validation/MaximumValidator.java | 8 +- .../schemas/validation/MinItemsValidator.java | 7 +- .../validation/MinLengthValidator.java | 9 +- .../validation/MinPropertiesValidator.java | 8 +- .../schemas/validation/MinimumValidator.java | 8 +- .../validation/MultipleOfValidator.java | 8 +- .../schemas/validation/NotValidator.java | 7 +- .../schemas/validation/OneOfValidator.java | 7 +- .../schemas/validation/PatternValidator.java | 8 +- .../validation/PropertiesValidator.java | 7 +- .../schemas/validation/RequiredValidator.java | 7 +- .../schemas/validation/TypeValidator.java | 7 +- .../validation/UniqueItemsValidator.java | 7 +- .../AdditionalPropertiesValidatorTest.java | 9 +- .../validation/FormatValidatorTest.java | 83 ++++++++++++------- .../validation/ItemsValidatorTest.java | 12 +-- .../schemas/validation/JsonSchemaTest.java | 1 - .../validation/PropertiesValidatorTest.java | 14 ++-- .../validation/RequiredValidatorTest.java | 12 +-- .../schemas/validation/TypeValidatorTest.java | 11 +-- 58 files changed, 473 insertions(+), 153 deletions(-) create mode 100644 samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ContainsValidator.java diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ConstValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ConstValidator.java index 780a685f1f3..e2fd692dde0 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ConstValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ConstValidator.java @@ -4,6 +4,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; import java.math.BigDecimal; +import java.util.List; import java.util.Objects; public class ConstValidator extends BigDecimalValidator implements KeywordValidator { diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ContainsValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ContainsValidator.java index 6e18b6fc53f..a2bca9506ad 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ContainsValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ContainsValidator.java @@ -1,6 +1,7 @@ package org.openapijsonschematools.client.schemas.validation; import org.checkerframework.checker.nullness.qual.Nullable; +import org.openapijsonschematools.client.exceptions.ValidationException; import java.util.ArrayList; import java.util.List; @@ -8,7 +9,7 @@ public class ContainsValidator implements KeywordValidator { public final Class contains; - public ItemsValidator(Class contains) { + public ContainsValidator(Class contains) { this.contains = contains; } @@ -22,16 +23,16 @@ public ItemsValidator(Class contains) { if (!(arg instanceof List)) { return null; } - many_path_to_schemas = contains_cls_path_to_schemas[1] if (containsPathToSchemas.isEmpty()) { - throw new ApiValueError( - "Validation failed for contains keyword in class={} at pathToItem={}. No " - "items validated to the contains schema.".format(cls, validation_metadata.path_to_item) - ) + throw new ValidationException( + "Validation failed for contains keyword in class="+schema.getClass() + + " at pathToItem="+validationMetadata.pathToItem()+". No " + + "items validated to the contains schema." + ); } PathToSchemasMap pathToSchemas = new PathToSchemasMap(); for (PathToSchemasMap otherPathToSchema: containsPathToSchemas) { - pathToSchemas.update(other_path_to_schema) + pathToSchemas.update(otherPathToSchema); } return pathToSchemas; } @@ -55,21 +56,22 @@ public List getContainsPathToSchemas( validationMetadata.validatedPathToSchemas(), validationMetadata.seenClasses() ); - if (itemValidationMetadata.validationRanEarlier(itemsSchema)) { + JsonSchema containsSchema = JsonSchemaFactory.getInstance(contains); + if (itemValidationMetadata.validationRanEarlier(containsSchema)) { // todo add_deeper_validated_schemas containsPathToSchemas.add(thesePathToSchemas); - i +=1; + i += 1; continue; } - JsonSchema containsSchema = JsonSchemaFactory.getInstance(contains); try { PathToSchemasMap otherPathToSchemas = JsonSchema.validate( - containsSchema, itemValue, itemValidationMetadata) - containsPathToSchemas.append(otherPathToSchemas) - } except (exceptions.OpenApiException ignored) { + containsSchema, itemValue, itemValidationMetadata); + containsPathToSchemas.add(otherPathToSchemas); + } catch (ValidationException ignored) { ; } + } return containsPathToSchemas; } -} +} \ No newline at end of file diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/EnumValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/EnumValidator.java index e8fce8b0fb3..7f448bb4afa 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/EnumValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/EnumValidator.java @@ -4,6 +4,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; import java.math.BigDecimal; +import java.util.List; import java.util.Set; public class EnumValidator extends BigDecimalValidator implements KeywordValidator { diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMaximumValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMaximumValidator.java index 9f6b323fdff..e4e7d58d6a0 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMaximumValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMaximumValidator.java @@ -3,6 +3,7 @@ import org.openapijsonschematools.client.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; public class ExclusiveMaximumValidator implements KeywordValidator { public final Number exclusiveMaximum; diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMinimumValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMinimumValidator.java index 28c07c30ea8..56fe9360e21 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMinimumValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMinimumValidator.java @@ -3,6 +3,7 @@ import org.openapijsonschematools.client.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; public class ExclusiveMinimumValidator implements KeywordValidator { public final Number exclusiveMinimum; diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/FormatValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/FormatValidator.java index 5a90477d7df..8753e693df5 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/FormatValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/FormatValidator.java @@ -6,6 +6,7 @@ import java.math.BigDecimal; import java.math.BigInteger; import java.time.format.DateTimeParseException; +import java.util.List; import java.util.UUID; public class FormatValidator implements KeywordValidator { diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchema.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchema.java index 72eef695e9d..a63aaa4f191 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchema.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchema.java @@ -242,7 +242,7 @@ public static PathToSchemasMap validate( LinkedHashSet disabledKeywords = validationMetadata.configuration().disabledKeywordFlags().getKeywords(); PathToSchemasMap pathToSchemas = new PathToSchemasMap(); LinkedHashMap thisKeywordToValidator = jsonSchema.keywordToValidator; - List containsPathToSchemas = new ArrayList(); + List containsPathToSchemas = new ArrayList<>(); KeywordValidator containsValidator = thisKeywordToValidator.get("contains"); if (containsValidator != null) { containsPathToSchemas = containsValidator.getContainsPathToSchemas(arg, validationMetadata); diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxLengthValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxLengthValidator.java index 0e30ab1c5f7..ff8b68eb3c6 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxLengthValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxLengthValidator.java @@ -3,6 +3,8 @@ import org.openapijsonschematools.client.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; + public class MaxLengthValidator extends LengthValidator implements KeywordValidator { public final int maxLength; diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxPropertiesValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxPropertiesValidator.java index 51c048442fa..1bff35c458c 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxPropertiesValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxPropertiesValidator.java @@ -3,6 +3,7 @@ import org.openapijsonschematools.client.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; import java.util.Map; public class MaxPropertiesValidator implements KeywordValidator { diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaximumValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaximumValidator.java index ffc31ea7e5a..023f09353c6 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaximumValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaximumValidator.java @@ -3,6 +3,7 @@ import org.openapijsonschematools.client.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; public class MaximumValidator implements KeywordValidator { public final Number maximum; diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinLengthValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinLengthValidator.java index a7d21ad6ee5..35bcd82cc60 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinLengthValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinLengthValidator.java @@ -3,6 +3,8 @@ import org.openapijsonschematools.client.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; + public class MinLengthValidator extends LengthValidator implements KeywordValidator { public final int minLength; diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinPropertiesValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinPropertiesValidator.java index 365163631b5..247b730b5a6 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinPropertiesValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinPropertiesValidator.java @@ -3,6 +3,7 @@ import org.openapijsonschematools.client.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; import java.util.Map; public class MinPropertiesValidator implements KeywordValidator { diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinimumValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinimumValidator.java index 98f4adf304b..e8fd4f74954 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinimumValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinimumValidator.java @@ -3,6 +3,7 @@ import org.openapijsonschematools.client.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; public class MinimumValidator implements KeywordValidator { public final Number minimum; diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MultipleOfValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MultipleOfValidator.java index 64e7fe2ee4c..be7ae76af99 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MultipleOfValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MultipleOfValidator.java @@ -3,6 +3,7 @@ import org.openapijsonschematools.client.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; import java.math.BigDecimal; public class MultipleOfValidator extends BigDecimalValidator implements KeywordValidator { diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/PatternValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/PatternValidator.java index 1efe2ecd3ac..9e28025ae9a 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/PatternValidator.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/PatternValidator.java @@ -3,6 +3,7 @@ import org.openapijsonschematools.client.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; import java.util.regex.Pattern; public class PatternValidator implements KeywordValidator { diff --git a/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/AdditionalPropertiesValidatorTest.java b/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/AdditionalPropertiesValidatorTest.java index c638dba8c2d..374665ef028 100644 --- a/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/AdditionalPropertiesValidatorTest.java +++ b/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/AdditionalPropertiesValidatorTest.java @@ -77,7 +77,8 @@ public void testCorrectPropertySucceeds() { PathToSchemasMap pathToSchemas = validator.validate( ObjectWithPropsSchema.getInstance(), arg, - validationMetadata + validationMetadata, + new ArrayList<>() ); if (pathToSchemas == null) { throw new RuntimeException("Invalid null value for pathToSchemas for this test case"); @@ -106,7 +107,8 @@ public void testNotApplicableTypeReturnsNull() { PathToSchemasMap pathToSchemas = validator.validate( MapJsonSchema.getInstance(), 1, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemas); } @@ -128,7 +130,8 @@ public void testIncorrectPropertyValueFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( ObjectWithPropsSchema.getInstance(), arg, - validationMetadata + validationMetadata, + new ArrayList<>() )); } } \ No newline at end of file diff --git a/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/FormatValidatorTest.java b/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/FormatValidatorTest.java index 10f07ffc2f9..b584efdf406 100644 --- a/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/FormatValidatorTest.java +++ b/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/FormatValidatorTest.java @@ -23,9 +23,8 @@ public class FormatValidatorTest { ); @SuppressWarnings("nullness") - private Void assertNull(@Nullable Object object) { + private void assertNull(@Nullable Object object) { Assert.assertNull(object); - return null; } @Test @@ -34,7 +33,8 @@ public void testIntFormatSucceedsWithFloat() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), 1.0f, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -45,7 +45,8 @@ public void testIntFormatFailsWithFloat() { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), 3.14f, - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -55,7 +56,8 @@ public void testIntFormatSucceedsWithInt() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), 1, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -66,7 +68,8 @@ public void testInt32UnderMinFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), -2147483649L, - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -76,7 +79,8 @@ public void testInt32InclusiveMinSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), -2147483648, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -87,7 +91,8 @@ public void testInt32InclusiveMaxSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), 2147483647, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -98,7 +103,8 @@ public void testInt32OverMaxFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), 2147483648L, - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -109,7 +115,8 @@ public void testInt64UnderMinFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), new BigInteger("-9223372036854775809"), - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -119,7 +126,8 @@ public void testInt64InclusiveMinSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), -9223372036854775808L, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -130,7 +138,8 @@ public void testInt64InclusiveMaxSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), 9223372036854775807L, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -142,7 +151,8 @@ public void testInt64OverMaxFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), new BigInteger("9223372036854775808"), - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -152,7 +162,8 @@ public void testFloatUnderMinFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), -3.402823466385289e+38d, - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -162,7 +173,8 @@ public void testFloatInclusiveMinSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), -3.4028234663852886e+38f, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -173,7 +185,8 @@ public void testFloatInclusiveMaxSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), 3.4028234663852886e+38f, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -184,7 +197,8 @@ public void testFloatOverMaxFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), 3.402823466385289e+38d, - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -194,7 +208,8 @@ public void testDoubleUnderMinFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), new BigDecimal("-1.7976931348623157082e+308"), - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -204,7 +219,8 @@ public void testDoubleInclusiveMinSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), -1.7976931348623157E+308d, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -215,7 +231,8 @@ public void testDoubleInclusiveMaxSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), 1.7976931348623157E+308d, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -226,7 +243,8 @@ public void testDoubleOverMaxFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), new BigDecimal("1.7976931348623157082e+308"), - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -236,7 +254,8 @@ public void testInvalidNumberStringFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), "abc", - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -246,7 +265,8 @@ public void testValidFloatNumberStringSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), "3.14", - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -257,7 +277,8 @@ public void testValidIntNumberStringSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), "1", - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -268,7 +289,8 @@ public void testInvalidDateStringFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( StringJsonSchema.getInstance(), "abc", - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -278,7 +300,8 @@ public void testValidDateStringSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( StringJsonSchema.getInstance(), "2017-01-20", - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -289,7 +312,8 @@ public void testInvalidDateTimeStringFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( StringJsonSchema.getInstance(), "abc", - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -299,8 +323,9 @@ public void testValidDateTimeStringSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( StringJsonSchema.getInstance(), "2017-07-21T17:32:28Z", - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } -} +} \ No newline at end of file diff --git a/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/ItemsValidatorTest.java b/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/ItemsValidatorTest.java index 47d743c595d..84da9687817 100644 --- a/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/ItemsValidatorTest.java +++ b/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/ItemsValidatorTest.java @@ -16,9 +16,8 @@ public class ItemsValidatorTest { @SuppressWarnings("nullness") - private Void assertNull(@Nullable Object object) { + private void assertNull(@Nullable Object object) { Assert.assertNull(object); - return null; } @Test @@ -37,7 +36,8 @@ public void testCorrectItemsSucceeds() { PathToSchemasMap pathToSchemas = validator.validate( ListJsonSchema.getInstance(), arg, - validationMetadata + validationMetadata, + new ArrayList<>() ); if (pathToSchemas == null) { throw new RuntimeException("Invalid null value in pathToSchemas for this test case"); @@ -66,7 +66,8 @@ public void testNotApplicableTypeReturnsNull() { PathToSchemasMap pathToSchemas = validator.validate( ListJsonSchema.getInstance(), 1, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemas); } @@ -87,7 +88,8 @@ public void testIncorrectItemFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( ListJsonSchema.getInstance(), arg, - validationMetadata + validationMetadata, + new ArrayList<>() )); } } diff --git a/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/JsonSchemaTest.java b/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/JsonSchemaTest.java index f3a945bb88e..525222b9ad7 100644 --- a/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/JsonSchemaTest.java +++ b/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/JsonSchemaTest.java @@ -8,7 +8,6 @@ import org.openapijsonschematools.client.exceptions.InvalidTypeException; import org.openapijsonschematools.client.exceptions.ValidationException; -import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; diff --git a/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/PropertiesValidatorTest.java b/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/PropertiesValidatorTest.java index ec16e124740..8d1d3fc053b 100644 --- a/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/PropertiesValidatorTest.java +++ b/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/PropertiesValidatorTest.java @@ -17,9 +17,8 @@ public class PropertiesValidatorTest { @SuppressWarnings("nullness") - private Void assertNull(@Nullable Object object) { + private void assertNull(@Nullable Object object) { Assert.assertNull(object); - return null; } @Test @@ -41,7 +40,8 @@ public void testCorrectPropertySucceeds() { PathToSchemasMap pathToSchemas = validator.validate( MapJsonSchema.getInstance(), arg, - validationMetadata + validationMetadata, + new ArrayList<>() ); if (pathToSchemas == null) { throw new RuntimeException("Invalid null value for pathToSchemas for this test case"); @@ -72,7 +72,8 @@ public void testNotApplicableTypeReturnsNull() { PathToSchemasMap pathToSchemas = validator.validate( MapJsonSchema.getInstance(), 1, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemas); } @@ -96,7 +97,8 @@ public void testIncorrectPropertyValueFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( MapJsonSchema.getInstance(), arg, - validationMetadata + validationMetadata, + new ArrayList<>() )); } -} +} \ No newline at end of file diff --git a/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/RequiredValidatorTest.java b/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/RequiredValidatorTest.java index 23f7a37c0d8..a5dbf4a8c03 100644 --- a/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/RequiredValidatorTest.java +++ b/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/RequiredValidatorTest.java @@ -16,9 +16,8 @@ public class RequiredValidatorTest { @SuppressWarnings("nullness") - private Void assertNull(@Nullable Object object) { + private void assertNull(@Nullable Object object) { Assert.assertNull(object); - return null; } @Test @@ -40,7 +39,8 @@ public void testCorrectPropertySucceeds() { PathToSchemasMap pathToSchemas = validator.validate( MapJsonSchema.getInstance(), arg, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemas); } @@ -61,7 +61,8 @@ public void testNotApplicableTypeReturnsNull() { PathToSchemasMap pathToSchemas = validator.validate( MapJsonSchema.getInstance(), 1, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemas); } @@ -85,7 +86,8 @@ public void testIncorrectPropertyFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( MapJsonSchema.getInstance(), arg, - validationMetadata + validationMetadata, + new ArrayList<>() )); } } \ No newline at end of file diff --git a/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/TypeValidatorTest.java b/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/TypeValidatorTest.java index 70c3049982c..362cca6e8ba 100644 --- a/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/TypeValidatorTest.java +++ b/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/schemas/validation/TypeValidatorTest.java @@ -13,9 +13,8 @@ public class TypeValidatorTest { @SuppressWarnings("nullness") - private Void assertNull(@Nullable Object object) { + private void assertNull(@Nullable Object object) { Assert.assertNull(object); - return null; } @Test @@ -32,7 +31,8 @@ public void testValidateSucceeds() { @Nullable PathToSchemasMap pathToSchemasMap = validator.validate( StringJsonSchema.getInstance(), "hi", - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -51,7 +51,8 @@ public void testValidateFailsIntIsNotString() { Assert.assertThrows(ValidationException.class, () -> validator.validate( StringJsonSchema.getInstance(), 1, - validationMetadata + validationMetadata, + new ArrayList<>() )); } -} +} \ No newline at end of file diff --git a/samples/client/petstore/java/.openapi-generator/FILES b/samples/client/petstore/java/.openapi-generator/FILES index 97387305244..cb71415ab9c 100644 --- a/samples/client/petstore/java/.openapi-generator/FILES +++ b/samples/client/petstore/java/.openapi-generator/FILES @@ -688,6 +688,7 @@ src/main/java/org/openapijsonschematools/client/schemas/validation/BooleanEnumVa src/main/java/org/openapijsonschematools/client/schemas/validation/BooleanSchemaValidator.java src/main/java/org/openapijsonschematools/client/schemas/validation/BooleanValueMethod.java src/main/java/org/openapijsonschematools/client/schemas/validation/ConstValidator.java +src/main/java/org/openapijsonschematools/client/schemas/validation/ContainsValidator.java src/main/java/org/openapijsonschematools/client/schemas/validation/CustomIsoparser.java src/main/java/org/openapijsonschematools/client/schemas/validation/DefaultValueMethod.java src/main/java/org/openapijsonschematools/client/schemas/validation/DoubleEnumValidator.java @@ -695,7 +696,6 @@ src/main/java/org/openapijsonschematools/client/schemas/validation/DoubleValueMe src/main/java/org/openapijsonschematools/client/schemas/validation/EnumValidator.java src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMaximumValidator.java src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMinimumValidator.java -src/main/java/org/openapijsonschematools/client/schemas/validation/FakeValidator.java src/main/java/org/openapijsonschematools/client/schemas/validation/FloatEnumValidator.java src/main/java/org/openapijsonschematools/client/schemas/validation/FloatValueMethod.java src/main/java/org/openapijsonschematools/client/schemas/validation/FormatValidator.java diff --git a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AdditionalPropertiesValidator.java b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AdditionalPropertiesValidator.java index 5a5a6cfc917..dc36864089b 100644 --- a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AdditionalPropertiesValidator.java +++ b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AdditionalPropertiesValidator.java @@ -15,7 +15,12 @@ public AdditionalPropertiesValidator(Class additionalPrope } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Map mapArg)) { return null; } diff --git a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AllOfValidator.java b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AllOfValidator.java index 7b392d027a7..02aecb3dbf2 100644 --- a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AllOfValidator.java +++ b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AllOfValidator.java @@ -11,7 +11,12 @@ public AllOfValidator(List> allOf) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { PathToSchemasMap pathToSchemas = new PathToSchemasMap(); for(Class allOfClass: allOf) { JsonSchema allOfSchema = JsonSchemaFactory.getInstance(allOfClass); diff --git a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AnyOfValidator.java b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AnyOfValidator.java index 53d61e878b2..e978af7ee5f 100644 --- a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AnyOfValidator.java +++ b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AnyOfValidator.java @@ -14,7 +14,12 @@ public AnyOfValidator(List> anyOf) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { PathToSchemasMap pathToSchemas = new PathToSchemasMap(); List> validatedAnyOfClasses = new ArrayList<>(); for(Class anyOfClass: anyOf) { diff --git a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ConstValidator.java b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ConstValidator.java index cb863f215ad..e2fd692dde0 100644 --- a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ConstValidator.java +++ b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ConstValidator.java @@ -4,6 +4,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; import java.math.BigDecimal; +import java.util.List; import java.util.Objects; public class ConstValidator extends BigDecimalValidator implements KeywordValidator { @@ -14,7 +15,12 @@ public ConstValidator(@Nullable Object constValue) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (arg instanceof Number) { BigDecimal castArg = getBigDecimal((Number) arg); if (Objects.equals(castArg, constValue)) { diff --git a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ContainsValidator.java b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ContainsValidator.java new file mode 100644 index 00000000000..a2bca9506ad --- /dev/null +++ b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ContainsValidator.java @@ -0,0 +1,77 @@ +package org.openapijsonschematools.client.schemas.validation; + +import org.checkerframework.checker.nullness.qual.Nullable; +import org.openapijsonschematools.client.exceptions.ValidationException; + +import java.util.ArrayList; +import java.util.List; + +public class ContainsValidator implements KeywordValidator { + public final Class contains; + + public ContainsValidator(Class contains) { + this.contains = contains; + } + + @Override + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { + if (!(arg instanceof List)) { + return null; + } + if (containsPathToSchemas.isEmpty()) { + throw new ValidationException( + "Validation failed for contains keyword in class="+schema.getClass() + + " at pathToItem="+validationMetadata.pathToItem()+". No " + + "items validated to the contains schema." + ); + } + PathToSchemasMap pathToSchemas = new PathToSchemasMap(); + for (PathToSchemasMap otherPathToSchema: containsPathToSchemas) { + pathToSchemas.update(otherPathToSchema); + } + return pathToSchemas; + } + + public List getContainsPathToSchemas( + @Nullable Object arg, + ValidationMetadata validationMetadata + ) { + if (!(arg instanceof List)) { + return new ArrayList<>(); + } + List containsPathToSchemas = new ArrayList<>(); + int i = 0; + for(Object itemValue: (List) arg) { + PathToSchemasMap thesePathToSchemas = new PathToSchemasMap(); + List itemPathToItem = new ArrayList<>(validationMetadata.pathToItem()); + itemPathToItem.add(i); + ValidationMetadata itemValidationMetadata = new ValidationMetadata( + itemPathToItem, + validationMetadata.configuration(), + validationMetadata.validatedPathToSchemas(), + validationMetadata.seenClasses() + ); + JsonSchema containsSchema = JsonSchemaFactory.getInstance(contains); + if (itemValidationMetadata.validationRanEarlier(containsSchema)) { + // todo add_deeper_validated_schemas + containsPathToSchemas.add(thesePathToSchemas); + i += 1; + continue; + } + + try { + PathToSchemasMap otherPathToSchemas = JsonSchema.validate( + containsSchema, itemValue, itemValidationMetadata); + containsPathToSchemas.add(otherPathToSchemas); + } catch (ValidationException ignored) { + ; + } + } + return containsPathToSchemas; + } +} \ No newline at end of file diff --git a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/EnumValidator.java b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/EnumValidator.java index 9ec4f9beb0f..7f448bb4afa 100644 --- a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/EnumValidator.java +++ b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/EnumValidator.java @@ -4,6 +4,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; import java.math.BigDecimal; +import java.util.List; import java.util.Set; public class EnumValidator extends BigDecimalValidator implements KeywordValidator { @@ -19,7 +20,12 @@ private boolean enumContainsArg(@Nullable Object arg){ } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (enumValues.isEmpty()) { throw new ValidationException("No value can match enum because enum is empty"); } diff --git a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMaximumValidator.java b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMaximumValidator.java index 6f07d0c46e7..e4e7d58d6a0 100644 --- a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMaximumValidator.java +++ b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMaximumValidator.java @@ -3,6 +3,7 @@ import org.openapijsonschematools.client.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; public class ExclusiveMaximumValidator implements KeywordValidator { public final Number exclusiveMaximum; @@ -12,7 +13,12 @@ public ExclusiveMaximumValidator(Number exclusiveMaximum) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Number)) { return null; } diff --git a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMinimumValidator.java b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMinimumValidator.java index 0bb892d6e54..56fe9360e21 100644 --- a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMinimumValidator.java +++ b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMinimumValidator.java @@ -3,6 +3,7 @@ import org.openapijsonschematools.client.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; public class ExclusiveMinimumValidator implements KeywordValidator { public final Number exclusiveMinimum; @@ -12,7 +13,12 @@ public ExclusiveMinimumValidator(Number exclusiveMinimum) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Number)) { return null; } diff --git a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/FormatValidator.java b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/FormatValidator.java index 2f165da7db2..8753e693df5 100644 --- a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/FormatValidator.java +++ b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/FormatValidator.java @@ -6,6 +6,7 @@ import java.math.BigDecimal; import java.math.BigInteger; import java.time.format.DateTimeParseException; +import java.util.List; import java.util.UUID; public class FormatValidator implements KeywordValidator { @@ -143,7 +144,12 @@ private Void validateStringFormat(String arg, ValidationMetadata validationMetad } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (arg instanceof Number) { validateNumericFormat( (Number) arg, diff --git a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ItemsValidator.java b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ItemsValidator.java index 5d3bea9fc56..ea82ab7bd19 100644 --- a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ItemsValidator.java +++ b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ItemsValidator.java @@ -13,7 +13,12 @@ public ItemsValidator(Class items) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof List)) { return null; } diff --git a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchema.java b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchema.java index 94dcbf21106..a63aaa4f191 100644 --- a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchema.java +++ b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchema.java @@ -242,6 +242,11 @@ public static PathToSchemasMap validate( LinkedHashSet disabledKeywords = validationMetadata.configuration().disabledKeywordFlags().getKeywords(); PathToSchemasMap pathToSchemas = new PathToSchemasMap(); LinkedHashMap thisKeywordToValidator = jsonSchema.keywordToValidator; + List containsPathToSchemas = new ArrayList<>(); + KeywordValidator containsValidator = thisKeywordToValidator.get("contains"); + if (containsValidator != null) { + containsPathToSchemas = containsValidator.getContainsPathToSchemas(arg, validationMetadata); + } for (Map.Entry entry: thisKeywordToValidator.entrySet()) { String jsonKeyword = entry.getKey(); if (disabledKeywords.contains(jsonKeyword)) { @@ -254,7 +259,8 @@ public static PathToSchemasMap validate( @Nullable PathToSchemasMap otherPathToSchemas = validator.validate( jsonSchema, arg, - validationMetadata + validationMetadata, + containsPathToSchemas ); if (otherPathToSchemas == null) { continue; diff --git a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/KeywordValidator.java b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/KeywordValidator.java index 42326a9beb3..896c8b52b35 100644 --- a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/KeywordValidator.java +++ b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/KeywordValidator.java @@ -3,9 +3,21 @@ import org.openapijsonschematools.client.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.ArrayList; +import java.util.List; + public interface KeywordValidator { @Nullable PathToSchemasMap validate( - JsonSchema schema, - @Nullable Object arg, - ValidationMetadata validationMetadata) throws ValidationException; + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) throws ValidationException; + + default List getContainsPathToSchemas( + @Nullable Object arg, + ValidationMetadata validationMetadata + ) { + return new ArrayList<>(); + } } \ No newline at end of file diff --git a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxItemsValidator.java b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxItemsValidator.java index bc0e7a66932..05a3c83b919 100644 --- a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxItemsValidator.java +++ b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxItemsValidator.java @@ -13,7 +13,12 @@ public MaxItemsValidator(int maxItems) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof List)) { return null; } diff --git a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxLengthValidator.java b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxLengthValidator.java index 98986589f7b..ff8b68eb3c6 100644 --- a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxLengthValidator.java +++ b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxLengthValidator.java @@ -3,6 +3,8 @@ import org.openapijsonschematools.client.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; + public class MaxLengthValidator extends LengthValidator implements KeywordValidator { public final int maxLength; @@ -11,7 +13,12 @@ public MaxLengthValidator(int maxLength) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof String)) { return null; } diff --git a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxPropertiesValidator.java b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxPropertiesValidator.java index 985cc631a12..1bff35c458c 100644 --- a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxPropertiesValidator.java +++ b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxPropertiesValidator.java @@ -3,6 +3,7 @@ import org.openapijsonschematools.client.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; import java.util.Map; public class MaxPropertiesValidator implements KeywordValidator { @@ -13,7 +14,12 @@ public MaxPropertiesValidator(int maxProperties) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Map)) { return null; } diff --git a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaximumValidator.java b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaximumValidator.java index 77568666978..023f09353c6 100644 --- a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaximumValidator.java +++ b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaximumValidator.java @@ -3,6 +3,7 @@ import org.openapijsonschematools.client.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; public class MaximumValidator implements KeywordValidator { public final Number maximum; @@ -12,7 +13,12 @@ public MaximumValidator(Number maximum) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Number)) { return null; } diff --git a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinItemsValidator.java b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinItemsValidator.java index a9748b11707..6aa2bfa7161 100644 --- a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinItemsValidator.java +++ b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinItemsValidator.java @@ -13,7 +13,12 @@ public MinItemsValidator(int minItems) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof List)) { return null; } diff --git a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinLengthValidator.java b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinLengthValidator.java index 2d23fc896c0..35bcd82cc60 100644 --- a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinLengthValidator.java +++ b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinLengthValidator.java @@ -3,6 +3,8 @@ import org.openapijsonschematools.client.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; + public class MinLengthValidator extends LengthValidator implements KeywordValidator { public final int minLength; @@ -11,7 +13,12 @@ public MinLengthValidator(int minLength) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof String)) { return null; } diff --git a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinPropertiesValidator.java b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinPropertiesValidator.java index 8801e1872ef..247b730b5a6 100644 --- a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinPropertiesValidator.java +++ b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinPropertiesValidator.java @@ -3,6 +3,7 @@ import org.openapijsonschematools.client.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; import java.util.Map; public class MinPropertiesValidator implements KeywordValidator { @@ -13,7 +14,12 @@ public MinPropertiesValidator(int minProperties) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Map)) { return null; } diff --git a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinimumValidator.java b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinimumValidator.java index f8e9b86e1d3..e8fd4f74954 100644 --- a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinimumValidator.java +++ b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MinimumValidator.java @@ -3,6 +3,7 @@ import org.openapijsonschematools.client.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; public class MinimumValidator implements KeywordValidator { public final Number minimum; @@ -12,7 +13,12 @@ public MinimumValidator(Number minimum) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Number)) { return null; } diff --git a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MultipleOfValidator.java b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MultipleOfValidator.java index 1e5342777d4..be7ae76af99 100644 --- a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MultipleOfValidator.java +++ b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MultipleOfValidator.java @@ -3,6 +3,7 @@ import org.openapijsonschematools.client.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; import java.math.BigDecimal; public class MultipleOfValidator extends BigDecimalValidator implements KeywordValidator { @@ -13,7 +14,12 @@ public MultipleOfValidator(BigDecimal multipleOf) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Number)) { return null; } diff --git a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/NotValidator.java b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/NotValidator.java index 34410cf0de0..caafdf59470 100644 --- a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/NotValidator.java +++ b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/NotValidator.java @@ -18,7 +18,12 @@ public NotValidator(Class not) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { PathToSchemasMap pathToSchemas; try { JsonSchema notSchema = JsonSchemaFactory.getInstance(not); diff --git a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/OneOfValidator.java b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/OneOfValidator.java index 5d33ed1fefb..5206c597b6a 100644 --- a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/OneOfValidator.java +++ b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/OneOfValidator.java @@ -14,7 +14,12 @@ public OneOfValidator(List> oneOf) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { PathToSchemasMap pathToSchemas = new PathToSchemasMap(); List> validatedOneOfClasses = new ArrayList<>(); for(Class oneOfClass: oneOf) { diff --git a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/PatternValidator.java b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/PatternValidator.java index a16b14f73d3..9e28025ae9a 100644 --- a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/PatternValidator.java +++ b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/PatternValidator.java @@ -3,6 +3,7 @@ import org.openapijsonschematools.client.exceptions.ValidationException; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; import java.util.regex.Pattern; public class PatternValidator implements KeywordValidator { @@ -13,7 +14,12 @@ public PatternValidator(Pattern pattern) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof String)) { return null; } diff --git a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/PropertiesValidator.java b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/PropertiesValidator.java index ebfe8487bc8..1b8faefd80a 100644 --- a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/PropertiesValidator.java +++ b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/PropertiesValidator.java @@ -16,7 +16,12 @@ public PropertiesValidator(Map> properties) } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Map mapArg)) { return null; } diff --git a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/RequiredValidator.java b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/RequiredValidator.java index 6f625049000..660f88ac893 100644 --- a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/RequiredValidator.java +++ b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/RequiredValidator.java @@ -16,7 +16,12 @@ public RequiredValidator(Set required) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof Map)) { return null; } diff --git a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/TypeValidator.java b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/TypeValidator.java index a3028cae2db..266c77f4f46 100644 --- a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/TypeValidator.java +++ b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/TypeValidator.java @@ -15,7 +15,12 @@ public TypeValidator(Set> type) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { Class argClass; if (arg == null) { argClass = Void.class; diff --git a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/UniqueItemsValidator.java b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/UniqueItemsValidator.java index 8b443cc9b29..58376c9b7f2 100644 --- a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/UniqueItemsValidator.java +++ b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/UniqueItemsValidator.java @@ -15,7 +15,12 @@ public UniqueItemsValidator(boolean uniqueItems) { } @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { + public @Nullable PathToSchemasMap validate( + JsonSchema schema, + @Nullable Object arg, + ValidationMetadata validationMetadata, + List containsPathToSchemas + ) { if (!(arg instanceof List)) { return null; } diff --git a/samples/client/petstore/java/src/test/java/org/openapijsonschematools/client/schemas/validation/AdditionalPropertiesValidatorTest.java b/samples/client/petstore/java/src/test/java/org/openapijsonschematools/client/schemas/validation/AdditionalPropertiesValidatorTest.java index c638dba8c2d..374665ef028 100644 --- a/samples/client/petstore/java/src/test/java/org/openapijsonschematools/client/schemas/validation/AdditionalPropertiesValidatorTest.java +++ b/samples/client/petstore/java/src/test/java/org/openapijsonschematools/client/schemas/validation/AdditionalPropertiesValidatorTest.java @@ -77,7 +77,8 @@ public void testCorrectPropertySucceeds() { PathToSchemasMap pathToSchemas = validator.validate( ObjectWithPropsSchema.getInstance(), arg, - validationMetadata + validationMetadata, + new ArrayList<>() ); if (pathToSchemas == null) { throw new RuntimeException("Invalid null value for pathToSchemas for this test case"); @@ -106,7 +107,8 @@ public void testNotApplicableTypeReturnsNull() { PathToSchemasMap pathToSchemas = validator.validate( MapJsonSchema.getInstance(), 1, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemas); } @@ -128,7 +130,8 @@ public void testIncorrectPropertyValueFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( ObjectWithPropsSchema.getInstance(), arg, - validationMetadata + validationMetadata, + new ArrayList<>() )); } } \ No newline at end of file diff --git a/samples/client/petstore/java/src/test/java/org/openapijsonschematools/client/schemas/validation/FormatValidatorTest.java b/samples/client/petstore/java/src/test/java/org/openapijsonschematools/client/schemas/validation/FormatValidatorTest.java index 10f07ffc2f9..b584efdf406 100644 --- a/samples/client/petstore/java/src/test/java/org/openapijsonschematools/client/schemas/validation/FormatValidatorTest.java +++ b/samples/client/petstore/java/src/test/java/org/openapijsonschematools/client/schemas/validation/FormatValidatorTest.java @@ -23,9 +23,8 @@ public class FormatValidatorTest { ); @SuppressWarnings("nullness") - private Void assertNull(@Nullable Object object) { + private void assertNull(@Nullable Object object) { Assert.assertNull(object); - return null; } @Test @@ -34,7 +33,8 @@ public void testIntFormatSucceedsWithFloat() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), 1.0f, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -45,7 +45,8 @@ public void testIntFormatFailsWithFloat() { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), 3.14f, - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -55,7 +56,8 @@ public void testIntFormatSucceedsWithInt() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), 1, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -66,7 +68,8 @@ public void testInt32UnderMinFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), -2147483649L, - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -76,7 +79,8 @@ public void testInt32InclusiveMinSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), -2147483648, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -87,7 +91,8 @@ public void testInt32InclusiveMaxSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), 2147483647, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -98,7 +103,8 @@ public void testInt32OverMaxFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), 2147483648L, - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -109,7 +115,8 @@ public void testInt64UnderMinFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), new BigInteger("-9223372036854775809"), - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -119,7 +126,8 @@ public void testInt64InclusiveMinSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), -9223372036854775808L, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -130,7 +138,8 @@ public void testInt64InclusiveMaxSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), 9223372036854775807L, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -142,7 +151,8 @@ public void testInt64OverMaxFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), new BigInteger("9223372036854775808"), - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -152,7 +162,8 @@ public void testFloatUnderMinFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), -3.402823466385289e+38d, - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -162,7 +173,8 @@ public void testFloatInclusiveMinSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), -3.4028234663852886e+38f, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -173,7 +185,8 @@ public void testFloatInclusiveMaxSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), 3.4028234663852886e+38f, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -184,7 +197,8 @@ public void testFloatOverMaxFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), 3.402823466385289e+38d, - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -194,7 +208,8 @@ public void testDoubleUnderMinFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), new BigDecimal("-1.7976931348623157082e+308"), - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -204,7 +219,8 @@ public void testDoubleInclusiveMinSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), -1.7976931348623157E+308d, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -215,7 +231,8 @@ public void testDoubleInclusiveMaxSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), 1.7976931348623157E+308d, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -226,7 +243,8 @@ public void testDoubleOverMaxFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), new BigDecimal("1.7976931348623157082e+308"), - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -236,7 +254,8 @@ public void testInvalidNumberStringFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( NumberJsonSchema.getInstance(), "abc", - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -246,7 +265,8 @@ public void testValidFloatNumberStringSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), "3.14", - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -257,7 +277,8 @@ public void testValidIntNumberStringSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( NumberJsonSchema.getInstance(), "1", - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -268,7 +289,8 @@ public void testInvalidDateStringFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( StringJsonSchema.getInstance(), "abc", - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -278,7 +300,8 @@ public void testValidDateStringSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( StringJsonSchema.getInstance(), "2017-01-20", - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -289,7 +312,8 @@ public void testInvalidDateTimeStringFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( StringJsonSchema.getInstance(), "abc", - validationMetadata + validationMetadata, + new ArrayList<>() )); } @@ -299,8 +323,9 @@ public void testValidDateTimeStringSucceeds() { PathToSchemasMap pathToSchemasMap = validator.validate( StringJsonSchema.getInstance(), "2017-07-21T17:32:28Z", - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } -} +} \ No newline at end of file diff --git a/samples/client/petstore/java/src/test/java/org/openapijsonschematools/client/schemas/validation/ItemsValidatorTest.java b/samples/client/petstore/java/src/test/java/org/openapijsonschematools/client/schemas/validation/ItemsValidatorTest.java index 47d743c595d..84da9687817 100644 --- a/samples/client/petstore/java/src/test/java/org/openapijsonschematools/client/schemas/validation/ItemsValidatorTest.java +++ b/samples/client/petstore/java/src/test/java/org/openapijsonschematools/client/schemas/validation/ItemsValidatorTest.java @@ -16,9 +16,8 @@ public class ItemsValidatorTest { @SuppressWarnings("nullness") - private Void assertNull(@Nullable Object object) { + private void assertNull(@Nullable Object object) { Assert.assertNull(object); - return null; } @Test @@ -37,7 +36,8 @@ public void testCorrectItemsSucceeds() { PathToSchemasMap pathToSchemas = validator.validate( ListJsonSchema.getInstance(), arg, - validationMetadata + validationMetadata, + new ArrayList<>() ); if (pathToSchemas == null) { throw new RuntimeException("Invalid null value in pathToSchemas for this test case"); @@ -66,7 +66,8 @@ public void testNotApplicableTypeReturnsNull() { PathToSchemasMap pathToSchemas = validator.validate( ListJsonSchema.getInstance(), 1, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemas); } @@ -87,7 +88,8 @@ public void testIncorrectItemFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( ListJsonSchema.getInstance(), arg, - validationMetadata + validationMetadata, + new ArrayList<>() )); } } diff --git a/samples/client/petstore/java/src/test/java/org/openapijsonschematools/client/schemas/validation/JsonSchemaTest.java b/samples/client/petstore/java/src/test/java/org/openapijsonschematools/client/schemas/validation/JsonSchemaTest.java index f3a945bb88e..525222b9ad7 100644 --- a/samples/client/petstore/java/src/test/java/org/openapijsonschematools/client/schemas/validation/JsonSchemaTest.java +++ b/samples/client/petstore/java/src/test/java/org/openapijsonschematools/client/schemas/validation/JsonSchemaTest.java @@ -8,7 +8,6 @@ import org.openapijsonschematools.client.exceptions.InvalidTypeException; import org.openapijsonschematools.client.exceptions.ValidationException; -import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; diff --git a/samples/client/petstore/java/src/test/java/org/openapijsonschematools/client/schemas/validation/PropertiesValidatorTest.java b/samples/client/petstore/java/src/test/java/org/openapijsonschematools/client/schemas/validation/PropertiesValidatorTest.java index ec16e124740..8d1d3fc053b 100644 --- a/samples/client/petstore/java/src/test/java/org/openapijsonschematools/client/schemas/validation/PropertiesValidatorTest.java +++ b/samples/client/petstore/java/src/test/java/org/openapijsonschematools/client/schemas/validation/PropertiesValidatorTest.java @@ -17,9 +17,8 @@ public class PropertiesValidatorTest { @SuppressWarnings("nullness") - private Void assertNull(@Nullable Object object) { + private void assertNull(@Nullable Object object) { Assert.assertNull(object); - return null; } @Test @@ -41,7 +40,8 @@ public void testCorrectPropertySucceeds() { PathToSchemasMap pathToSchemas = validator.validate( MapJsonSchema.getInstance(), arg, - validationMetadata + validationMetadata, + new ArrayList<>() ); if (pathToSchemas == null) { throw new RuntimeException("Invalid null value for pathToSchemas for this test case"); @@ -72,7 +72,8 @@ public void testNotApplicableTypeReturnsNull() { PathToSchemasMap pathToSchemas = validator.validate( MapJsonSchema.getInstance(), 1, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemas); } @@ -96,7 +97,8 @@ public void testIncorrectPropertyValueFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( MapJsonSchema.getInstance(), arg, - validationMetadata + validationMetadata, + new ArrayList<>() )); } -} +} \ No newline at end of file diff --git a/samples/client/petstore/java/src/test/java/org/openapijsonschematools/client/schemas/validation/RequiredValidatorTest.java b/samples/client/petstore/java/src/test/java/org/openapijsonschematools/client/schemas/validation/RequiredValidatorTest.java index 23f7a37c0d8..a5dbf4a8c03 100644 --- a/samples/client/petstore/java/src/test/java/org/openapijsonschematools/client/schemas/validation/RequiredValidatorTest.java +++ b/samples/client/petstore/java/src/test/java/org/openapijsonschematools/client/schemas/validation/RequiredValidatorTest.java @@ -16,9 +16,8 @@ public class RequiredValidatorTest { @SuppressWarnings("nullness") - private Void assertNull(@Nullable Object object) { + private void assertNull(@Nullable Object object) { Assert.assertNull(object); - return null; } @Test @@ -40,7 +39,8 @@ public void testCorrectPropertySucceeds() { PathToSchemasMap pathToSchemas = validator.validate( MapJsonSchema.getInstance(), arg, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemas); } @@ -61,7 +61,8 @@ public void testNotApplicableTypeReturnsNull() { PathToSchemasMap pathToSchemas = validator.validate( MapJsonSchema.getInstance(), 1, - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemas); } @@ -85,7 +86,8 @@ public void testIncorrectPropertyFails() { Assert.assertThrows(ValidationException.class, () -> validator.validate( MapJsonSchema.getInstance(), arg, - validationMetadata + validationMetadata, + new ArrayList<>() )); } } \ No newline at end of file diff --git a/samples/client/petstore/java/src/test/java/org/openapijsonschematools/client/schemas/validation/TypeValidatorTest.java b/samples/client/petstore/java/src/test/java/org/openapijsonschematools/client/schemas/validation/TypeValidatorTest.java index 70c3049982c..362cca6e8ba 100644 --- a/samples/client/petstore/java/src/test/java/org/openapijsonschematools/client/schemas/validation/TypeValidatorTest.java +++ b/samples/client/petstore/java/src/test/java/org/openapijsonschematools/client/schemas/validation/TypeValidatorTest.java @@ -13,9 +13,8 @@ public class TypeValidatorTest { @SuppressWarnings("nullness") - private Void assertNull(@Nullable Object object) { + private void assertNull(@Nullable Object object) { Assert.assertNull(object); - return null; } @Test @@ -32,7 +31,8 @@ public void testValidateSucceeds() { @Nullable PathToSchemasMap pathToSchemasMap = validator.validate( StringJsonSchema.getInstance(), "hi", - validationMetadata + validationMetadata, + new ArrayList<>() ); assertNull(pathToSchemasMap); } @@ -51,7 +51,8 @@ public void testValidateFailsIntIsNotString() { Assert.assertThrows(ValidationException.class, () -> validator.validate( StringJsonSchema.getInstance(), 1, - validationMetadata + validationMetadata, + new ArrayList<>() )); } -} +} \ No newline at end of file From f4e960895be23a390cbc9d58f2dbb3e522612987 Mon Sep 17 00:00:00 2001 From: Justin Black Date: Thu, 11 Jan 2024 11:50:04 -0800 Subject: [PATCH 5/8] Docs updated, java 310 tests updated --- docs/generators/java.md | 2 +- .../java/.openapi-generator/FILES | 6 + samples/client/3_1_0_unit_test/java/README.md | 3 + .../schemas/ContainsKeywordValidation.md | 62 ++ .../ContainsWithNullInstanceElements.md | 48 ++ .../docs/components/schemas/ItemsContains.md | 146 +++++ .../schemas/ContainsKeywordValidation.java | 433 +++++++++++++ .../ContainsWithNullInstanceElements.java | 250 ++++++++ .../components/schemas/ItemsContains.java | 570 ++++++++++++++++++ .../schemas/validation/FakeValidator.java | 10 - .../client/schemas/validation/JsonSchema.java | 8 + .../schemas/validation/JsonSchemaInfo.java | 5 + .../ContainsKeywordValidationTest.java | 108 ++++ .../ContainsWithNullInstanceElementsTest.java | 31 + .../components/schemas/ItemsContainsTest.java | 90 +++ .../generators/JavaClientGenerator.java | 6 +- .../_Schema_anytypeOrMultitype.hbs | 6 +- .../schemas/SchemaClass/_Schema_list.hbs | 6 +- .../schemas/SchemaClass/_contains.hbs | 17 + .../schemas/docschema_fields_field.hbs | 5 +- .../schemas/validation/JsonSchema.hbs | 8 + .../schemas/validation/JsonSchemaInfo.hbs | 5 + .../3_1_0_unit_test_spec_nopaths.yaml | 96 +++ .../3_1/unit_test_spec/spec_writer.py | 3 - 24 files changed, 1898 insertions(+), 26 deletions(-) create mode 100644 samples/client/3_1_0_unit_test/java/docs/components/schemas/ContainsKeywordValidation.md create mode 100644 samples/client/3_1_0_unit_test/java/docs/components/schemas/ContainsWithNullInstanceElements.md create mode 100644 samples/client/3_1_0_unit_test/java/docs/components/schemas/ItemsContains.md create mode 100644 samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/components/schemas/ContainsKeywordValidation.java create mode 100644 samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/components/schemas/ContainsWithNullInstanceElements.java create mode 100644 samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/components/schemas/ItemsContains.java delete mode 100644 samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/FakeValidator.java create mode 100644 samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/components/schemas/ContainsKeywordValidationTest.java create mode 100644 samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/components/schemas/ContainsWithNullInstanceElementsTest.java create mode 100644 samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/components/schemas/ItemsContainsTest.java create mode 100644 src/main/resources/java/src/main/java/packagename/components/schemas/SchemaClass/_contains.hbs diff --git a/docs/generators/java.md b/docs/generators/java.md index 318157e4bb9..1df76c075fc 100644 --- a/docs/generators/java.md +++ b/docs/generators/java.md @@ -277,7 +277,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |AllOf|✓|OAS2,OAS3 |AnyOf|✓|OAS3 |Const|✓|OAS3 -|Contains|✗|OAS3 +|Contains|✓|OAS3 |Default|✓|OAS2,OAS3 |DependentRequired|✗|OAS3 |DependentSchemas|✗|OAS3 diff --git a/samples/client/3_1_0_unit_test/java/.openapi-generator/FILES b/samples/client/3_1_0_unit_test/java/.openapi-generator/FILES index a9810f9cfef..5f8c5d29a21 100644 --- a/samples/client/3_1_0_unit_test/java/.openapi-generator/FILES +++ b/samples/client/3_1_0_unit_test/java/.openapi-generator/FILES @@ -22,6 +22,8 @@ docs/components/schemas/ByInt.md docs/components/schemas/ByNumber.md docs/components/schemas/BySmallNumber.md docs/components/schemas/ConstNulCharactersInStrings.md +docs/components/schemas/ContainsKeywordValidation.md +docs/components/schemas/ContainsWithNullInstanceElements.md docs/components/schemas/DateFormat.md docs/components/schemas/DateTimeFormat.md docs/components/schemas/DurationFormat.md @@ -45,6 +47,7 @@ docs/components/schemas/Ipv4Format.md docs/components/schemas/Ipv6Format.md docs/components/schemas/IriFormat.md docs/components/schemas/IriReferenceFormat.md +docs/components/schemas/ItemsContains.md docs/components/schemas/ItemsWithNullInstanceElements.md docs/components/schemas/JsonPointerFormat.md docs/components/schemas/MaxcontainsWithoutContainsIsIgnored.md @@ -133,6 +136,8 @@ src/main/java/org/openapijsonschematools/client/components/schemas/ByInt.java src/main/java/org/openapijsonschematools/client/components/schemas/ByNumber.java src/main/java/org/openapijsonschematools/client/components/schemas/BySmallNumber.java src/main/java/org/openapijsonschematools/client/components/schemas/ConstNulCharactersInStrings.java +src/main/java/org/openapijsonschematools/client/components/schemas/ContainsKeywordValidation.java +src/main/java/org/openapijsonschematools/client/components/schemas/ContainsWithNullInstanceElements.java src/main/java/org/openapijsonschematools/client/components/schemas/DateFormat.java src/main/java/org/openapijsonschematools/client/components/schemas/DateTimeFormat.java src/main/java/org/openapijsonschematools/client/components/schemas/DurationFormat.java @@ -156,6 +161,7 @@ src/main/java/org/openapijsonschematools/client/components/schemas/Ipv4Format.ja src/main/java/org/openapijsonschematools/client/components/schemas/Ipv6Format.java src/main/java/org/openapijsonschematools/client/components/schemas/IriFormat.java src/main/java/org/openapijsonschematools/client/components/schemas/IriReferenceFormat.java +src/main/java/org/openapijsonschematools/client/components/schemas/ItemsContains.java src/main/java/org/openapijsonschematools/client/components/schemas/ItemsWithNullInstanceElements.java src/main/java/org/openapijsonschematools/client/components/schemas/JsonPointerFormat.java src/main/java/org/openapijsonschematools/client/components/schemas/MaxcontainsWithoutContainsIsIgnored.java diff --git a/samples/client/3_1_0_unit_test/java/README.md b/samples/client/3_1_0_unit_test/java/README.md index 62545a2285f..3c7156969eb 100644 --- a/samples/client/3_1_0_unit_test/java/README.md +++ b/samples/client/3_1_0_unit_test/java/README.md @@ -180,6 +180,8 @@ allowed input and output types. | [ByNumber.ByNumber1](docs/components/schemas/ByNumber.md#bynumber1) | | | [BySmallNumber.BySmallNumber1](docs/components/schemas/BySmallNumber.md#bysmallnumber1) | | | [ConstNulCharactersInStrings.ConstNulCharactersInStrings1](docs/components/schemas/ConstNulCharactersInStrings.md#constnulcharactersinstrings1) | | +| [ContainsKeywordValidation.ContainsKeywordValidation1](docs/components/schemas/ContainsKeywordValidation.md#containskeywordvalidation1) | | +| [ContainsWithNullInstanceElements.ContainsWithNullInstanceElements1](docs/components/schemas/ContainsWithNullInstanceElements.md#containswithnullinstanceelements1) | | | [DateFormat.DateFormat1](docs/components/schemas/DateFormat.md#dateformat1) | | | [DateTimeFormat.DateTimeFormat1](docs/components/schemas/DateTimeFormat.md#datetimeformat1) | | | [DurationFormat.DurationFormat1](docs/components/schemas/DurationFormat.md#durationformat1) | | @@ -203,6 +205,7 @@ allowed input and output types. | [Ipv6Format.Ipv6Format1](docs/components/schemas/Ipv6Format.md#ipv6format1) | | | [IriFormat.IriFormat1](docs/components/schemas/IriFormat.md#iriformat1) | | | [IriReferenceFormat.IriReferenceFormat1](docs/components/schemas/IriReferenceFormat.md#irireferenceformat1) | | +| [ItemsContains.ItemsContains1](docs/components/schemas/ItemsContains.md#itemscontains1) | | | [ItemsWithNullInstanceElements.ItemsWithNullInstanceElements1](docs/components/schemas/ItemsWithNullInstanceElements.md#itemswithnullinstanceelements1) | | | [JsonPointerFormat.JsonPointerFormat1](docs/components/schemas/JsonPointerFormat.md#jsonpointerformat1) | | | [MaxcontainsWithoutContainsIsIgnored.MaxcontainsWithoutContainsIsIgnored1](docs/components/schemas/MaxcontainsWithoutContainsIsIgnored.md#maxcontainswithoutcontainsisignored1) | | diff --git a/samples/client/3_1_0_unit_test/java/docs/components/schemas/ContainsKeywordValidation.md b/samples/client/3_1_0_unit_test/java/docs/components/schemas/ContainsKeywordValidation.md new file mode 100644 index 00000000000..d9ae768f787 --- /dev/null +++ b/samples/client/3_1_0_unit_test/java/docs/components/schemas/ContainsKeywordValidation.md @@ -0,0 +1,62 @@ +# ContainsKeywordValidation +org.openapijsonschematools.client.components.schemas.ContainsKeywordValidation.java +public class ContainsKeywordValidation + +A class that contains necessary nested +- schema classes (which validate payloads), extends JsonSchema + +## Nested Class Summary +| Modifier and Type | Class and Description | +| ----------------- | ---------------------- | +| static class | [ContainsKeywordValidation.ContainsKeywordValidation1](#containskeywordvalidation1)
schema class | +| static class | [ContainsKeywordValidation.Contains](#contains)
schema class | + +## ContainsKeywordValidation1 +public static class ContainsKeywordValidation1
+extends JsonSchema + +A schema class that validates payloads + +### Field Summary +| Modifier and Type | Field and Description | +| ----------------- | ---------------------- | +| Class | contains = [Contains.class](#contains) | + +### Method Summary +| Modifier and Type | Method and Description | +| ----------------- | ---------------------- | +| String | validate(String arg, SchemaConfiguration configuration) | +| Void | validate(Void arg, SchemaConfiguration configuration) | +| int | validate(int arg, SchemaConfiguration configuration) | +| long | validate(long arg, SchemaConfiguration configuration) | +| float | validate(float arg, SchemaConfiguration configuration) | +| double | validate(double arg, SchemaConfiguration configuration) | +| boolean | validate(boolean arg, SchemaConfiguration configuration) | +| FrozenMap | validate(Map<?, ?> arg, SchemaConfiguration configuration) | +| FrozenList<@Nullable Object> | validate(List arg, SchemaConfiguration configuration) | +| @Nullable Object | validate(@Nullable Object arg, SchemaConfiguration configuration) | +## Contains +public static class Contains
+extends JsonSchema + +A schema class that validates payloads + +### Field Summary +| Modifier and Type | Field and Description | +| ----------------- | ---------------------- | +| Number | minimum = 5 | + +### Method Summary +| Modifier and Type | Method and Description | +| ----------------- | ---------------------- | +| String | validate(String arg, SchemaConfiguration configuration) | +| Void | validate(Void arg, SchemaConfiguration configuration) | +| int | validate(int arg, SchemaConfiguration configuration) | +| long | validate(long arg, SchemaConfiguration configuration) | +| float | validate(float arg, SchemaConfiguration configuration) | +| double | validate(double arg, SchemaConfiguration configuration) | +| boolean | validate(boolean arg, SchemaConfiguration configuration) | +| FrozenMap | validate(Map<?, ?> arg, SchemaConfiguration configuration) | +| FrozenList<@Nullable Object> | validate(List arg, SchemaConfiguration configuration) | +| @Nullable Object | validate(@Nullable Object arg, SchemaConfiguration configuration) | +[[Back to top]](#top) [[Back to Component Schemas]](../../../README.md#Component-Schemas) [[Back to README]](../../../README.md) diff --git a/samples/client/3_1_0_unit_test/java/docs/components/schemas/ContainsWithNullInstanceElements.md b/samples/client/3_1_0_unit_test/java/docs/components/schemas/ContainsWithNullInstanceElements.md new file mode 100644 index 00000000000..4c478485127 --- /dev/null +++ b/samples/client/3_1_0_unit_test/java/docs/components/schemas/ContainsWithNullInstanceElements.md @@ -0,0 +1,48 @@ +# ContainsWithNullInstanceElements +org.openapijsonschematools.client.components.schemas.ContainsWithNullInstanceElements.java +public class ContainsWithNullInstanceElements + +A class that contains necessary nested +- schema classes (which validate payloads), extends JsonSchema + +## Nested Class Summary +| Modifier and Type | Class and Description | +| ----------------- | ---------------------- | +| static class | [ContainsWithNullInstanceElements.ContainsWithNullInstanceElements1](#containswithnullinstanceelements1)
schema class | +| static class | [ContainsWithNullInstanceElements.Contains](#contains)
schema class | + +## ContainsWithNullInstanceElements1 +public static class ContainsWithNullInstanceElements1
+extends JsonSchema + +A schema class that validates payloads + +### Field Summary +| Modifier and Type | Field and Description | +| ----------------- | ---------------------- | +| Class | contains = [Contains.class](#contains) | + +### Method Summary +| Modifier and Type | Method and Description | +| ----------------- | ---------------------- | +| String | validate(String arg, SchemaConfiguration configuration) | +| Void | validate(Void arg, SchemaConfiguration configuration) | +| int | validate(int arg, SchemaConfiguration configuration) | +| long | validate(long arg, SchemaConfiguration configuration) | +| float | validate(float arg, SchemaConfiguration configuration) | +| double | validate(double arg, SchemaConfiguration configuration) | +| boolean | validate(boolean arg, SchemaConfiguration configuration) | +| FrozenMap | validate(Map<?, ?> arg, SchemaConfiguration configuration) | +| FrozenList<@Nullable Object> | validate(List arg, SchemaConfiguration configuration) | +| @Nullable Object | validate(@Nullable Object arg, SchemaConfiguration configuration) | +## Contains +public static class Contains
+extends NullJsonSchema + +A schema class that validates payloads + +| Methods Inherited from class org.openapijsonschematools.client.schemas.NumberJsonSchema | +| ------------------------------------------------------------------ | +| validate | + +[[Back to top]](#top) [[Back to Component Schemas]](../../../README.md#Component-Schemas) [[Back to README]](../../../README.md) diff --git a/samples/client/3_1_0_unit_test/java/docs/components/schemas/ItemsContains.md b/samples/client/3_1_0_unit_test/java/docs/components/schemas/ItemsContains.md new file mode 100644 index 00000000000..dfae9a82aac --- /dev/null +++ b/samples/client/3_1_0_unit_test/java/docs/components/schemas/ItemsContains.md @@ -0,0 +1,146 @@ +# ItemsContains +org.openapijsonschematools.client.components.schemas.ItemsContains.java +public class ItemsContains + +A class that contains necessary nested +- schema classes (which validate payloads), extends JsonSchema +- classes to store validated list payloads, extends FrozenList +- classes to build inputs for list payloads + +## Nested Class Summary +| Modifier and Type | Class and Description | +| ----------------- | ---------------------- | +| static class | [ItemsContains.ItemsContains1](#itemscontains1)
schema class | +| static class | [ItemsContains.ItemsContainsListBuilder](#itemscontainslistbuilder)
builder for List payloads | +| static class | [ItemsContains.ItemsContainsList](#itemscontainslist)
output class for List payloads | +| static class | [ItemsContains.Items](#items)
schema class | +| static class | [ItemsContains.Contains](#contains)
schema class | + +## ItemsContains1 +public static class ItemsContains1
+extends JsonSchema + +A schema class that validates payloads + +### Code Sample +``` +import org.openapijsonschematools.client.configurations.JsonSchemaKeywordFlags; +import org.openapijsonschematools.client.configurations.SchemaConfiguration; +import org.openapijsonschematools.client.exceptions.ValidationException; +import org.openapijsonschematools.client.schemas.validation.MapUtils; +import org.openapijsonschematools.client.schemas.validation.FrozenList; +import org.openapijsonschematools.client.schemas.validation.FrozenMap; + +import java.util.Arrays; +import java.util.List; +import java.util.AbstractMap; + +static final SchemaConfiguration configuration = new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone()); + +// List validation +ItemsContains.ItemsContainsList validatedPayload = + ItemsContains.ItemsContains1.validate( + new ItemsContains.ItemsContainsListBuilder() + .build(), + configuration +); +``` + +### Field Summary +| Modifier and Type | Field and Description | +| ----------------- | ---------------------- | +| Set> | type = Set.of(List.class) | +| Class | items = [Items.class](#items) | +| Class | contains = [Contains.class](#contains) | + +### Method Summary +| Modifier and Type | Method and Description | +| ----------------- | ---------------------- | +| [ItemsContainsList](#itemscontainslist) | validate([List](#itemscontainslistbuilder) arg, SchemaConfiguration configuration) | +| @Nullable Object | validate(@Nullable Object arg, SchemaConfiguration configuration) | +## ItemsContainsListBuilder +public class ItemsContainsListBuilder
+builder for `List<@Nullable Object>` + +A class that builds the List input type + +### Constructor Summary +| Constructor and Description | +| --------------------------- | +| ItemsContainsListBuilder()
Creates an empty list | +| ItemsContainsListBuilder(List<@Nullable Object> items)
Stores the items in a list | + +### Method Summary +| Modifier and Type | Method and Description | +| ----------------- | ---------------------- | +| ItemsContainsListBuilder | add(Void item) | +| ItemsContainsListBuilder | add(boolean item) | +| ItemsContainsListBuilder | add(String item) | +| ItemsContainsListBuilder | add(int item) | +| ItemsContainsListBuilder | add(float item) | +| ItemsContainsListBuilder | add(long item) | +| ItemsContainsListBuilder | add(double item) | +| ItemsContainsListBuilder | add(List item) | +| ItemsContainsListBuilder | add(Map item) | +| List<@Nullable Object> | build()
Returns list input that should be used with Schema.validate | + +## ItemsContainsList +public class ItemsContainsList
+extends `FrozenList<@Nullable Object>` + +A class to store validated List payloads + +### Method Summary +| Modifier and Type | Method and Description | +| ----------------- | ---------------------- | +| static [ItemsContainsList](#itemscontainslist) | of([List](#itemscontainslistbuilder) arg, SchemaConfiguration configuration) | + +## Items +public static class Items
+extends JsonSchema + +A schema class that validates payloads + +### Field Summary +| Modifier and Type | Field and Description | +| ----------------- | ---------------------- | +| BigDecimal | multipleOf = new BigDecimal("2") | + +### Method Summary +| Modifier and Type | Method and Description | +| ----------------- | ---------------------- | +| String | validate(String arg, SchemaConfiguration configuration) | +| Void | validate(Void arg, SchemaConfiguration configuration) | +| int | validate(int arg, SchemaConfiguration configuration) | +| long | validate(long arg, SchemaConfiguration configuration) | +| float | validate(float arg, SchemaConfiguration configuration) | +| double | validate(double arg, SchemaConfiguration configuration) | +| boolean | validate(boolean arg, SchemaConfiguration configuration) | +| FrozenMap | validate(Map<?, ?> arg, SchemaConfiguration configuration) | +| FrozenList<@Nullable Object> | validate(List arg, SchemaConfiguration configuration) | +| @Nullable Object | validate(@Nullable Object arg, SchemaConfiguration configuration) | +## Contains +public static class Contains
+extends JsonSchema + +A schema class that validates payloads + +### Field Summary +| Modifier and Type | Field and Description | +| ----------------- | ---------------------- | +| BigDecimal | multipleOf = new BigDecimal("3") | + +### Method Summary +| Modifier and Type | Method and Description | +| ----------------- | ---------------------- | +| String | validate(String arg, SchemaConfiguration configuration) | +| Void | validate(Void arg, SchemaConfiguration configuration) | +| int | validate(int arg, SchemaConfiguration configuration) | +| long | validate(long arg, SchemaConfiguration configuration) | +| float | validate(float arg, SchemaConfiguration configuration) | +| double | validate(double arg, SchemaConfiguration configuration) | +| boolean | validate(boolean arg, SchemaConfiguration configuration) | +| FrozenMap | validate(Map<?, ?> arg, SchemaConfiguration configuration) | +| FrozenList<@Nullable Object> | validate(List arg, SchemaConfiguration configuration) | +| @Nullable Object | validate(@Nullable Object arg, SchemaConfiguration configuration) | +[[Back to top]](#top) [[Back to Component Schemas]](../../../README.md#Component-Schemas) [[Back to README]](../../../README.md) diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/components/schemas/ContainsKeywordValidation.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/components/schemas/ContainsKeywordValidation.java new file mode 100644 index 00000000000..80427c49849 --- /dev/null +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/components/schemas/ContainsKeywordValidation.java @@ -0,0 +1,433 @@ +package org.openapijsonschematools.client.components.schemas; +import java.time.LocalDate; +import java.time.ZonedDateTime; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.UUID; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.openapijsonschematools.client.configurations.JsonSchemaKeywordFlags; +import org.openapijsonschematools.client.configurations.SchemaConfiguration; +import org.openapijsonschematools.client.exceptions.InvalidAdditionalPropertyException; +import org.openapijsonschematools.client.exceptions.InvalidTypeException; +import org.openapijsonschematools.client.exceptions.UnsetPropertyException; +import org.openapijsonschematools.client.exceptions.ValidationException; +import org.openapijsonschematools.client.schemas.UnsetAddPropsSetter; +import org.openapijsonschematools.client.schemas.validation.BooleanSchemaValidator; +import org.openapijsonschematools.client.schemas.validation.FrozenList; +import org.openapijsonschematools.client.schemas.validation.FrozenMap; +import org.openapijsonschematools.client.schemas.validation.JsonSchema; +import org.openapijsonschematools.client.schemas.validation.JsonSchemaInfo; +import org.openapijsonschematools.client.schemas.validation.ListSchemaValidator; +import org.openapijsonschematools.client.schemas.validation.MapSchemaValidator; +import org.openapijsonschematools.client.schemas.validation.NullSchemaValidator; +import org.openapijsonschematools.client.schemas.validation.NumberSchemaValidator; +import org.openapijsonschematools.client.schemas.validation.PathToSchemasMap; +import org.openapijsonschematools.client.schemas.validation.StringSchemaValidator; +import org.openapijsonschematools.client.schemas.validation.ValidationMetadata; + +public class ContainsKeywordValidation { + // nest classes so all schemas and input/output classes can be public + + + public static class Contains extends JsonSchema implements NullSchemaValidator, BooleanSchemaValidator, NumberSchemaValidator, StringSchemaValidator, ListSchemaValidator>, MapSchemaValidator> { + private static @Nullable Contains instance = null; + + protected Contains() { + super(new JsonSchemaInfo() + .minimum(5) + ); + } + + public static Contains getInstance() { + if (instance == null) { + instance = new Contains(); + } + return instance; + } + + @Override + public Void validate(Void arg, SchemaConfiguration configuration) throws ValidationException, InvalidTypeException { + Set> pathSet = new HashSet<>(); + List pathToItem = List.of("args[0]"); + Void castArg = castToAllowedTypes(arg, pathToItem, pathSet); + SchemaConfiguration usedConfiguration = Objects.requireNonNullElseGet(configuration, () -> new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone())); + PathToSchemasMap validatedPathToSchemas = new PathToSchemasMap(); + ValidationMetadata validationMetadata = new ValidationMetadata(pathToItem, usedConfiguration, validatedPathToSchemas, new LinkedHashSet<>()); + getPathToSchemas(this, castArg, validationMetadata, pathSet); + return castArg; + } + + @Override + public boolean validate(boolean arg, SchemaConfiguration configuration) throws ValidationException, InvalidTypeException { + Set> pathSet = new HashSet<>(); + List pathToItem = List.of("args[0]"); + boolean castArg = castToAllowedTypes(arg, pathToItem, pathSet); + SchemaConfiguration usedConfiguration = Objects.requireNonNullElseGet(configuration, () -> new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone())); + PathToSchemasMap validatedPathToSchemas = new PathToSchemasMap(); + ValidationMetadata validationMetadata = new ValidationMetadata(pathToItem, usedConfiguration, validatedPathToSchemas, new LinkedHashSet<>()); + getPathToSchemas(this, castArg, validationMetadata, pathSet); + return castArg; + } + + @Override + public Number validate(Number arg, SchemaConfiguration configuration) throws ValidationException, InvalidTypeException { + Set> pathSet = new HashSet<>(); + List pathToItem = List.of("args[0]"); + Number castArg = castToAllowedTypes(arg, pathToItem, pathSet); + SchemaConfiguration usedConfiguration = Objects.requireNonNullElseGet(configuration, () -> new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone())); + PathToSchemasMap validatedPathToSchemas = new PathToSchemasMap(); + ValidationMetadata validationMetadata = new ValidationMetadata(pathToItem, usedConfiguration, validatedPathToSchemas, new LinkedHashSet<>()); + getPathToSchemas(this, castArg, validationMetadata, pathSet); + return castArg; + } + + public int validate(int arg, SchemaConfiguration configuration) { + return (int) validate((Number) arg, configuration); + } + + public long validate(long arg, SchemaConfiguration configuration) { + return (long) validate((Number) arg, configuration); + } + + public float validate(float arg, SchemaConfiguration configuration) { + return (float) validate((Number) arg, configuration); + } + + public double validate(double arg, SchemaConfiguration configuration) { + return (double) validate((Number) arg, configuration); + } + + @Override + public String validate(String arg, SchemaConfiguration configuration) throws ValidationException, InvalidTypeException { + Set> pathSet = new HashSet<>(); + List pathToItem = List.of("args[0]"); + String castArg = castToAllowedTypes(arg, pathToItem, pathSet); + SchemaConfiguration usedConfiguration = Objects.requireNonNullElseGet(configuration, () -> new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone())); + PathToSchemasMap validatedPathToSchemas = new PathToSchemasMap(); + ValidationMetadata validationMetadata = new ValidationMetadata(pathToItem, usedConfiguration, validatedPathToSchemas, new LinkedHashSet<>()); + getPathToSchemas(this, castArg, validationMetadata, pathSet); + return castArg; + } + + public String validate(LocalDate arg, SchemaConfiguration configuration) throws ValidationException { + return validate(arg.toString(), configuration); + } + + public String validate(ZonedDateTime arg, SchemaConfiguration configuration) throws ValidationException { + return validate(arg.toString(), configuration); + } + + public String validate(UUID arg, SchemaConfiguration configuration) throws ValidationException { + return validate(arg.toString(), configuration); + } + + @Override + public FrozenList<@Nullable Object> getNewInstance(List arg, List pathToItem, PathToSchemasMap pathToSchemas) { + List<@Nullable Object> items = new ArrayList<>(); + int i = 0; + for (Object item: arg) { + List itemPathToItem = new ArrayList<>(pathToItem); + itemPathToItem.add(i); + LinkedHashMap schemas = pathToSchemas.get(itemPathToItem); + if (schemas == null) { + throw new InvalidTypeException("Validation result is invalid, schemas must exist for a pathToItem"); + } + JsonSchema itemSchema = schemas.entrySet().iterator().next().getKey(); + @Nullable Object itemInstance = itemSchema.getNewInstance(item, itemPathToItem, pathToSchemas); + items.add(itemInstance); + i += 1; + } + FrozenList<@Nullable Object> newInstanceItems = new FrozenList<>(items); + return newInstanceItems; + } + + public FrozenList<@Nullable Object> validate(List arg, SchemaConfiguration configuration) throws ValidationException { + Set> pathSet = new HashSet<>(); + List pathToItem = List.of("args[0"); + List castArg = castToAllowedTypes(arg, pathToItem, pathSet); + SchemaConfiguration usedConfiguration = Objects.requireNonNullElseGet(configuration, () -> new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone())); + ValidationMetadata validationMetadata = new ValidationMetadata(pathToItem, usedConfiguration, new PathToSchemasMap(), new LinkedHashSet<>()); + PathToSchemasMap pathToSchemasMap = getPathToSchemas(this, castArg, validationMetadata, pathSet); + return getNewInstance(castArg, validationMetadata.pathToItem(), pathToSchemasMap); + } + + @Override + public FrozenMap<@Nullable Object> getNewInstance(Map arg, List pathToItem, PathToSchemasMap pathToSchemas) { + LinkedHashMap properties = new LinkedHashMap<>(); + for(Map.Entry entry: arg.entrySet()) { + @Nullable Object entryKey = entry.getKey(); + if (!(entryKey instanceof String)) { + throw new InvalidTypeException("Invalid non-string key value"); + } + String propertyName = (String) entryKey; + List propertyPathToItem = new ArrayList<>(pathToItem); + propertyPathToItem.add(propertyName); + Object value = entry.getValue(); + LinkedHashMap schemas = pathToSchemas.get(propertyPathToItem); + if (schemas == null) { + throw new InvalidTypeException("Validation result is invalid, schemas must exist for a pathToItem"); + } + JsonSchema propertySchema = schemas.entrySet().iterator().next().getKey(); + @Nullable Object propertyInstance = propertySchema.getNewInstance(value, propertyPathToItem, pathToSchemas); + properties.put(propertyName, propertyInstance); + } + FrozenMap<@Nullable Object> castProperties = new FrozenMap<>(properties); + return castProperties; + } + + public FrozenMap<@Nullable Object> validate(Map arg, SchemaConfiguration configuration) throws ValidationException, InvalidTypeException { + Set> pathSet = new HashSet<>(); + List pathToItem = List.of("args[0]"); + Map castArg = castToAllowedTypes(arg, pathToItem, pathSet); + SchemaConfiguration usedConfiguration = Objects.requireNonNullElseGet(configuration, () -> new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone())); + PathToSchemasMap validatedPathToSchemas = new PathToSchemasMap(); + ValidationMetadata validationMetadata = new ValidationMetadata(pathToItem, usedConfiguration, validatedPathToSchemas, new LinkedHashSet<>()); + PathToSchemasMap pathToSchemasMap = getPathToSchemas(this, castArg, validationMetadata, pathSet); + return getNewInstance(castArg, validationMetadata.pathToItem(), pathToSchemasMap); + } + + @Override + public @Nullable Object validate(@Nullable Object arg, SchemaConfiguration configuration) throws ValidationException, InvalidTypeException { + if (arg == null) { + return validate((Void) null, configuration); + } else if (arg instanceof Boolean) { + boolean boolArg = (Boolean) arg; + return validate(boolArg, configuration); + } else if (arg instanceof Number) { + return validate((Number) arg, configuration); + } else if (arg instanceof String) { + return validate((String) arg, configuration); + } else if (arg instanceof List) { + return validate((List) arg, configuration); + } else if (arg instanceof Map) { + return validate((Map) arg, configuration); + } + throw new InvalidTypeException("Invalid input type="+getClass(arg)+". It can't be validated by this schema"); + } + @Override + public @Nullable Object getNewInstance(@Nullable Object arg, List pathToItem, PathToSchemasMap pathToSchemas) throws InvalidTypeException { + if (arg == null) { + return getNewInstance((Void) null, pathToItem, pathToSchemas); + } else if (arg instanceof Boolean) { + boolean boolArg = (Boolean) arg; + return getNewInstance(boolArg, pathToItem, pathToSchemas); + } else if (arg instanceof Number) { + return getNewInstance((Number) arg, pathToItem, pathToSchemas); + } else if (arg instanceof String) { + return getNewInstance((String) arg, pathToItem, pathToSchemas); + } else if (arg instanceof List) { + return getNewInstance((List) arg, pathToItem, pathToSchemas); + } else if (arg instanceof Map) { + return getNewInstance((Map) arg, pathToItem, pathToSchemas); + } + throw new InvalidTypeException("Invalid input type="+getClass(arg)+". It can't be instantiated by this schema"); + } + } + + public static class ContainsKeywordValidation1 extends JsonSchema implements NullSchemaValidator, BooleanSchemaValidator, NumberSchemaValidator, StringSchemaValidator, ListSchemaValidator>, MapSchemaValidator> { + /* + NOTE: This class is auto generated by OpenAPI JSON Schema Generator. + Ref: https://github.com/openapi-json-schema-tools/openapi-json-schema-generator + + Do not edit the class manually. + */ + private static @Nullable ContainsKeywordValidation1 instance = null; + + protected ContainsKeywordValidation1() { + super(new JsonSchemaInfo() + .contains(Contains.class) + ); + } + + public static ContainsKeywordValidation1 getInstance() { + if (instance == null) { + instance = new ContainsKeywordValidation1(); + } + return instance; + } + + @Override + public Void validate(Void arg, SchemaConfiguration configuration) throws ValidationException, InvalidTypeException { + Set> pathSet = new HashSet<>(); + List pathToItem = List.of("args[0]"); + Void castArg = castToAllowedTypes(arg, pathToItem, pathSet); + SchemaConfiguration usedConfiguration = Objects.requireNonNullElseGet(configuration, () -> new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone())); + PathToSchemasMap validatedPathToSchemas = new PathToSchemasMap(); + ValidationMetadata validationMetadata = new ValidationMetadata(pathToItem, usedConfiguration, validatedPathToSchemas, new LinkedHashSet<>()); + getPathToSchemas(this, castArg, validationMetadata, pathSet); + return castArg; + } + + @Override + public boolean validate(boolean arg, SchemaConfiguration configuration) throws ValidationException, InvalidTypeException { + Set> pathSet = new HashSet<>(); + List pathToItem = List.of("args[0]"); + boolean castArg = castToAllowedTypes(arg, pathToItem, pathSet); + SchemaConfiguration usedConfiguration = Objects.requireNonNullElseGet(configuration, () -> new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone())); + PathToSchemasMap validatedPathToSchemas = new PathToSchemasMap(); + ValidationMetadata validationMetadata = new ValidationMetadata(pathToItem, usedConfiguration, validatedPathToSchemas, new LinkedHashSet<>()); + getPathToSchemas(this, castArg, validationMetadata, pathSet); + return castArg; + } + + @Override + public Number validate(Number arg, SchemaConfiguration configuration) throws ValidationException, InvalidTypeException { + Set> pathSet = new HashSet<>(); + List pathToItem = List.of("args[0]"); + Number castArg = castToAllowedTypes(arg, pathToItem, pathSet); + SchemaConfiguration usedConfiguration = Objects.requireNonNullElseGet(configuration, () -> new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone())); + PathToSchemasMap validatedPathToSchemas = new PathToSchemasMap(); + ValidationMetadata validationMetadata = new ValidationMetadata(pathToItem, usedConfiguration, validatedPathToSchemas, new LinkedHashSet<>()); + getPathToSchemas(this, castArg, validationMetadata, pathSet); + return castArg; + } + + public int validate(int arg, SchemaConfiguration configuration) { + return (int) validate((Number) arg, configuration); + } + + public long validate(long arg, SchemaConfiguration configuration) { + return (long) validate((Number) arg, configuration); + } + + public float validate(float arg, SchemaConfiguration configuration) { + return (float) validate((Number) arg, configuration); + } + + public double validate(double arg, SchemaConfiguration configuration) { + return (double) validate((Number) arg, configuration); + } + + @Override + public String validate(String arg, SchemaConfiguration configuration) throws ValidationException, InvalidTypeException { + Set> pathSet = new HashSet<>(); + List pathToItem = List.of("args[0]"); + String castArg = castToAllowedTypes(arg, pathToItem, pathSet); + SchemaConfiguration usedConfiguration = Objects.requireNonNullElseGet(configuration, () -> new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone())); + PathToSchemasMap validatedPathToSchemas = new PathToSchemasMap(); + ValidationMetadata validationMetadata = new ValidationMetadata(pathToItem, usedConfiguration, validatedPathToSchemas, new LinkedHashSet<>()); + getPathToSchemas(this, castArg, validationMetadata, pathSet); + return castArg; + } + + public String validate(LocalDate arg, SchemaConfiguration configuration) throws ValidationException { + return validate(arg.toString(), configuration); + } + + public String validate(ZonedDateTime arg, SchemaConfiguration configuration) throws ValidationException { + return validate(arg.toString(), configuration); + } + + public String validate(UUID arg, SchemaConfiguration configuration) throws ValidationException { + return validate(arg.toString(), configuration); + } + + @Override + public FrozenList<@Nullable Object> getNewInstance(List arg, List pathToItem, PathToSchemasMap pathToSchemas) { + List<@Nullable Object> items = new ArrayList<>(); + int i = 0; + for (Object item: arg) { + List itemPathToItem = new ArrayList<>(pathToItem); + itemPathToItem.add(i); + LinkedHashMap schemas = pathToSchemas.get(itemPathToItem); + if (schemas == null) { + throw new InvalidTypeException("Validation result is invalid, schemas must exist for a pathToItem"); + } + JsonSchema itemSchema = schemas.entrySet().iterator().next().getKey(); + @Nullable Object itemInstance = itemSchema.getNewInstance(item, itemPathToItem, pathToSchemas); + items.add(itemInstance); + i += 1; + } + FrozenList<@Nullable Object> newInstanceItems = new FrozenList<>(items); + return newInstanceItems; + } + + public FrozenList<@Nullable Object> validate(List arg, SchemaConfiguration configuration) throws ValidationException { + Set> pathSet = new HashSet<>(); + List pathToItem = List.of("args[0"); + List castArg = castToAllowedTypes(arg, pathToItem, pathSet); + SchemaConfiguration usedConfiguration = Objects.requireNonNullElseGet(configuration, () -> new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone())); + ValidationMetadata validationMetadata = new ValidationMetadata(pathToItem, usedConfiguration, new PathToSchemasMap(), new LinkedHashSet<>()); + PathToSchemasMap pathToSchemasMap = getPathToSchemas(this, castArg, validationMetadata, pathSet); + return getNewInstance(castArg, validationMetadata.pathToItem(), pathToSchemasMap); + } + + @Override + public FrozenMap<@Nullable Object> getNewInstance(Map arg, List pathToItem, PathToSchemasMap pathToSchemas) { + LinkedHashMap properties = new LinkedHashMap<>(); + for(Map.Entry entry: arg.entrySet()) { + @Nullable Object entryKey = entry.getKey(); + if (!(entryKey instanceof String)) { + throw new InvalidTypeException("Invalid non-string key value"); + } + String propertyName = (String) entryKey; + List propertyPathToItem = new ArrayList<>(pathToItem); + propertyPathToItem.add(propertyName); + Object value = entry.getValue(); + LinkedHashMap schemas = pathToSchemas.get(propertyPathToItem); + if (schemas == null) { + throw new InvalidTypeException("Validation result is invalid, schemas must exist for a pathToItem"); + } + JsonSchema propertySchema = schemas.entrySet().iterator().next().getKey(); + @Nullable Object propertyInstance = propertySchema.getNewInstance(value, propertyPathToItem, pathToSchemas); + properties.put(propertyName, propertyInstance); + } + FrozenMap<@Nullable Object> castProperties = new FrozenMap<>(properties); + return castProperties; + } + + public FrozenMap<@Nullable Object> validate(Map arg, SchemaConfiguration configuration) throws ValidationException, InvalidTypeException { + Set> pathSet = new HashSet<>(); + List pathToItem = List.of("args[0]"); + Map castArg = castToAllowedTypes(arg, pathToItem, pathSet); + SchemaConfiguration usedConfiguration = Objects.requireNonNullElseGet(configuration, () -> new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone())); + PathToSchemasMap validatedPathToSchemas = new PathToSchemasMap(); + ValidationMetadata validationMetadata = new ValidationMetadata(pathToItem, usedConfiguration, validatedPathToSchemas, new LinkedHashSet<>()); + PathToSchemasMap pathToSchemasMap = getPathToSchemas(this, castArg, validationMetadata, pathSet); + return getNewInstance(castArg, validationMetadata.pathToItem(), pathToSchemasMap); + } + + @Override + public @Nullable Object validate(@Nullable Object arg, SchemaConfiguration configuration) throws ValidationException, InvalidTypeException { + if (arg == null) { + return validate((Void) null, configuration); + } else if (arg instanceof Boolean) { + boolean boolArg = (Boolean) arg; + return validate(boolArg, configuration); + } else if (arg instanceof Number) { + return validate((Number) arg, configuration); + } else if (arg instanceof String) { + return validate((String) arg, configuration); + } else if (arg instanceof List) { + return validate((List) arg, configuration); + } else if (arg instanceof Map) { + return validate((Map) arg, configuration); + } + throw new InvalidTypeException("Invalid input type="+getClass(arg)+". It can't be validated by this schema"); + } + @Override + public @Nullable Object getNewInstance(@Nullable Object arg, List pathToItem, PathToSchemasMap pathToSchemas) throws InvalidTypeException { + if (arg == null) { + return getNewInstance((Void) null, pathToItem, pathToSchemas); + } else if (arg instanceof Boolean) { + boolean boolArg = (Boolean) arg; + return getNewInstance(boolArg, pathToItem, pathToSchemas); + } else if (arg instanceof Number) { + return getNewInstance((Number) arg, pathToItem, pathToSchemas); + } else if (arg instanceof String) { + return getNewInstance((String) arg, pathToItem, pathToSchemas); + } else if (arg instanceof List) { + return getNewInstance((List) arg, pathToItem, pathToSchemas); + } else if (arg instanceof Map) { + return getNewInstance((Map) arg, pathToItem, pathToSchemas); + } + throw new InvalidTypeException("Invalid input type="+getClass(arg)+". It can't be instantiated by this schema"); + } + } +} diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/components/schemas/ContainsWithNullInstanceElements.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/components/schemas/ContainsWithNullInstanceElements.java new file mode 100644 index 00000000000..7685265ee99 --- /dev/null +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/components/schemas/ContainsWithNullInstanceElements.java @@ -0,0 +1,250 @@ +package org.openapijsonschematools.client.components.schemas; +import java.time.LocalDate; +import java.time.ZonedDateTime; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.UUID; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.openapijsonschematools.client.configurations.JsonSchemaKeywordFlags; +import org.openapijsonschematools.client.configurations.SchemaConfiguration; +import org.openapijsonschematools.client.exceptions.InvalidAdditionalPropertyException; +import org.openapijsonschematools.client.exceptions.InvalidTypeException; +import org.openapijsonschematools.client.exceptions.UnsetPropertyException; +import org.openapijsonschematools.client.exceptions.ValidationException; +import org.openapijsonschematools.client.schemas.NullJsonSchema; +import org.openapijsonschematools.client.schemas.UnsetAddPropsSetter; +import org.openapijsonschematools.client.schemas.validation.BooleanSchemaValidator; +import org.openapijsonschematools.client.schemas.validation.FrozenList; +import org.openapijsonschematools.client.schemas.validation.FrozenMap; +import org.openapijsonschematools.client.schemas.validation.JsonSchema; +import org.openapijsonschematools.client.schemas.validation.JsonSchemaInfo; +import org.openapijsonschematools.client.schemas.validation.ListSchemaValidator; +import org.openapijsonschematools.client.schemas.validation.MapSchemaValidator; +import org.openapijsonschematools.client.schemas.validation.NullSchemaValidator; +import org.openapijsonschematools.client.schemas.validation.NumberSchemaValidator; +import org.openapijsonschematools.client.schemas.validation.PathToSchemasMap; +import org.openapijsonschematools.client.schemas.validation.StringSchemaValidator; +import org.openapijsonschematools.client.schemas.validation.ValidationMetadata; + +public class ContainsWithNullInstanceElements { + // nest classes so all schemas and input/output classes can be public + + + public static class Contains extends NullJsonSchema { + private static @Nullable Contains instance = null; + public static Contains getInstance() { + if (instance == null) { + instance = new Contains(); + } + return instance; + } + } + + + public static class ContainsWithNullInstanceElements1 extends JsonSchema implements NullSchemaValidator, BooleanSchemaValidator, NumberSchemaValidator, StringSchemaValidator, ListSchemaValidator>, MapSchemaValidator> { + /* + NOTE: This class is auto generated by OpenAPI JSON Schema Generator. + Ref: https://github.com/openapi-json-schema-tools/openapi-json-schema-generator + + Do not edit the class manually. + */ + private static @Nullable ContainsWithNullInstanceElements1 instance = null; + + protected ContainsWithNullInstanceElements1() { + super(new JsonSchemaInfo() + .contains(Contains.class) + ); + } + + public static ContainsWithNullInstanceElements1 getInstance() { + if (instance == null) { + instance = new ContainsWithNullInstanceElements1(); + } + return instance; + } + + @Override + public Void validate(Void arg, SchemaConfiguration configuration) throws ValidationException, InvalidTypeException { + Set> pathSet = new HashSet<>(); + List pathToItem = List.of("args[0]"); + Void castArg = castToAllowedTypes(arg, pathToItem, pathSet); + SchemaConfiguration usedConfiguration = Objects.requireNonNullElseGet(configuration, () -> new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone())); + PathToSchemasMap validatedPathToSchemas = new PathToSchemasMap(); + ValidationMetadata validationMetadata = new ValidationMetadata(pathToItem, usedConfiguration, validatedPathToSchemas, new LinkedHashSet<>()); + getPathToSchemas(this, castArg, validationMetadata, pathSet); + return castArg; + } + + @Override + public boolean validate(boolean arg, SchemaConfiguration configuration) throws ValidationException, InvalidTypeException { + Set> pathSet = new HashSet<>(); + List pathToItem = List.of("args[0]"); + boolean castArg = castToAllowedTypes(arg, pathToItem, pathSet); + SchemaConfiguration usedConfiguration = Objects.requireNonNullElseGet(configuration, () -> new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone())); + PathToSchemasMap validatedPathToSchemas = new PathToSchemasMap(); + ValidationMetadata validationMetadata = new ValidationMetadata(pathToItem, usedConfiguration, validatedPathToSchemas, new LinkedHashSet<>()); + getPathToSchemas(this, castArg, validationMetadata, pathSet); + return castArg; + } + + @Override + public Number validate(Number arg, SchemaConfiguration configuration) throws ValidationException, InvalidTypeException { + Set> pathSet = new HashSet<>(); + List pathToItem = List.of("args[0]"); + Number castArg = castToAllowedTypes(arg, pathToItem, pathSet); + SchemaConfiguration usedConfiguration = Objects.requireNonNullElseGet(configuration, () -> new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone())); + PathToSchemasMap validatedPathToSchemas = new PathToSchemasMap(); + ValidationMetadata validationMetadata = new ValidationMetadata(pathToItem, usedConfiguration, validatedPathToSchemas, new LinkedHashSet<>()); + getPathToSchemas(this, castArg, validationMetadata, pathSet); + return castArg; + } + + public int validate(int arg, SchemaConfiguration configuration) { + return (int) validate((Number) arg, configuration); + } + + public long validate(long arg, SchemaConfiguration configuration) { + return (long) validate((Number) arg, configuration); + } + + public float validate(float arg, SchemaConfiguration configuration) { + return (float) validate((Number) arg, configuration); + } + + public double validate(double arg, SchemaConfiguration configuration) { + return (double) validate((Number) arg, configuration); + } + + @Override + public String validate(String arg, SchemaConfiguration configuration) throws ValidationException, InvalidTypeException { + Set> pathSet = new HashSet<>(); + List pathToItem = List.of("args[0]"); + String castArg = castToAllowedTypes(arg, pathToItem, pathSet); + SchemaConfiguration usedConfiguration = Objects.requireNonNullElseGet(configuration, () -> new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone())); + PathToSchemasMap validatedPathToSchemas = new PathToSchemasMap(); + ValidationMetadata validationMetadata = new ValidationMetadata(pathToItem, usedConfiguration, validatedPathToSchemas, new LinkedHashSet<>()); + getPathToSchemas(this, castArg, validationMetadata, pathSet); + return castArg; + } + + public String validate(LocalDate arg, SchemaConfiguration configuration) throws ValidationException { + return validate(arg.toString(), configuration); + } + + public String validate(ZonedDateTime arg, SchemaConfiguration configuration) throws ValidationException { + return validate(arg.toString(), configuration); + } + + public String validate(UUID arg, SchemaConfiguration configuration) throws ValidationException { + return validate(arg.toString(), configuration); + } + + @Override + public FrozenList<@Nullable Object> getNewInstance(List arg, List pathToItem, PathToSchemasMap pathToSchemas) { + List<@Nullable Object> items = new ArrayList<>(); + int i = 0; + for (Object item: arg) { + List itemPathToItem = new ArrayList<>(pathToItem); + itemPathToItem.add(i); + LinkedHashMap schemas = pathToSchemas.get(itemPathToItem); + if (schemas == null) { + throw new InvalidTypeException("Validation result is invalid, schemas must exist for a pathToItem"); + } + JsonSchema itemSchema = schemas.entrySet().iterator().next().getKey(); + @Nullable Object itemInstance = itemSchema.getNewInstance(item, itemPathToItem, pathToSchemas); + items.add(itemInstance); + i += 1; + } + FrozenList<@Nullable Object> newInstanceItems = new FrozenList<>(items); + return newInstanceItems; + } + + public FrozenList<@Nullable Object> validate(List arg, SchemaConfiguration configuration) throws ValidationException { + Set> pathSet = new HashSet<>(); + List pathToItem = List.of("args[0"); + List castArg = castToAllowedTypes(arg, pathToItem, pathSet); + SchemaConfiguration usedConfiguration = Objects.requireNonNullElseGet(configuration, () -> new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone())); + ValidationMetadata validationMetadata = new ValidationMetadata(pathToItem, usedConfiguration, new PathToSchemasMap(), new LinkedHashSet<>()); + PathToSchemasMap pathToSchemasMap = getPathToSchemas(this, castArg, validationMetadata, pathSet); + return getNewInstance(castArg, validationMetadata.pathToItem(), pathToSchemasMap); + } + + @Override + public FrozenMap<@Nullable Object> getNewInstance(Map arg, List pathToItem, PathToSchemasMap pathToSchemas) { + LinkedHashMap properties = new LinkedHashMap<>(); + for(Map.Entry entry: arg.entrySet()) { + @Nullable Object entryKey = entry.getKey(); + if (!(entryKey instanceof String)) { + throw new InvalidTypeException("Invalid non-string key value"); + } + String propertyName = (String) entryKey; + List propertyPathToItem = new ArrayList<>(pathToItem); + propertyPathToItem.add(propertyName); + Object value = entry.getValue(); + LinkedHashMap schemas = pathToSchemas.get(propertyPathToItem); + if (schemas == null) { + throw new InvalidTypeException("Validation result is invalid, schemas must exist for a pathToItem"); + } + JsonSchema propertySchema = schemas.entrySet().iterator().next().getKey(); + @Nullable Object propertyInstance = propertySchema.getNewInstance(value, propertyPathToItem, pathToSchemas); + properties.put(propertyName, propertyInstance); + } + FrozenMap<@Nullable Object> castProperties = new FrozenMap<>(properties); + return castProperties; + } + + public FrozenMap<@Nullable Object> validate(Map arg, SchemaConfiguration configuration) throws ValidationException, InvalidTypeException { + Set> pathSet = new HashSet<>(); + List pathToItem = List.of("args[0]"); + Map castArg = castToAllowedTypes(arg, pathToItem, pathSet); + SchemaConfiguration usedConfiguration = Objects.requireNonNullElseGet(configuration, () -> new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone())); + PathToSchemasMap validatedPathToSchemas = new PathToSchemasMap(); + ValidationMetadata validationMetadata = new ValidationMetadata(pathToItem, usedConfiguration, validatedPathToSchemas, new LinkedHashSet<>()); + PathToSchemasMap pathToSchemasMap = getPathToSchemas(this, castArg, validationMetadata, pathSet); + return getNewInstance(castArg, validationMetadata.pathToItem(), pathToSchemasMap); + } + + @Override + public @Nullable Object validate(@Nullable Object arg, SchemaConfiguration configuration) throws ValidationException, InvalidTypeException { + if (arg == null) { + return validate((Void) null, configuration); + } else if (arg instanceof Boolean) { + boolean boolArg = (Boolean) arg; + return validate(boolArg, configuration); + } else if (arg instanceof Number) { + return validate((Number) arg, configuration); + } else if (arg instanceof String) { + return validate((String) arg, configuration); + } else if (arg instanceof List) { + return validate((List) arg, configuration); + } else if (arg instanceof Map) { + return validate((Map) arg, configuration); + } + throw new InvalidTypeException("Invalid input type="+getClass(arg)+". It can't be validated by this schema"); + } + @Override + public @Nullable Object getNewInstance(@Nullable Object arg, List pathToItem, PathToSchemasMap pathToSchemas) throws InvalidTypeException { + if (arg == null) { + return getNewInstance((Void) null, pathToItem, pathToSchemas); + } else if (arg instanceof Boolean) { + boolean boolArg = (Boolean) arg; + return getNewInstance(boolArg, pathToItem, pathToSchemas); + } else if (arg instanceof Number) { + return getNewInstance((Number) arg, pathToItem, pathToSchemas); + } else if (arg instanceof String) { + return getNewInstance((String) arg, pathToItem, pathToSchemas); + } else if (arg instanceof List) { + return getNewInstance((List) arg, pathToItem, pathToSchemas); + } else if (arg instanceof Map) { + return getNewInstance((Map) arg, pathToItem, pathToSchemas); + } + throw new InvalidTypeException("Invalid input type="+getClass(arg)+". It can't be instantiated by this schema"); + } + } +} diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/components/schemas/ItemsContains.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/components/schemas/ItemsContains.java new file mode 100644 index 00000000000..05642f10e3c --- /dev/null +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/components/schemas/ItemsContains.java @@ -0,0 +1,570 @@ +package org.openapijsonschematools.client.components.schemas; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZonedDateTime; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.UUID; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.openapijsonschematools.client.configurations.JsonSchemaKeywordFlags; +import org.openapijsonschematools.client.configurations.SchemaConfiguration; +import org.openapijsonschematools.client.exceptions.InvalidAdditionalPropertyException; +import org.openapijsonschematools.client.exceptions.InvalidTypeException; +import org.openapijsonschematools.client.exceptions.UnsetPropertyException; +import org.openapijsonschematools.client.exceptions.ValidationException; +import org.openapijsonschematools.client.schemas.UnsetAddPropsSetter; +import org.openapijsonschematools.client.schemas.validation.BooleanSchemaValidator; +import org.openapijsonschematools.client.schemas.validation.FrozenList; +import org.openapijsonschematools.client.schemas.validation.FrozenMap; +import org.openapijsonschematools.client.schemas.validation.JsonSchema; +import org.openapijsonschematools.client.schemas.validation.JsonSchemaInfo; +import org.openapijsonschematools.client.schemas.validation.ListSchemaValidator; +import org.openapijsonschematools.client.schemas.validation.MapSchemaValidator; +import org.openapijsonschematools.client.schemas.validation.NullSchemaValidator; +import org.openapijsonschematools.client.schemas.validation.NumberSchemaValidator; +import org.openapijsonschematools.client.schemas.validation.PathToSchemasMap; +import org.openapijsonschematools.client.schemas.validation.StringSchemaValidator; +import org.openapijsonschematools.client.schemas.validation.ValidationMetadata; + +public class ItemsContains { + // nest classes so all schemas and input/output classes can be public + + + public static class Contains extends JsonSchema implements NullSchemaValidator, BooleanSchemaValidator, NumberSchemaValidator, StringSchemaValidator, ListSchemaValidator>, MapSchemaValidator> { + private static @Nullable Contains instance = null; + + protected Contains() { + super(new JsonSchemaInfo() + .multipleOf(new BigDecimal("3")) + ); + } + + public static Contains getInstance() { + if (instance == null) { + instance = new Contains(); + } + return instance; + } + + @Override + public Void validate(Void arg, SchemaConfiguration configuration) throws ValidationException, InvalidTypeException { + Set> pathSet = new HashSet<>(); + List pathToItem = List.of("args[0]"); + Void castArg = castToAllowedTypes(arg, pathToItem, pathSet); + SchemaConfiguration usedConfiguration = Objects.requireNonNullElseGet(configuration, () -> new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone())); + PathToSchemasMap validatedPathToSchemas = new PathToSchemasMap(); + ValidationMetadata validationMetadata = new ValidationMetadata(pathToItem, usedConfiguration, validatedPathToSchemas, new LinkedHashSet<>()); + getPathToSchemas(this, castArg, validationMetadata, pathSet); + return castArg; + } + + @Override + public boolean validate(boolean arg, SchemaConfiguration configuration) throws ValidationException, InvalidTypeException { + Set> pathSet = new HashSet<>(); + List pathToItem = List.of("args[0]"); + boolean castArg = castToAllowedTypes(arg, pathToItem, pathSet); + SchemaConfiguration usedConfiguration = Objects.requireNonNullElseGet(configuration, () -> new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone())); + PathToSchemasMap validatedPathToSchemas = new PathToSchemasMap(); + ValidationMetadata validationMetadata = new ValidationMetadata(pathToItem, usedConfiguration, validatedPathToSchemas, new LinkedHashSet<>()); + getPathToSchemas(this, castArg, validationMetadata, pathSet); + return castArg; + } + + @Override + public Number validate(Number arg, SchemaConfiguration configuration) throws ValidationException, InvalidTypeException { + Set> pathSet = new HashSet<>(); + List pathToItem = List.of("args[0]"); + Number castArg = castToAllowedTypes(arg, pathToItem, pathSet); + SchemaConfiguration usedConfiguration = Objects.requireNonNullElseGet(configuration, () -> new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone())); + PathToSchemasMap validatedPathToSchemas = new PathToSchemasMap(); + ValidationMetadata validationMetadata = new ValidationMetadata(pathToItem, usedConfiguration, validatedPathToSchemas, new LinkedHashSet<>()); + getPathToSchemas(this, castArg, validationMetadata, pathSet); + return castArg; + } + + public int validate(int arg, SchemaConfiguration configuration) { + return (int) validate((Number) arg, configuration); + } + + public long validate(long arg, SchemaConfiguration configuration) { + return (long) validate((Number) arg, configuration); + } + + public float validate(float arg, SchemaConfiguration configuration) { + return (float) validate((Number) arg, configuration); + } + + public double validate(double arg, SchemaConfiguration configuration) { + return (double) validate((Number) arg, configuration); + } + + @Override + public String validate(String arg, SchemaConfiguration configuration) throws ValidationException, InvalidTypeException { + Set> pathSet = new HashSet<>(); + List pathToItem = List.of("args[0]"); + String castArg = castToAllowedTypes(arg, pathToItem, pathSet); + SchemaConfiguration usedConfiguration = Objects.requireNonNullElseGet(configuration, () -> new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone())); + PathToSchemasMap validatedPathToSchemas = new PathToSchemasMap(); + ValidationMetadata validationMetadata = new ValidationMetadata(pathToItem, usedConfiguration, validatedPathToSchemas, new LinkedHashSet<>()); + getPathToSchemas(this, castArg, validationMetadata, pathSet); + return castArg; + } + + public String validate(LocalDate arg, SchemaConfiguration configuration) throws ValidationException { + return validate(arg.toString(), configuration); + } + + public String validate(ZonedDateTime arg, SchemaConfiguration configuration) throws ValidationException { + return validate(arg.toString(), configuration); + } + + public String validate(UUID arg, SchemaConfiguration configuration) throws ValidationException { + return validate(arg.toString(), configuration); + } + + @Override + public FrozenList<@Nullable Object> getNewInstance(List arg, List pathToItem, PathToSchemasMap pathToSchemas) { + List<@Nullable Object> items = new ArrayList<>(); + int i = 0; + for (Object item: arg) { + List itemPathToItem = new ArrayList<>(pathToItem); + itemPathToItem.add(i); + LinkedHashMap schemas = pathToSchemas.get(itemPathToItem); + if (schemas == null) { + throw new InvalidTypeException("Validation result is invalid, schemas must exist for a pathToItem"); + } + JsonSchema itemSchema = schemas.entrySet().iterator().next().getKey(); + @Nullable Object itemInstance = itemSchema.getNewInstance(item, itemPathToItem, pathToSchemas); + items.add(itemInstance); + i += 1; + } + FrozenList<@Nullable Object> newInstanceItems = new FrozenList<>(items); + return newInstanceItems; + } + + public FrozenList<@Nullable Object> validate(List arg, SchemaConfiguration configuration) throws ValidationException { + Set> pathSet = new HashSet<>(); + List pathToItem = List.of("args[0"); + List castArg = castToAllowedTypes(arg, pathToItem, pathSet); + SchemaConfiguration usedConfiguration = Objects.requireNonNullElseGet(configuration, () -> new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone())); + ValidationMetadata validationMetadata = new ValidationMetadata(pathToItem, usedConfiguration, new PathToSchemasMap(), new LinkedHashSet<>()); + PathToSchemasMap pathToSchemasMap = getPathToSchemas(this, castArg, validationMetadata, pathSet); + return getNewInstance(castArg, validationMetadata.pathToItem(), pathToSchemasMap); + } + + @Override + public FrozenMap<@Nullable Object> getNewInstance(Map arg, List pathToItem, PathToSchemasMap pathToSchemas) { + LinkedHashMap properties = new LinkedHashMap<>(); + for(Map.Entry entry: arg.entrySet()) { + @Nullable Object entryKey = entry.getKey(); + if (!(entryKey instanceof String)) { + throw new InvalidTypeException("Invalid non-string key value"); + } + String propertyName = (String) entryKey; + List propertyPathToItem = new ArrayList<>(pathToItem); + propertyPathToItem.add(propertyName); + Object value = entry.getValue(); + LinkedHashMap schemas = pathToSchemas.get(propertyPathToItem); + if (schemas == null) { + throw new InvalidTypeException("Validation result is invalid, schemas must exist for a pathToItem"); + } + JsonSchema propertySchema = schemas.entrySet().iterator().next().getKey(); + @Nullable Object propertyInstance = propertySchema.getNewInstance(value, propertyPathToItem, pathToSchemas); + properties.put(propertyName, propertyInstance); + } + FrozenMap<@Nullable Object> castProperties = new FrozenMap<>(properties); + return castProperties; + } + + public FrozenMap<@Nullable Object> validate(Map arg, SchemaConfiguration configuration) throws ValidationException, InvalidTypeException { + Set> pathSet = new HashSet<>(); + List pathToItem = List.of("args[0]"); + Map castArg = castToAllowedTypes(arg, pathToItem, pathSet); + SchemaConfiguration usedConfiguration = Objects.requireNonNullElseGet(configuration, () -> new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone())); + PathToSchemasMap validatedPathToSchemas = new PathToSchemasMap(); + ValidationMetadata validationMetadata = new ValidationMetadata(pathToItem, usedConfiguration, validatedPathToSchemas, new LinkedHashSet<>()); + PathToSchemasMap pathToSchemasMap = getPathToSchemas(this, castArg, validationMetadata, pathSet); + return getNewInstance(castArg, validationMetadata.pathToItem(), pathToSchemasMap); + } + + @Override + public @Nullable Object validate(@Nullable Object arg, SchemaConfiguration configuration) throws ValidationException, InvalidTypeException { + if (arg == null) { + return validate((Void) null, configuration); + } else if (arg instanceof Boolean) { + boolean boolArg = (Boolean) arg; + return validate(boolArg, configuration); + } else if (arg instanceof Number) { + return validate((Number) arg, configuration); + } else if (arg instanceof String) { + return validate((String) arg, configuration); + } else if (arg instanceof List) { + return validate((List) arg, configuration); + } else if (arg instanceof Map) { + return validate((Map) arg, configuration); + } + throw new InvalidTypeException("Invalid input type="+getClass(arg)+". It can't be validated by this schema"); + } + @Override + public @Nullable Object getNewInstance(@Nullable Object arg, List pathToItem, PathToSchemasMap pathToSchemas) throws InvalidTypeException { + if (arg == null) { + return getNewInstance((Void) null, pathToItem, pathToSchemas); + } else if (arg instanceof Boolean) { + boolean boolArg = (Boolean) arg; + return getNewInstance(boolArg, pathToItem, pathToSchemas); + } else if (arg instanceof Number) { + return getNewInstance((Number) arg, pathToItem, pathToSchemas); + } else if (arg instanceof String) { + return getNewInstance((String) arg, pathToItem, pathToSchemas); + } else if (arg instanceof List) { + return getNewInstance((List) arg, pathToItem, pathToSchemas); + } else if (arg instanceof Map) { + return getNewInstance((Map) arg, pathToItem, pathToSchemas); + } + throw new InvalidTypeException("Invalid input type="+getClass(arg)+". It can't be instantiated by this schema"); + } + } + + public static class Items extends JsonSchema implements NullSchemaValidator, BooleanSchemaValidator, NumberSchemaValidator, StringSchemaValidator, ListSchemaValidator>, MapSchemaValidator> { + private static @Nullable Items instance = null; + + protected Items() { + super(new JsonSchemaInfo() + .multipleOf(new BigDecimal("2")) + ); + } + + public static Items getInstance() { + if (instance == null) { + instance = new Items(); + } + return instance; + } + + @Override + public Void validate(Void arg, SchemaConfiguration configuration) throws ValidationException, InvalidTypeException { + Set> pathSet = new HashSet<>(); + List pathToItem = List.of("args[0]"); + Void castArg = castToAllowedTypes(arg, pathToItem, pathSet); + SchemaConfiguration usedConfiguration = Objects.requireNonNullElseGet(configuration, () -> new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone())); + PathToSchemasMap validatedPathToSchemas = new PathToSchemasMap(); + ValidationMetadata validationMetadata = new ValidationMetadata(pathToItem, usedConfiguration, validatedPathToSchemas, new LinkedHashSet<>()); + getPathToSchemas(this, castArg, validationMetadata, pathSet); + return castArg; + } + + @Override + public boolean validate(boolean arg, SchemaConfiguration configuration) throws ValidationException, InvalidTypeException { + Set> pathSet = new HashSet<>(); + List pathToItem = List.of("args[0]"); + boolean castArg = castToAllowedTypes(arg, pathToItem, pathSet); + SchemaConfiguration usedConfiguration = Objects.requireNonNullElseGet(configuration, () -> new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone())); + PathToSchemasMap validatedPathToSchemas = new PathToSchemasMap(); + ValidationMetadata validationMetadata = new ValidationMetadata(pathToItem, usedConfiguration, validatedPathToSchemas, new LinkedHashSet<>()); + getPathToSchemas(this, castArg, validationMetadata, pathSet); + return castArg; + } + + @Override + public Number validate(Number arg, SchemaConfiguration configuration) throws ValidationException, InvalidTypeException { + Set> pathSet = new HashSet<>(); + List pathToItem = List.of("args[0]"); + Number castArg = castToAllowedTypes(arg, pathToItem, pathSet); + SchemaConfiguration usedConfiguration = Objects.requireNonNullElseGet(configuration, () -> new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone())); + PathToSchemasMap validatedPathToSchemas = new PathToSchemasMap(); + ValidationMetadata validationMetadata = new ValidationMetadata(pathToItem, usedConfiguration, validatedPathToSchemas, new LinkedHashSet<>()); + getPathToSchemas(this, castArg, validationMetadata, pathSet); + return castArg; + } + + public int validate(int arg, SchemaConfiguration configuration) { + return (int) validate((Number) arg, configuration); + } + + public long validate(long arg, SchemaConfiguration configuration) { + return (long) validate((Number) arg, configuration); + } + + public float validate(float arg, SchemaConfiguration configuration) { + return (float) validate((Number) arg, configuration); + } + + public double validate(double arg, SchemaConfiguration configuration) { + return (double) validate((Number) arg, configuration); + } + + @Override + public String validate(String arg, SchemaConfiguration configuration) throws ValidationException, InvalidTypeException { + Set> pathSet = new HashSet<>(); + List pathToItem = List.of("args[0]"); + String castArg = castToAllowedTypes(arg, pathToItem, pathSet); + SchemaConfiguration usedConfiguration = Objects.requireNonNullElseGet(configuration, () -> new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone())); + PathToSchemasMap validatedPathToSchemas = new PathToSchemasMap(); + ValidationMetadata validationMetadata = new ValidationMetadata(pathToItem, usedConfiguration, validatedPathToSchemas, new LinkedHashSet<>()); + getPathToSchemas(this, castArg, validationMetadata, pathSet); + return castArg; + } + + public String validate(LocalDate arg, SchemaConfiguration configuration) throws ValidationException { + return validate(arg.toString(), configuration); + } + + public String validate(ZonedDateTime arg, SchemaConfiguration configuration) throws ValidationException { + return validate(arg.toString(), configuration); + } + + public String validate(UUID arg, SchemaConfiguration configuration) throws ValidationException { + return validate(arg.toString(), configuration); + } + + @Override + public FrozenList<@Nullable Object> getNewInstance(List arg, List pathToItem, PathToSchemasMap pathToSchemas) { + List<@Nullable Object> items = new ArrayList<>(); + int i = 0; + for (Object item: arg) { + List itemPathToItem = new ArrayList<>(pathToItem); + itemPathToItem.add(i); + LinkedHashMap schemas = pathToSchemas.get(itemPathToItem); + if (schemas == null) { + throw new InvalidTypeException("Validation result is invalid, schemas must exist for a pathToItem"); + } + JsonSchema itemSchema = schemas.entrySet().iterator().next().getKey(); + @Nullable Object itemInstance = itemSchema.getNewInstance(item, itemPathToItem, pathToSchemas); + items.add(itemInstance); + i += 1; + } + FrozenList<@Nullable Object> newInstanceItems = new FrozenList<>(items); + return newInstanceItems; + } + + public FrozenList<@Nullable Object> validate(List arg, SchemaConfiguration configuration) throws ValidationException { + Set> pathSet = new HashSet<>(); + List pathToItem = List.of("args[0"); + List castArg = castToAllowedTypes(arg, pathToItem, pathSet); + SchemaConfiguration usedConfiguration = Objects.requireNonNullElseGet(configuration, () -> new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone())); + ValidationMetadata validationMetadata = new ValidationMetadata(pathToItem, usedConfiguration, new PathToSchemasMap(), new LinkedHashSet<>()); + PathToSchemasMap pathToSchemasMap = getPathToSchemas(this, castArg, validationMetadata, pathSet); + return getNewInstance(castArg, validationMetadata.pathToItem(), pathToSchemasMap); + } + + @Override + public FrozenMap<@Nullable Object> getNewInstance(Map arg, List pathToItem, PathToSchemasMap pathToSchemas) { + LinkedHashMap properties = new LinkedHashMap<>(); + for(Map.Entry entry: arg.entrySet()) { + @Nullable Object entryKey = entry.getKey(); + if (!(entryKey instanceof String)) { + throw new InvalidTypeException("Invalid non-string key value"); + } + String propertyName = (String) entryKey; + List propertyPathToItem = new ArrayList<>(pathToItem); + propertyPathToItem.add(propertyName); + Object value = entry.getValue(); + LinkedHashMap schemas = pathToSchemas.get(propertyPathToItem); + if (schemas == null) { + throw new InvalidTypeException("Validation result is invalid, schemas must exist for a pathToItem"); + } + JsonSchema propertySchema = schemas.entrySet().iterator().next().getKey(); + @Nullable Object propertyInstance = propertySchema.getNewInstance(value, propertyPathToItem, pathToSchemas); + properties.put(propertyName, propertyInstance); + } + FrozenMap<@Nullable Object> castProperties = new FrozenMap<>(properties); + return castProperties; + } + + public FrozenMap<@Nullable Object> validate(Map arg, SchemaConfiguration configuration) throws ValidationException, InvalidTypeException { + Set> pathSet = new HashSet<>(); + List pathToItem = List.of("args[0]"); + Map castArg = castToAllowedTypes(arg, pathToItem, pathSet); + SchemaConfiguration usedConfiguration = Objects.requireNonNullElseGet(configuration, () -> new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone())); + PathToSchemasMap validatedPathToSchemas = new PathToSchemasMap(); + ValidationMetadata validationMetadata = new ValidationMetadata(pathToItem, usedConfiguration, validatedPathToSchemas, new LinkedHashSet<>()); + PathToSchemasMap pathToSchemasMap = getPathToSchemas(this, castArg, validationMetadata, pathSet); + return getNewInstance(castArg, validationMetadata.pathToItem(), pathToSchemasMap); + } + + @Override + public @Nullable Object validate(@Nullable Object arg, SchemaConfiguration configuration) throws ValidationException, InvalidTypeException { + if (arg == null) { + return validate((Void) null, configuration); + } else if (arg instanceof Boolean) { + boolean boolArg = (Boolean) arg; + return validate(boolArg, configuration); + } else if (arg instanceof Number) { + return validate((Number) arg, configuration); + } else if (arg instanceof String) { + return validate((String) arg, configuration); + } else if (arg instanceof List) { + return validate((List) arg, configuration); + } else if (arg instanceof Map) { + return validate((Map) arg, configuration); + } + throw new InvalidTypeException("Invalid input type="+getClass(arg)+". It can't be validated by this schema"); + } + @Override + public @Nullable Object getNewInstance(@Nullable Object arg, List pathToItem, PathToSchemasMap pathToSchemas) throws InvalidTypeException { + if (arg == null) { + return getNewInstance((Void) null, pathToItem, pathToSchemas); + } else if (arg instanceof Boolean) { + boolean boolArg = (Boolean) arg; + return getNewInstance(boolArg, pathToItem, pathToSchemas); + } else if (arg instanceof Number) { + return getNewInstance((Number) arg, pathToItem, pathToSchemas); + } else if (arg instanceof String) { + return getNewInstance((String) arg, pathToItem, pathToSchemas); + } else if (arg instanceof List) { + return getNewInstance((List) arg, pathToItem, pathToSchemas); + } else if (arg instanceof Map) { + return getNewInstance((Map) arg, pathToItem, pathToSchemas); + } + throw new InvalidTypeException("Invalid input type="+getClass(arg)+". It can't be instantiated by this schema"); + } + } + + public static class ItemsContainsList extends FrozenList<@Nullable Object> { + protected ItemsContainsList(FrozenList<@Nullable Object> m) { + super(m); + } + public static ItemsContainsList of(List arg, SchemaConfiguration configuration) throws ValidationException { + return ItemsContains1.getInstance().validate(arg, configuration); + } + } + + public static class ItemsContainsListBuilder { + // class to build List<@Nullable Object> + private final List<@Nullable Object> list; + + public ItemsContainsListBuilder() { + list = new ArrayList<>(); + } + + public ItemsContainsListBuilder(List<@Nullable Object> list) { + this.list = list; + } + + public ItemsContainsListBuilder add(Void item) { + list.add(null); + return this; + } + + public ItemsContainsListBuilder add(boolean item) { + list.add(item); + return this; + } + + public ItemsContainsListBuilder add(String item) { + list.add(item); + return this; + } + + public ItemsContainsListBuilder add(int item) { + list.add(item); + return this; + } + + public ItemsContainsListBuilder add(float item) { + list.add(item); + return this; + } + + public ItemsContainsListBuilder add(long item) { + list.add(item); + return this; + } + + public ItemsContainsListBuilder add(double item) { + list.add(item); + return this; + } + + public ItemsContainsListBuilder add(List item) { + list.add(item); + return this; + } + + public ItemsContainsListBuilder add(Map item) { + list.add(item); + return this; + } + + public List<@Nullable Object> build() { + return list; + } + } + + + public static class ItemsContains1 extends JsonSchema implements ListSchemaValidator { + /* + NOTE: This class is auto generated by OpenAPI JSON Schema Generator. + Ref: https://github.com/openapi-json-schema-tools/openapi-json-schema-generator + + Do not edit the class manually. + */ + private static @Nullable ItemsContains1 instance = null; + + protected ItemsContains1() { + super(new JsonSchemaInfo() + .type(Set.of(List.class)) + .items(Items.class) + .contains(Contains.class) + ); + } + + public static ItemsContains1 getInstance() { + if (instance == null) { + instance = new ItemsContains1(); + } + return instance; + } + + @Override + public ItemsContainsList getNewInstance(List arg, List pathToItem, PathToSchemasMap pathToSchemas) { + List<@Nullable Object> items = new ArrayList<>(); + int i = 0; + for (Object item: arg) { + List itemPathToItem = new ArrayList<>(pathToItem); + itemPathToItem.add(i); + LinkedHashMap schemas = pathToSchemas.get(itemPathToItem); + if (schemas == null) { + throw new InvalidTypeException("Validation result is invalid, schemas must exist for a pathToItem"); + } + JsonSchema itemSchema = schemas.entrySet().iterator().next().getKey(); + @Nullable Object itemInstance = itemSchema.getNewInstance(item, itemPathToItem, pathToSchemas); + items.add(itemInstance); + i += 1; + } + FrozenList<@Nullable Object> newInstanceItems = new FrozenList<>(items); + return new ItemsContainsList(newInstanceItems); + } + + public ItemsContainsList validate(List arg, SchemaConfiguration configuration) throws ValidationException { + Set> pathSet = new HashSet<>(); + List pathToItem = List.of("args[0"); + List castArg = castToAllowedTypes(arg, pathToItem, pathSet); + SchemaConfiguration usedConfiguration = Objects.requireNonNullElseGet(configuration, () -> new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone())); + ValidationMetadata validationMetadata = new ValidationMetadata(pathToItem, usedConfiguration, new PathToSchemasMap(), new LinkedHashSet<>()); + PathToSchemasMap pathToSchemasMap = getPathToSchemas(this, castArg, validationMetadata, pathSet); + return getNewInstance(castArg, validationMetadata.pathToItem(), pathToSchemasMap); + } + + @Override + public @Nullable Object validate(@Nullable Object arg, SchemaConfiguration configuration) throws ValidationException, InvalidTypeException { + if (arg instanceof List) { + return validate((List) arg, configuration); + } + throw new InvalidTypeException("Invalid input type="+getClass(arg)+". It can't be validated by this schema"); + } + @Override + public @Nullable Object getNewInstance(@Nullable Object arg, List pathToItem, PathToSchemasMap pathToSchemas) throws InvalidTypeException { + if (arg instanceof List) { + return getNewInstance((List) arg, pathToItem, pathToSchemas); + } + throw new InvalidTypeException("Invalid input type="+getClass(arg)+". It can't be instantiated by this schema"); + } + } +} diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/FakeValidator.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/FakeValidator.java deleted file mode 100644 index db5ec573081..00000000000 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/FakeValidator.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.openapijsonschematools.client.schemas.validation; - -import org.checkerframework.checker.nullness.qual.Nullable; - -public class FakeValidator implements KeywordValidator { - @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { - return null; - } -} diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchema.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchema.java index a63aaa4f191..92b17cca2ae 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchema.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchema.java @@ -46,6 +46,7 @@ public abstract class JsonSchema { public final boolean defaultValueSet; public final @Nullable Object constValue; public final boolean constValueSet; + public final @Nullable Class contains; private final LinkedHashMap keywordToValidator; protected JsonSchema(JsonSchemaInfo jsonSchemaInfo) { @@ -228,6 +229,13 @@ protected JsonSchema(JsonSchemaInfo jsonSchemaInfo) { new ConstValidator(this.constValue) ); } + this.contains = jsonSchemaInfo.contains; + if (this.contains != null) { + keywordToValidator.put( + "contains", + new ContainsValidator(this.contains) + ); + } this.keywordToValidator = keywordToValidator; } diff --git a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchemaInfo.java b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchemaInfo.java index e979319b716..b726051cd2e 100644 --- a/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchemaInfo.java +++ b/samples/client/3_1_0_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchemaInfo.java @@ -142,4 +142,9 @@ public JsonSchemaInfo constValue(@Nullable Object constValue) { this.constValueSet = true; return this; } + public @Nullable Class contains = null; + public JsonSchemaInfo contains(Class contains) { + this.contains = contains; + return this; + } } \ No newline at end of file diff --git a/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/components/schemas/ContainsKeywordValidationTest.java b/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/components/schemas/ContainsKeywordValidationTest.java new file mode 100644 index 00000000000..c69a4404792 --- /dev/null +++ b/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/components/schemas/ContainsKeywordValidationTest.java @@ -0,0 +1,108 @@ +package org.openapijsonschematools.client.components.schemas; + +import org.junit.Assert; +import org.junit.Test; +import org.openapijsonschematools.client.configurations.JsonSchemaKeywordFlags; +import org.openapijsonschematools.client.configurations.SchemaConfiguration; +import org.openapijsonschematools.client.exceptions.ValidationException; +import org.openapijsonschematools.client.exceptions.InvalidTypeException; +import org.openapijsonschematools.client.schemas.validation.MapUtils; +import org.checkerframework.checker.nullness.qual.Nullable; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.AbstractMap; + +public class ContainsKeywordValidationTest { + static final SchemaConfiguration configuration = new SchemaConfiguration(JsonSchemaKeywordFlags.onlyFormat()); + + @Test + public void testArrayWithTwoItemsMatchingSchema56IsValidPasses() { + // array with two items matching schema (5, 6) is valid + final var schema = ContainsKeywordValidation.ContainsKeywordValidation1.getInstance(); + schema.validate( + Arrays.asList( + 3, + 4, + 5, + 6 + ), + configuration + ); + } + + @Test + public void testNotArrayIsValidPasses() { + // not array is valid + final var schema = ContainsKeywordValidation.ContainsKeywordValidation1.getInstance(); + schema.validate( + MapUtils.makeMap( + ), + configuration + ); + } + + @Test + public void testArrayWithItemMatchingSchema5IsValidPasses() { + // array with item matching schema (5) is valid + final var schema = ContainsKeywordValidation.ContainsKeywordValidation1.getInstance(); + schema.validate( + Arrays.asList( + 3, + 4, + 5 + ), + configuration + ); + } + + @Test + public void testArrayWithItemMatchingSchema6IsValidPasses() { + // array with item matching schema (6) is valid + final var schema = ContainsKeywordValidation.ContainsKeywordValidation1.getInstance(); + schema.validate( + Arrays.asList( + 3, + 4, + 6 + ), + configuration + ); + } + + @Test + public void testArrayWithoutItemsMatchingSchemaIsInvalidFails() { + // array without items matching schema is invalid + final var schema = ContainsKeywordValidation.ContainsKeywordValidation1.getInstance(); + try { + schema.validate( + Arrays.asList( + 2, + 3, + 4 + ), + configuration + ); + throw new RuntimeException("A different exception must be thrown"); + } catch (ValidationException | InvalidTypeException ignored) { + ; + } + } + + @Test + public void testEmptyArrayIsInvalidFails() { + // empty array is invalid + final var schema = ContainsKeywordValidation.ContainsKeywordValidation1.getInstance(); + try { + schema.validate( + Arrays.asList( + ), + configuration + ); + throw new RuntimeException("A different exception must be thrown"); + } catch (ValidationException | InvalidTypeException ignored) { + ; + } + } +} diff --git a/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/components/schemas/ContainsWithNullInstanceElementsTest.java b/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/components/schemas/ContainsWithNullInstanceElementsTest.java new file mode 100644 index 00000000000..0a573bbc857 --- /dev/null +++ b/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/components/schemas/ContainsWithNullInstanceElementsTest.java @@ -0,0 +1,31 @@ +package org.openapijsonschematools.client.components.schemas; + +import org.junit.Assert; +import org.junit.Test; +import org.openapijsonschematools.client.configurations.JsonSchemaKeywordFlags; +import org.openapijsonschematools.client.configurations.SchemaConfiguration; +import org.openapijsonschematools.client.exceptions.ValidationException; +import org.openapijsonschematools.client.exceptions.InvalidTypeException; +import org.openapijsonschematools.client.schemas.validation.MapUtils; +import org.checkerframework.checker.nullness.qual.Nullable; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.AbstractMap; + +public class ContainsWithNullInstanceElementsTest { + static final SchemaConfiguration configuration = new SchemaConfiguration(JsonSchemaKeywordFlags.onlyFormat()); + + @Test + public void testAllowsNullItemsPasses() { + // allows null items + final var schema = ContainsWithNullInstanceElements.ContainsWithNullInstanceElements1.getInstance(); + schema.validate( + Arrays.asList( + null + ), + configuration + ); + } +} diff --git a/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/components/schemas/ItemsContainsTest.java b/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/components/schemas/ItemsContainsTest.java new file mode 100644 index 00000000000..b02893f164c --- /dev/null +++ b/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/components/schemas/ItemsContainsTest.java @@ -0,0 +1,90 @@ +package org.openapijsonschematools.client.components.schemas; + +import org.junit.Assert; +import org.junit.Test; +import org.openapijsonschematools.client.configurations.JsonSchemaKeywordFlags; +import org.openapijsonschematools.client.configurations.SchemaConfiguration; +import org.openapijsonschematools.client.exceptions.ValidationException; +import org.openapijsonschematools.client.exceptions.InvalidTypeException; +import org.openapijsonschematools.client.schemas.validation.MapUtils; +import org.checkerframework.checker.nullness.qual.Nullable; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.AbstractMap; + +public class ItemsContainsTest { + static final SchemaConfiguration configuration = new SchemaConfiguration(JsonSchemaKeywordFlags.onlyFormat()); + + @Test + public void testMatchesItemsDoesNotMatchContainsFails() { + // matches items, does not match contains + final var schema = ItemsContains.ItemsContains1.getInstance(); + try { + schema.validate( + Arrays.asList( + 2, + 4, + 8 + ), + configuration + ); + throw new RuntimeException("A different exception must be thrown"); + } catch (ValidationException | InvalidTypeException ignored) { + ; + } + } + + @Test + public void testMatchesNeitherItemsNorContainsFails() { + // matches neither items nor contains + final var schema = ItemsContains.ItemsContains1.getInstance(); + try { + schema.validate( + Arrays.asList( + 1, + 5 + ), + configuration + ); + throw new RuntimeException("A different exception must be thrown"); + } catch (ValidationException | InvalidTypeException ignored) { + ; + } + } + + @Test + public void testDoesNotMatchItemsMatchesContainsFails() { + // does not match items, matches contains + final var schema = ItemsContains.ItemsContains1.getInstance(); + try { + schema.validate( + Arrays.asList( + 3, + 6, + 9 + ), + configuration + ); + throw new RuntimeException("A different exception must be thrown"); + } catch (ValidationException | InvalidTypeException ignored) { + ; + } + } + + @Test + public void testMatchesBothItemsAndContainsPasses() { + // matches both items and contains + final var schema = ItemsContains.ItemsContains1.getInstance(); + schema.validate( + new ItemsContains.ItemsContainsListBuilder() + .add(6) + + .add(12) + + .build(), + configuration + ); + } +} diff --git a/src/main/java/org/openapijsonschematools/codegen/generators/JavaClientGenerator.java b/src/main/java/org/openapijsonschematools/codegen/generators/JavaClientGenerator.java index b94d3812395..8affdd5bc01 100644 --- a/src/main/java/org/openapijsonschematools/codegen/generators/JavaClientGenerator.java +++ b/src/main/java/org/openapijsonschematools/codegen/generators/JavaClientGenerator.java @@ -29,15 +29,11 @@ import org.openapijsonschematools.codegen.common.ModelUtils; import org.openapijsonschematools.codegen.generators.generatormetadata.FeatureSet; import org.openapijsonschematools.codegen.generators.generatormetadata.Stability; -import org.openapijsonschematools.codegen.generators.generatormetadata.features.ClientModificationFeature; import org.openapijsonschematools.codegen.generators.generatormetadata.features.ComponentsFeature; import org.openapijsonschematools.codegen.generators.generatormetadata.features.GlobalFeature; -import org.openapijsonschematools.codegen.generators.generatormetadata.features.OperationFeature; import org.openapijsonschematools.codegen.generators.generatormetadata.features.SchemaFeature; import org.openapijsonschematools.codegen.common.CodegenConstants; import org.openapijsonschematools.codegen.generators.generatormetadata.GeneratorType; -import org.openapijsonschematools.codegen.generators.generatormetadata.features.SecurityFeature; -import org.openapijsonschematools.codegen.generators.generatormetadata.features.WireFormatFeature; import org.openapijsonschematools.codegen.generators.models.CliOption; import org.openapijsonschematools.codegen.generators.openapimodels.CodegenHeader; import org.openapijsonschematools.codegen.generators.openapimodels.CodegenKey; @@ -260,7 +256,7 @@ public JavaClientGenerator() { SchemaFeature.AllOf, SchemaFeature.AnyOf, SchemaFeature.Const, - // SchemaFeature.Contains, + SchemaFeature.Contains, SchemaFeature.Default, // SchemaFeature.DependentRequired, // SchemaFeature.DependentSchemas, diff --git a/src/main/resources/java/src/main/java/packagename/components/schemas/SchemaClass/_Schema_anytypeOrMultitype.hbs b/src/main/resources/java/src/main/java/packagename/components/schemas/SchemaClass/_Schema_anytypeOrMultitype.hbs index 40ea8a0d0a4..5e96f3bdae6 100644 --- a/src/main/resources/java/src/main/java/packagename/components/schemas/SchemaClass/_Schema_anytypeOrMultitype.hbs +++ b/src/main/resources/java/src/main/java/packagename/components/schemas/SchemaClass/_Schema_anytypeOrMultitype.hbs @@ -99,6 +99,9 @@ public static class {{jsonPathPiece.pascalCase}} extends JsonSchema implements { {{#if constInfo}} {{> src/main/java/packagename/components/schemas/SchemaClass/_const }} {{/if}} + {{#if contains}} + {{> src/main/java/packagename/components/schemas/SchemaClass/_contains }} + {{/if}} ); } @@ -111,9 +114,6 @@ public static class {{jsonPathPiece.pascalCase}} extends JsonSchema implements { {{#if prefixItems}} {{!> components/schemas/schema_cls/_prefix_items }} {{/if}} -{{#if contains}} - {{!> components/schemas/schema_cls/_contains }} -{{/if}} {{#if hasDiscriminatorWithNonEmptyMapping}} {{!> components/schemas/schema_cls/_discriminator }} {{/if}} diff --git a/src/main/resources/java/src/main/java/packagename/components/schemas/SchemaClass/_Schema_list.hbs b/src/main/resources/java/src/main/java/packagename/components/schemas/SchemaClass/_Schema_list.hbs index c600981f6e0..099c9ad41c2 100644 --- a/src/main/resources/java/src/main/java/packagename/components/schemas/SchemaClass/_Schema_list.hbs +++ b/src/main/resources/java/src/main/java/packagename/components/schemas/SchemaClass/_Schema_list.hbs @@ -44,6 +44,9 @@ public static class {{jsonPathPiece.pascalCase}} extends JsonSchema implements L {{#neq uniqueItems null}} {{> src/main/java/packagename/components/schemas/SchemaClass/_uniqueItems }} {{/neq}} + {{#if contains}} + {{> src/main/java/packagename/components/schemas/SchemaClass/_contains }} + {{/if}} ); } @@ -56,9 +59,6 @@ public static class {{jsonPathPiece.pascalCase}} extends JsonSchema implements L {{#if prefixItems}} {{!> components/schemas/schema_cls/_prefix_items }} {{/if}} - {{#if contains}} - {{!> components/schemas/schema_cls/_contains }} - {{/if}} {{#if if_}} {{!> components/schemas/schema_cls/_if }} {{/if}} diff --git a/src/main/resources/java/src/main/java/packagename/components/schemas/SchemaClass/_contains.hbs b/src/main/resources/java/src/main/java/packagename/components/schemas/SchemaClass/_contains.hbs new file mode 100644 index 00000000000..d67e673a3b8 --- /dev/null +++ b/src/main/resources/java/src/main/java/packagename/components/schemas/SchemaClass/_contains.hbs @@ -0,0 +1,17 @@ +{{#if forDocs}} + {{#with contains}} + {{#if refInfo.refClass}} + {{#if refInfo.refModule}} +contains = [{{refInfo.refModule}}.{{refInfo.refClass}}.class]({{docRoot}}{{refInfo.ref.pathFromDocRoot}}.md#{{refInfo.ref.jsonPathPiece.kebabCase}}) + {{~else}} +contains = [{{refInfo.refClass}}.class](#{{refInfo.ref.jsonPathPiece.kebabCase}}) + {{~/if}} + {{else}} +contains = [{{jsonPathPiece.pascalCase}}.class](#{{jsonPathPiece.kebabCase}}) + {{~/if}} + {{/with}} +{{else}} + {{#with contains}} +.contains({{#if refInfo.refClass}}{{#if refInfo.refModule}}{{refInfo.refModule}}.{{/if}}{{refInfo.refClass}}{{else}}{{jsonPathPiece.pascalCase}}{{/if}}.class) + {{/with}} +{{/if}} \ No newline at end of file diff --git a/src/main/resources/java/src/main/java/packagename/components/schemas/docschema_fields_field.hbs b/src/main/resources/java/src/main/java/packagename/components/schemas/docschema_fields_field.hbs index 197f07f82b3..efb38bf3a12 100644 --- a/src/main/resources/java/src/main/java/packagename/components/schemas/docschema_fields_field.hbs +++ b/src/main/resources/java/src/main/java/packagename/components/schemas/docschema_fields_field.hbs @@ -72,4 +72,7 @@ {{/if}} {{#if defaultValue}} | @Nullable Object | {{> src/main/java/packagename/components/schemas/SchemaClass/_default }} | -{{/if}} \ No newline at end of file +{{/if}} +{{#if contains}} +| Class | {{> src/main/java/packagename/components/schemas/SchemaClass/_contains }} | +{{/if}} diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/JsonSchema.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/JsonSchema.hbs index 8e1364e262a..e8b61a3716e 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/JsonSchema.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/JsonSchema.hbs @@ -46,6 +46,7 @@ public abstract class JsonSchema { public final boolean defaultValueSet; public final @Nullable Object constValue; public final boolean constValueSet; + public final @Nullable Class contains; private final LinkedHashMap keywordToValidator; protected JsonSchema(JsonSchemaInfo jsonSchemaInfo) { @@ -228,6 +229,13 @@ public abstract class JsonSchema { new ConstValidator(this.constValue) ); } + this.contains = jsonSchemaInfo.contains; + if (this.contains != null) { + keywordToValidator.put( + "contains", + new ContainsValidator(this.contains) + ); + } this.keywordToValidator = keywordToValidator; } diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/JsonSchemaInfo.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/JsonSchemaInfo.hbs index ef79338eab6..2ce538de955 100644 --- a/src/main/resources/java/src/main/java/packagename/schemas/validation/JsonSchemaInfo.hbs +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/JsonSchemaInfo.hbs @@ -142,4 +142,9 @@ public class JsonSchemaInfo { this.constValueSet = true; return this; } + public @Nullable Class contains = null; + public JsonSchemaInfo contains(Class contains) { + this.contains = contains; + return this; + } } \ No newline at end of file diff --git a/src/test/resources/3_1/unit_test_spec/3_1_0_unit_test_spec_nopaths.yaml b/src/test/resources/3_1/unit_test_spec/3_1_0_unit_test_spec_nopaths.yaml index db6ab936942..1d846eb8a33 100644 --- a/src/test/resources/3_1/unit_test_spec/3_1_0_unit_test_spec_nopaths.yaml +++ b/src/test/resources/3_1/unit_test_spec/3_1_0_unit_test_spec_nopaths.yaml @@ -142,6 +142,20 @@ components: ConstNulCharactersInStrings: $schema: https://json-schema.org/draft/2020-12/schema const: "hello\0there" + ContainsKeywordValidation: + $schema: https://json-schema.org/draft/2020-12/schema + contains: + minimum: 5 + ItemsContains: + $schema: https://json-schema.org/draft/2020-12/schema + items: + multipleOf: 2 + contains: + multipleOf: 3 + ContainsWithNullInstanceElements: + $schema: https://json-schema.org/draft/2020-12/schema + contains: + type: 'null' EmptyDependents: $schema: https://json-schema.org/draft/2020-12/schema dependentRequired: @@ -863,6 +877,88 @@ components: data: hellothere valid: false comment: null + ContainsKeywordValidation: + ArrayWithItemMatchingSchema5IsValid: + description: array with item matching schema (5) is valid + data: + - 3 + - 4 + - 5 + valid: true + comment: null + ArrayWithItemMatchingSchema6IsValid: + description: array with item matching schema (6) is valid + data: + - 3 + - 4 + - 6 + valid: true + comment: null + ArrayWithTwoItemsMatchingSchema56IsValid: + description: array with two items matching schema (5, 6) is valid + data: + - 3 + - 4 + - 5 + - 6 + valid: true + comment: null + ArrayWithoutItemsMatchingSchemaIsInvalid: + description: array without items matching schema is invalid + data: + - 2 + - 3 + - 4 + valid: false + comment: null + EmptyArrayIsInvalid: + description: empty array is invalid + data: [] + valid: false + comment: null + NotArrayIsValid: + description: not array is valid + data: {} + valid: true + comment: null + ItemsContains: + MatchesItemsDoesNotMatchContains: + description: matches items, does not match contains + data: + - 2 + - 4 + - 8 + valid: false + comment: null + DoesNotMatchItemsMatchesContains: + description: does not match items, matches contains + data: + - 3 + - 6 + - 9 + valid: false + comment: null + MatchesBothItemsAndContains: + description: matches both items and contains + data: + - 6 + - 12 + valid: true + comment: null + MatchesNeitherItemsNorContains: + description: matches neither items nor contains + data: + - 1 + - 5 + valid: false + comment: null + ContainsWithNullInstanceElements: + AllowsNullItems: + description: allows null items + data: + - null + valid: true + comment: null EmptyDependents: EmptyObject: description: empty object diff --git a/src/test/resources/3_1/unit_test_spec/spec_writer.py b/src/test/resources/3_1/unit_test_spec/spec_writer.py index a2022054489..8c97b6357f1 100644 --- a/src/test/resources/3_1/unit_test_spec/spec_writer.py +++ b/src/test/resources/3_1/unit_test_spec/spec_writer.py @@ -707,9 +707,6 @@ def write_openapi_spec(): 'PrefixitemsWithNullInstanceElements', 'UniqueitemsWithAnArrayOfItems', 'UniqueitemsFalseWithAnArrayOfItems', - 'ContainsKeywordValidation', - 'ItemsContains', - 'ContainsWithNullInstanceElements', 'UnevaluateditemsDependsOnMultipleNestedContains', 'DependentSchemasSingleDependency', 'DependentSchemasDependenciesWithEscapedCharacters', From 484bcdb2c0c26108918e4028fb2c2c22661a96eb Mon Sep 17 00:00:00 2001 From: Justin Black Date: Thu, 11 Jan 2024 16:35:51 -0800 Subject: [PATCH 6/8] Fixes java test with list of only null --- .../java/.openapi-generator/FILES | 112 ++++++++++++++++++ .../ContainsWithNullInstanceElementsTest.java | 2 +- .../schemas/helpers/payload_renderer.hbs | 17 ++- .../schemas/validation/ListMaker.hbs | 20 ++++ 4 files changed, 145 insertions(+), 6 deletions(-) create mode 100644 src/main/resources/java/src/main/java/packagename/schemas/validation/ListMaker.hbs diff --git a/samples/client/3_1_0_unit_test/java/.openapi-generator/FILES b/samples/client/3_1_0_unit_test/java/.openapi-generator/FILES index 5f8c5d29a21..894950749bd 100644 --- a/samples/client/3_1_0_unit_test/java/.openapi-generator/FILES +++ b/samples/client/3_1_0_unit_test/java/.openapi-generator/FILES @@ -317,6 +317,118 @@ src/main/java/org/openapijsonschematools/client/schemas/validation/ValidationMet src/main/java/org/openapijsonschematools/client/servers/Server0.java src/main/java/org/openapijsonschematools/client/servers/ServerWithVariables.java src/main/java/org/openapijsonschematools/client/servers/ServerWithoutVariables.java +src/test/java/org/openapijsonschematools/client/components/schemas/AdditionalpropertiesAreAllowedByDefaultTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/AdditionalpropertiesCanExistByItselfTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/AdditionalpropertiesDoesNotLookInApplicatorsTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/AdditionalpropertiesWithNullValuedInstancePropertiesTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/AdditionalpropertiesWithSchemaTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/AllofCombinedWithAnyofOneofTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/AllofSimpleTypesTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/AllofTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/AllofWithBaseSchemaTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/AllofWithOneEmptySchemaTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/AllofWithTheFirstEmptySchemaTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/AllofWithTheLastEmptySchemaTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/AllofWithTwoEmptySchemasTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/AnyofComplexTypesTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/AnyofTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/AnyofWithBaseSchemaTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/AnyofWithOneEmptySchemaTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/ArrayTypeMatchesArraysTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/BooleanTypeMatchesBooleansTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/ByIntTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/ByNumberTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/BySmallNumberTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/ConstNulCharactersInStringsTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/ContainsKeywordValidationTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/ContainsWithNullInstanceElementsTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/DateFormatTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/DateTimeFormatTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/DurationFormatTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/EmailFormatTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/EmptyDependentsTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/EnumWith0DoesNotMatchFalseTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/EnumWith1DoesNotMatchTrueTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/EnumWithEscapedCharactersTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/EnumWithFalseDoesNotMatch0Test.java +src/test/java/org/openapijsonschematools/client/components/schemas/EnumWithTrueDoesNotMatch1Test.java +src/test/java/org/openapijsonschematools/client/components/schemas/EnumsInPropertiesTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/ExclusivemaximumValidationTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/ExclusiveminimumValidationTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/FloatDivisionInfTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/ForbiddenPropertyTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/HostnameFormatTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/IdnEmailFormatTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/IdnHostnameFormatTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/IntegerTypeMatchesIntegersTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/Ipv4FormatTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/Ipv6FormatTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/IriFormatTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/IriReferenceFormatTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/ItemsContainsTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/ItemsWithNullInstanceElementsTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/JsonPointerFormatTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/MaxcontainsWithoutContainsIsIgnoredTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/MaximumValidationTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/MaximumValidationWithUnsignedIntegerTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/MaxitemsValidationTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/MaxlengthValidationTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/Maxproperties0MeansTheObjectIsEmptyTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/MaxpropertiesValidationTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/MincontainsWithoutContainsIsIgnoredTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/MinimumValidationTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/MinimumValidationWithSignedIntegerTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/MinitemsValidationTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/MinlengthValidationTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/MinpropertiesValidationTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/MultipleTypesCanBeSpecifiedInAnArrayTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/NestedAllofToCheckValidationSemanticsTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/NestedAnyofToCheckValidationSemanticsTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/NestedItemsTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/NestedOneofToCheckValidationSemanticsTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/NotMoreComplexSchemaTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/NotMultipleTypesTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/NotTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/NulCharactersInStringsTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/NullTypeMatchesOnlyTheNullObjectTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/NumberTypeMatchesNumbersTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/ObjectPropertiesValidationTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/ObjectTypeMatchesObjectsTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/OneofComplexTypesTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/OneofTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/OneofWithBaseSchemaTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/OneofWithEmptySchemaTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/OneofWithRequiredTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/PatternIsNotAnchoredTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/PatternValidationTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/PatternpropertiesWithNullValuedInstancePropertiesTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/PropertiesWhoseNamesAreJavascriptObjectPropertyNamesTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/PropertiesWithEscapedCharactersTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/PropertiesWithNullValuedInstancePropertiesTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/PropertyNamedRefThatIsNotAReferenceTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/RegexFormatTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/RelativeJsonPointerFormatTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/RequiredDefaultValidationTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/RequiredPropertiesWhoseNamesAreJavascriptObjectPropertyNamesTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/RequiredValidationTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/RequiredWithEmptyArrayTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/RequiredWithEscapedCharactersTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/SimpleEnumValidationTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/SmallMultipleOfLargeIntegerTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/StringTypeMatchesStringsTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/TimeFormatTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/TypeArrayObjectOrNullTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/TypeArrayOrObjectTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/TypeAsArrayWithOneItemTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/UnevaluateditemsWithItemsTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/UnevaluatedpropertiesWithAdjacentAdditionalpropertiesTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/UnevaluatedpropertiesWithNullValuedInstancePropertiesTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/UniqueitemsFalseValidationTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/UniqueitemsValidationTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/UriFormatTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/UriReferenceFormatTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/UriTemplateFormatTest.java +src/test/java/org/openapijsonschematools/client/components/schemas/UuidFormatTest.java src/test/java/org/openapijsonschematools/client/configurations/JsonSchemaKeywordFlagsTest.java src/test/java/org/openapijsonschematools/client/schemas/AnyTypeSchemaTest.java src/test/java/org/openapijsonschematools/client/schemas/ArrayTypeSchemaTest.java diff --git a/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/components/schemas/ContainsWithNullInstanceElementsTest.java b/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/components/schemas/ContainsWithNullInstanceElementsTest.java index 0a573bbc857..18d4885a020 100644 --- a/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/components/schemas/ContainsWithNullInstanceElementsTest.java +++ b/samples/client/3_1_0_unit_test/java/src/test/java/org/openapijsonschematools/client/components/schemas/ContainsWithNullInstanceElementsTest.java @@ -23,7 +23,7 @@ public void testAllowsNullItemsPasses() { final var schema = ContainsWithNullInstanceElements.ContainsWithNullInstanceElements1.getInstance(); schema.validate( Arrays.asList( - null + (Void) null ), configuration ); diff --git a/src/main/resources/java/src/main/java/packagename/components/schemas/helpers/payload_renderer.hbs b/src/main/resources/java/src/main/java/packagename/components/schemas/helpers/payload_renderer.hbs index 2a4086cf1c6..c64a63b09dd 100644 --- a/src/main/resources/java/src/main/java/packagename/components/schemas/helpers/payload_renderer.hbs +++ b/src/main/resources/java/src/main/java/packagename/components/schemas/helpers/payload_renderer.hbs @@ -50,13 +50,20 @@ MapUtils.makeMap( {{/each}} {{else}} Arrays.asList( - {{#each value}} - {{#unless @last}} + {{#eq value.length 1}} + {{#each value}} + {{! list with single null needs to describe the item as (Void) }} + {{> src/main/java/packagename/components/schemas/helpers/payload_renderer endChar="" }} + {{/each}} + {{else}} + {{#each value}} + {{#unless @last}} {{> src/main/java/packagename/components/schemas/helpers/payload_renderer endChar="," noVoid=true }} - {{else}} + {{else}} {{> src/main/java/packagename/components/schemas/helpers/payload_renderer endChar="" noVoid=true }} - {{/unless}} - {{/each}} + {{/unless}} + {{/each}} + {{/eq}} ){{endChar}} {{/if}} {{/eq}} diff --git a/src/main/resources/java/src/main/java/packagename/schemas/validation/ListMaker.hbs b/src/main/resources/java/src/main/java/packagename/schemas/validation/ListMaker.hbs new file mode 100644 index 00000000000..bda699db04e --- /dev/null +++ b/src/main/resources/java/src/main/java/packagename/schemas/validation/ListMaker.hbs @@ -0,0 +1,20 @@ +package {{{packageName}}}.schemas.validation; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class ListMaker { + /** + * A builder for lists that allows in null values + * Schema tests + doc code samples need it + * @param entries items to add + * @return the output map + * @param value type + */ + @SafeVarargs + @SuppressWarnings("varargs") + public static List makeList(E... entries) { + return new ArrayList<>(Arrays.stream(entries).toList()); + } +} \ No newline at end of file From c457415f4100264fcc7600f09af9f7bad4c9d0f4 Mon Sep 17 00:00:00 2001 From: Justin Black Date: Thu, 11 Jan 2024 16:46:03 -0800 Subject: [PATCH 7/8] Samples regen --- .../client/schemas/validation/JsonSchema.java | 8 ++ .../schemas/validation/JsonSchemaInfo.java | 5 + .../java/.openapi-generator/FILES | 112 ------------------ .../client/schemas/validation/JsonSchema.java | 8 ++ .../schemas/validation/JsonSchemaInfo.java | 5 + 5 files changed, 26 insertions(+), 112 deletions(-) diff --git a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchema.java b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchema.java index a63aaa4f191..92b17cca2ae 100644 --- a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchema.java +++ b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchema.java @@ -46,6 +46,7 @@ public abstract class JsonSchema { public final boolean defaultValueSet; public final @Nullable Object constValue; public final boolean constValueSet; + public final @Nullable Class contains; private final LinkedHashMap keywordToValidator; protected JsonSchema(JsonSchemaInfo jsonSchemaInfo) { @@ -228,6 +229,13 @@ protected JsonSchema(JsonSchemaInfo jsonSchemaInfo) { new ConstValidator(this.constValue) ); } + this.contains = jsonSchemaInfo.contains; + if (this.contains != null) { + keywordToValidator.put( + "contains", + new ContainsValidator(this.contains) + ); + } this.keywordToValidator = keywordToValidator; } diff --git a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchemaInfo.java b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchemaInfo.java index e979319b716..b726051cd2e 100644 --- a/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchemaInfo.java +++ b/samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchemaInfo.java @@ -142,4 +142,9 @@ public JsonSchemaInfo constValue(@Nullable Object constValue) { this.constValueSet = true; return this; } + public @Nullable Class contains = null; + public JsonSchemaInfo contains(Class contains) { + this.contains = contains; + return this; + } } \ No newline at end of file diff --git a/samples/client/3_1_0_unit_test/java/.openapi-generator/FILES b/samples/client/3_1_0_unit_test/java/.openapi-generator/FILES index 894950749bd..5f8c5d29a21 100644 --- a/samples/client/3_1_0_unit_test/java/.openapi-generator/FILES +++ b/samples/client/3_1_0_unit_test/java/.openapi-generator/FILES @@ -317,118 +317,6 @@ src/main/java/org/openapijsonschematools/client/schemas/validation/ValidationMet src/main/java/org/openapijsonschematools/client/servers/Server0.java src/main/java/org/openapijsonschematools/client/servers/ServerWithVariables.java src/main/java/org/openapijsonschematools/client/servers/ServerWithoutVariables.java -src/test/java/org/openapijsonschematools/client/components/schemas/AdditionalpropertiesAreAllowedByDefaultTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/AdditionalpropertiesCanExistByItselfTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/AdditionalpropertiesDoesNotLookInApplicatorsTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/AdditionalpropertiesWithNullValuedInstancePropertiesTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/AdditionalpropertiesWithSchemaTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/AllofCombinedWithAnyofOneofTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/AllofSimpleTypesTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/AllofTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/AllofWithBaseSchemaTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/AllofWithOneEmptySchemaTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/AllofWithTheFirstEmptySchemaTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/AllofWithTheLastEmptySchemaTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/AllofWithTwoEmptySchemasTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/AnyofComplexTypesTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/AnyofTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/AnyofWithBaseSchemaTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/AnyofWithOneEmptySchemaTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/ArrayTypeMatchesArraysTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/BooleanTypeMatchesBooleansTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/ByIntTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/ByNumberTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/BySmallNumberTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/ConstNulCharactersInStringsTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/ContainsKeywordValidationTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/ContainsWithNullInstanceElementsTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/DateFormatTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/DateTimeFormatTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/DurationFormatTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/EmailFormatTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/EmptyDependentsTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/EnumWith0DoesNotMatchFalseTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/EnumWith1DoesNotMatchTrueTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/EnumWithEscapedCharactersTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/EnumWithFalseDoesNotMatch0Test.java -src/test/java/org/openapijsonschematools/client/components/schemas/EnumWithTrueDoesNotMatch1Test.java -src/test/java/org/openapijsonschematools/client/components/schemas/EnumsInPropertiesTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/ExclusivemaximumValidationTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/ExclusiveminimumValidationTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/FloatDivisionInfTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/ForbiddenPropertyTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/HostnameFormatTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/IdnEmailFormatTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/IdnHostnameFormatTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/IntegerTypeMatchesIntegersTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/Ipv4FormatTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/Ipv6FormatTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/IriFormatTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/IriReferenceFormatTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/ItemsContainsTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/ItemsWithNullInstanceElementsTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/JsonPointerFormatTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/MaxcontainsWithoutContainsIsIgnoredTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/MaximumValidationTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/MaximumValidationWithUnsignedIntegerTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/MaxitemsValidationTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/MaxlengthValidationTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/Maxproperties0MeansTheObjectIsEmptyTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/MaxpropertiesValidationTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/MincontainsWithoutContainsIsIgnoredTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/MinimumValidationTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/MinimumValidationWithSignedIntegerTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/MinitemsValidationTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/MinlengthValidationTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/MinpropertiesValidationTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/MultipleTypesCanBeSpecifiedInAnArrayTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/NestedAllofToCheckValidationSemanticsTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/NestedAnyofToCheckValidationSemanticsTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/NestedItemsTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/NestedOneofToCheckValidationSemanticsTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/NotMoreComplexSchemaTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/NotMultipleTypesTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/NotTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/NulCharactersInStringsTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/NullTypeMatchesOnlyTheNullObjectTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/NumberTypeMatchesNumbersTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/ObjectPropertiesValidationTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/ObjectTypeMatchesObjectsTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/OneofComplexTypesTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/OneofTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/OneofWithBaseSchemaTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/OneofWithEmptySchemaTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/OneofWithRequiredTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/PatternIsNotAnchoredTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/PatternValidationTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/PatternpropertiesWithNullValuedInstancePropertiesTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/PropertiesWhoseNamesAreJavascriptObjectPropertyNamesTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/PropertiesWithEscapedCharactersTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/PropertiesWithNullValuedInstancePropertiesTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/PropertyNamedRefThatIsNotAReferenceTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/RegexFormatTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/RelativeJsonPointerFormatTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/RequiredDefaultValidationTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/RequiredPropertiesWhoseNamesAreJavascriptObjectPropertyNamesTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/RequiredValidationTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/RequiredWithEmptyArrayTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/RequiredWithEscapedCharactersTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/SimpleEnumValidationTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/SmallMultipleOfLargeIntegerTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/StringTypeMatchesStringsTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/TimeFormatTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/TypeArrayObjectOrNullTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/TypeArrayOrObjectTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/TypeAsArrayWithOneItemTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/UnevaluateditemsWithItemsTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/UnevaluatedpropertiesWithAdjacentAdditionalpropertiesTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/UnevaluatedpropertiesWithNullValuedInstancePropertiesTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/UniqueitemsFalseValidationTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/UniqueitemsValidationTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/UriFormatTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/UriReferenceFormatTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/UriTemplateFormatTest.java -src/test/java/org/openapijsonschematools/client/components/schemas/UuidFormatTest.java src/test/java/org/openapijsonschematools/client/configurations/JsonSchemaKeywordFlagsTest.java src/test/java/org/openapijsonschematools/client/schemas/AnyTypeSchemaTest.java src/test/java/org/openapijsonschematools/client/schemas/ArrayTypeSchemaTest.java diff --git a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchema.java b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchema.java index a63aaa4f191..92b17cca2ae 100644 --- a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchema.java +++ b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchema.java @@ -46,6 +46,7 @@ public abstract class JsonSchema { public final boolean defaultValueSet; public final @Nullable Object constValue; public final boolean constValueSet; + public final @Nullable Class contains; private final LinkedHashMap keywordToValidator; protected JsonSchema(JsonSchemaInfo jsonSchemaInfo) { @@ -228,6 +229,13 @@ protected JsonSchema(JsonSchemaInfo jsonSchemaInfo) { new ConstValidator(this.constValue) ); } + this.contains = jsonSchemaInfo.contains; + if (this.contains != null) { + keywordToValidator.put( + "contains", + new ContainsValidator(this.contains) + ); + } this.keywordToValidator = keywordToValidator; } diff --git a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchemaInfo.java b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchemaInfo.java index e979319b716..b726051cd2e 100644 --- a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchemaInfo.java +++ b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchemaInfo.java @@ -142,4 +142,9 @@ public JsonSchemaInfo constValue(@Nullable Object constValue) { this.constValueSet = true; return this; } + public @Nullable Class contains = null; + public JsonSchemaInfo contains(Class contains) { + this.contains = contains; + return this; + } } \ No newline at end of file From 29a1eb67698e105b26b1c48d3d223d29c18d9d9d Mon Sep 17 00:00:00 2001 From: Justin Black Date: Thu, 11 Jan 2024 16:54:22 -0800 Subject: [PATCH 8/8] Deletes lingering FakeValidator.java --- .../client/schemas/validation/FakeValidator.java | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/FakeValidator.java diff --git a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/FakeValidator.java b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/FakeValidator.java deleted file mode 100644 index db5ec573081..00000000000 --- a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/schemas/validation/FakeValidator.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.openapijsonschematools.client.schemas.validation; - -import org.checkerframework.checker.nullness.qual.Nullable; - -public class FakeValidator implements KeywordValidator { - @Override - public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) { - return null; - } -}