Skip to content
This repository was archived by the owner on Dec 25, 2024. It is now read-only.

Commit e8bd86a

Browse files
authored
Java, adds schema contains (#360)
* Adds initial ContainsValidator * Adds ContainsValidator, adds needed containsPathToSchemas input to the validate method * Fixes 303 java unit tests * Regenerates other java samples * Docs updated, java 310 tests updated * Fixes java test with list of only null * Samples regen * Deletes lingering FakeValidator.java
1 parent 12ebcd6 commit e8bd86a

File tree

171 files changed

+3368
-397
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

171 files changed

+3368
-397
lines changed

docs/generators/java.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
277277
|AllOf|✓|OAS2,OAS3
278278
|AnyOf|✓|OAS3
279279
|Const|✓|OAS3
280-
|Contains||OAS3
280+
|Contains||OAS3
281281
|Default|✓|OAS2,OAS3
282282
|DependentRequired|✗|OAS3
283283
|DependentSchemas|✗|OAS3

samples/client/3_0_3_unit_test/java/.openapi-generator/FILES

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,14 +210,14 @@ src/main/java/org/openapijsonschematools/client/schemas/validation/BooleanEnumVa
210210
src/main/java/org/openapijsonschematools/client/schemas/validation/BooleanSchemaValidator.java
211211
src/main/java/org/openapijsonschematools/client/schemas/validation/BooleanValueMethod.java
212212
src/main/java/org/openapijsonschematools/client/schemas/validation/ConstValidator.java
213+
src/main/java/org/openapijsonschematools/client/schemas/validation/ContainsValidator.java
213214
src/main/java/org/openapijsonschematools/client/schemas/validation/CustomIsoparser.java
214215
src/main/java/org/openapijsonschematools/client/schemas/validation/DefaultValueMethod.java
215216
src/main/java/org/openapijsonschematools/client/schemas/validation/DoubleEnumValidator.java
216217
src/main/java/org/openapijsonschematools/client/schemas/validation/DoubleValueMethod.java
217218
src/main/java/org/openapijsonschematools/client/schemas/validation/EnumValidator.java
218219
src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMaximumValidator.java
219220
src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMinimumValidator.java
220-
src/main/java/org/openapijsonschematools/client/schemas/validation/FakeValidator.java
221221
src/main/java/org/openapijsonschematools/client/schemas/validation/FloatEnumValidator.java
222222
src/main/java/org/openapijsonschematools/client/schemas/validation/FloatValueMethod.java
223223
src/main/java/org/openapijsonschematools/client/schemas/validation/FormatValidator.java

samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AdditionalPropertiesValidator.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,12 @@ public AdditionalPropertiesValidator(Class<? extends JsonSchema> additionalPrope
1515
}
1616

1717
@Override
18-
public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) {
18+
public @Nullable PathToSchemasMap validate(
19+
JsonSchema schema,
20+
@Nullable Object arg,
21+
ValidationMetadata validationMetadata,
22+
List<PathToSchemasMap> containsPathToSchemas
23+
) {
1924
if (!(arg instanceof Map<?, ?> mapArg)) {
2025
return null;
2126
}

samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AllOfValidator.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,12 @@ public AllOfValidator(List<Class<? extends JsonSchema>> allOf) {
1111
}
1212

1313
@Override
14-
public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) {
14+
public @Nullable PathToSchemasMap validate(
15+
JsonSchema schema,
16+
@Nullable Object arg,
17+
ValidationMetadata validationMetadata,
18+
List<PathToSchemasMap> containsPathToSchemas
19+
) {
1520
PathToSchemasMap pathToSchemas = new PathToSchemasMap();
1621
for(Class<? extends JsonSchema> allOfClass: allOf) {
1722
JsonSchema allOfSchema = JsonSchemaFactory.getInstance(allOfClass);

samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AnyOfValidator.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,12 @@ public AnyOfValidator(List<Class<? extends JsonSchema>> anyOf) {
1414
}
1515

1616
@Override
17-
public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) {
17+
public @Nullable PathToSchemasMap validate(
18+
JsonSchema schema,
19+
@Nullable Object arg,
20+
ValidationMetadata validationMetadata,
21+
List<PathToSchemasMap> containsPathToSchemas
22+
) {
1823
PathToSchemasMap pathToSchemas = new PathToSchemasMap();
1924
List<Class<? extends JsonSchema>> validatedAnyOfClasses = new ArrayList<>();
2025
for(Class<? extends JsonSchema> anyOfClass: anyOf) {

samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ConstValidator.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.checkerframework.checker.nullness.qual.Nullable;
55

66
import java.math.BigDecimal;
7+
import java.util.List;
78
import java.util.Objects;
89

910
public class ConstValidator extends BigDecimalValidator implements KeywordValidator {
@@ -14,7 +15,12 @@ public ConstValidator(@Nullable Object constValue) {
1415
}
1516

1617
@Override
17-
public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) {
18+
public @Nullable PathToSchemasMap validate(
19+
JsonSchema schema,
20+
@Nullable Object arg,
21+
ValidationMetadata validationMetadata,
22+
List<PathToSchemasMap> containsPathToSchemas
23+
) {
1824
if (arg instanceof Number) {
1925
BigDecimal castArg = getBigDecimal((Number) arg);
2026
if (Objects.equals(castArg, constValue)) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package org.openapijsonschematools.client.schemas.validation;
2+
3+
import org.checkerframework.checker.nullness.qual.Nullable;
4+
import org.openapijsonschematools.client.exceptions.ValidationException;
5+
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
9+
public class ContainsValidator implements KeywordValidator {
10+
public final Class<? extends JsonSchema> contains;
11+
12+
public ContainsValidator(Class<? extends JsonSchema> contains) {
13+
this.contains = contains;
14+
}
15+
16+
@Override
17+
public @Nullable PathToSchemasMap validate(
18+
JsonSchema schema,
19+
@Nullable Object arg,
20+
ValidationMetadata validationMetadata,
21+
List<PathToSchemasMap> containsPathToSchemas
22+
) {
23+
if (!(arg instanceof List)) {
24+
return null;
25+
}
26+
if (containsPathToSchemas.isEmpty()) {
27+
throw new ValidationException(
28+
"Validation failed for contains keyword in class="+schema.getClass()
29+
+ " at pathToItem="+validationMetadata.pathToItem()+". No "
30+
+ "items validated to the contains schema."
31+
);
32+
}
33+
PathToSchemasMap pathToSchemas = new PathToSchemasMap();
34+
for (PathToSchemasMap otherPathToSchema: containsPathToSchemas) {
35+
pathToSchemas.update(otherPathToSchema);
36+
}
37+
return pathToSchemas;
38+
}
39+
40+
public List<PathToSchemasMap> getContainsPathToSchemas(
41+
@Nullable Object arg,
42+
ValidationMetadata validationMetadata
43+
) {
44+
if (!(arg instanceof List)) {
45+
return new ArrayList<>();
46+
}
47+
List<PathToSchemasMap> containsPathToSchemas = new ArrayList<>();
48+
int i = 0;
49+
for(Object itemValue: (List<?>) arg) {
50+
PathToSchemasMap thesePathToSchemas = new PathToSchemasMap();
51+
List<Object> itemPathToItem = new ArrayList<>(validationMetadata.pathToItem());
52+
itemPathToItem.add(i);
53+
ValidationMetadata itemValidationMetadata = new ValidationMetadata(
54+
itemPathToItem,
55+
validationMetadata.configuration(),
56+
validationMetadata.validatedPathToSchemas(),
57+
validationMetadata.seenClasses()
58+
);
59+
JsonSchema containsSchema = JsonSchemaFactory.getInstance(contains);
60+
if (itemValidationMetadata.validationRanEarlier(containsSchema)) {
61+
// todo add_deeper_validated_schemas
62+
containsPathToSchemas.add(thesePathToSchemas);
63+
i += 1;
64+
continue;
65+
}
66+
67+
try {
68+
PathToSchemasMap otherPathToSchemas = JsonSchema.validate(
69+
containsSchema, itemValue, itemValidationMetadata);
70+
containsPathToSchemas.add(otherPathToSchemas);
71+
} catch (ValidationException ignored) {
72+
;
73+
}
74+
}
75+
return containsPathToSchemas;
76+
}
77+
}

samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/EnumValidator.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.checkerframework.checker.nullness.qual.Nullable;
55

66
import java.math.BigDecimal;
7+
import java.util.List;
78
import java.util.Set;
89

910
public class EnumValidator extends BigDecimalValidator implements KeywordValidator {
@@ -19,7 +20,12 @@ private boolean enumContainsArg(@Nullable Object arg){
1920
}
2021

2122
@Override
22-
public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) {
23+
public @Nullable PathToSchemasMap validate(
24+
JsonSchema schema,
25+
@Nullable Object arg,
26+
ValidationMetadata validationMetadata,
27+
List<PathToSchemasMap> containsPathToSchemas
28+
) {
2329
if (enumValues.isEmpty()) {
2430
throw new ValidationException("No value can match enum because enum is empty");
2531
}

samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMaximumValidator.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import org.openapijsonschematools.client.exceptions.ValidationException;
44
import org.checkerframework.checker.nullness.qual.Nullable;
55

6+
import java.util.List;
67

78
public class ExclusiveMaximumValidator implements KeywordValidator {
89
public final Number exclusiveMaximum;
@@ -12,7 +13,12 @@ public ExclusiveMaximumValidator(Number exclusiveMaximum) {
1213
}
1314

1415
@Override
15-
public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) {
16+
public @Nullable PathToSchemasMap validate(
17+
JsonSchema schema,
18+
@Nullable Object arg,
19+
ValidationMetadata validationMetadata,
20+
List<PathToSchemasMap> containsPathToSchemas
21+
) {
1622
if (!(arg instanceof Number)) {
1723
return null;
1824
}

samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMinimumValidator.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import org.openapijsonschematools.client.exceptions.ValidationException;
44
import org.checkerframework.checker.nullness.qual.Nullable;
55

6+
import java.util.List;
67

78
public class ExclusiveMinimumValidator implements KeywordValidator {
89
public final Number exclusiveMinimum;
@@ -12,7 +13,12 @@ public ExclusiveMinimumValidator(Number exclusiveMinimum) {
1213
}
1314

1415
@Override
15-
public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) {
16+
public @Nullable PathToSchemasMap validate(
17+
JsonSchema schema,
18+
@Nullable Object arg,
19+
ValidationMetadata validationMetadata,
20+
List<PathToSchemasMap> containsPathToSchemas
21+
) {
1622
if (!(arg instanceof Number)) {
1723
return null;
1824
}

samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/FakeValidator.java

Lines changed: 0 additions & 10 deletions
This file was deleted.

samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/FormatValidator.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.math.BigDecimal;
77
import java.math.BigInteger;
88
import java.time.format.DateTimeParseException;
9+
import java.util.List;
910
import java.util.UUID;
1011

1112
public class FormatValidator implements KeywordValidator {
@@ -143,7 +144,12 @@ private Void validateStringFormat(String arg, ValidationMetadata validationMetad
143144
}
144145

145146
@Override
146-
public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) {
147+
public @Nullable PathToSchemasMap validate(
148+
JsonSchema schema,
149+
@Nullable Object arg,
150+
ValidationMetadata validationMetadata,
151+
List<PathToSchemasMap> containsPathToSchemas
152+
) {
147153
if (arg instanceof Number) {
148154
validateNumericFormat(
149155
(Number) arg,

samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ItemsValidator.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,12 @@ public ItemsValidator(Class<? extends JsonSchema> items) {
1313
}
1414

1515
@Override
16-
public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) {
16+
public @Nullable PathToSchemasMap validate(
17+
JsonSchema schema,
18+
@Nullable Object arg,
19+
ValidationMetadata validationMetadata,
20+
List<PathToSchemasMap> containsPathToSchemas
21+
) {
1722
if (!(arg instanceof List)) {
1823
return null;
1924
}

samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchema.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ public abstract class JsonSchema {
4646
public final boolean defaultValueSet;
4747
public final @Nullable Object constValue;
4848
public final boolean constValueSet;
49+
public final @Nullable Class<? extends JsonSchema> contains;
4950
private final LinkedHashMap<String, KeywordValidator> keywordToValidator;
5051

5152
protected JsonSchema(JsonSchemaInfo jsonSchemaInfo) {
@@ -228,6 +229,13 @@ protected JsonSchema(JsonSchemaInfo jsonSchemaInfo) {
228229
new ConstValidator(this.constValue)
229230
);
230231
}
232+
this.contains = jsonSchemaInfo.contains;
233+
if (this.contains != null) {
234+
keywordToValidator.put(
235+
"contains",
236+
new ContainsValidator(this.contains)
237+
);
238+
}
231239
this.keywordToValidator = keywordToValidator;
232240
}
233241

@@ -242,6 +250,11 @@ public static PathToSchemasMap validate(
242250
LinkedHashSet<String> disabledKeywords = validationMetadata.configuration().disabledKeywordFlags().getKeywords();
243251
PathToSchemasMap pathToSchemas = new PathToSchemasMap();
244252
LinkedHashMap<String, KeywordValidator> thisKeywordToValidator = jsonSchema.keywordToValidator;
253+
List<PathToSchemasMap> containsPathToSchemas = new ArrayList<>();
254+
KeywordValidator containsValidator = thisKeywordToValidator.get("contains");
255+
if (containsValidator != null) {
256+
containsPathToSchemas = containsValidator.getContainsPathToSchemas(arg, validationMetadata);
257+
}
245258
for (Map.Entry<String, KeywordValidator> entry: thisKeywordToValidator.entrySet()) {
246259
String jsonKeyword = entry.getKey();
247260
if (disabledKeywords.contains(jsonKeyword)) {
@@ -254,7 +267,8 @@ public static PathToSchemasMap validate(
254267
@Nullable PathToSchemasMap otherPathToSchemas = validator.validate(
255268
jsonSchema,
256269
arg,
257-
validationMetadata
270+
validationMetadata,
271+
containsPathToSchemas
258272
);
259273
if (otherPathToSchemas == null) {
260274
continue;

samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchemaInfo.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,4 +142,9 @@ public JsonSchemaInfo constValue(@Nullable Object constValue) {
142142
this.constValueSet = true;
143143
return this;
144144
}
145+
public @Nullable Class<? extends JsonSchema> contains = null;
146+
public JsonSchemaInfo contains(Class<? extends JsonSchema> contains) {
147+
this.contains = contains;
148+
return this;
149+
}
145150
}

samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/KeywordValidator.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,21 @@
33
import org.openapijsonschematools.client.exceptions.ValidationException;
44
import org.checkerframework.checker.nullness.qual.Nullable;
55

6+
import java.util.ArrayList;
7+
import java.util.List;
8+
69
public interface KeywordValidator {
710
@Nullable PathToSchemasMap validate(
8-
JsonSchema schema,
9-
@Nullable Object arg,
10-
ValidationMetadata validationMetadata) throws ValidationException;
11+
JsonSchema schema,
12+
@Nullable Object arg,
13+
ValidationMetadata validationMetadata,
14+
List<PathToSchemasMap> containsPathToSchemas
15+
) throws ValidationException;
16+
17+
default List<PathToSchemasMap> getContainsPathToSchemas(
18+
@Nullable Object arg,
19+
ValidationMetadata validationMetadata
20+
) {
21+
return new ArrayList<>();
22+
}
1123
}

samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxItemsValidator.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,12 @@ public MaxItemsValidator(int maxItems) {
1313
}
1414

1515
@Override
16-
public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) {
16+
public @Nullable PathToSchemasMap validate(
17+
JsonSchema schema,
18+
@Nullable Object arg,
19+
ValidationMetadata validationMetadata,
20+
List<PathToSchemasMap> containsPathToSchemas
21+
) {
1722
if (!(arg instanceof List)) {
1823
return null;
1924
}

samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/MaxLengthValidator.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import org.openapijsonschematools.client.exceptions.ValidationException;
44
import org.checkerframework.checker.nullness.qual.Nullable;
55

6+
import java.util.List;
7+
68
public class MaxLengthValidator extends LengthValidator implements KeywordValidator {
79
public final int maxLength;
810

@@ -11,7 +13,12 @@ public MaxLengthValidator(int maxLength) {
1113
}
1214

1315
@Override
14-
public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) {
16+
public @Nullable PathToSchemasMap validate(
17+
JsonSchema schema,
18+
@Nullable Object arg,
19+
ValidationMetadata validationMetadata,
20+
List<PathToSchemasMap> containsPathToSchemas
21+
) {
1522
if (!(arg instanceof String)) {
1623
return null;
1724
}

0 commit comments

Comments
 (0)