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

Commit c686431

Browse files
authored
Java, adds unevaluatedProperties (#374)
* Adds unevaluatedProperties inputs and incomplete validator * Samples updated
1 parent 2b6abab commit c686431

File tree

34 files changed

+1049
-21
lines changed

34 files changed

+1049
-21
lines changed

docs/generators/java.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
313313
|Then|✓|OAS3
314314
|Type|✓|OAS2,OAS3
315315
|UnevaluatedItems|✓|OAS3
316-
|UnevaluatedProperties||OAS3
316+
|UnevaluatedProperties||OAS3
317317
|UniqueItems|✓|OAS2,OAS3
318318
|Xml|✗|OAS2,OAS3
319319

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

+1
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,7 @@ src/main/java/org/openapijsonschematools/client/schemas/validation/StringValueMe
272272
src/main/java/org/openapijsonschematools/client/schemas/validation/ThenValidator.java
273273
src/main/java/org/openapijsonschematools/client/schemas/validation/TypeValidator.java
274274
src/main/java/org/openapijsonschematools/client/schemas/validation/UnevaluatedItemsValidator.java
275+
src/main/java/org/openapijsonschematools/client/schemas/validation/UnevaluatedPropertiesValidator.java
275276
src/main/java/org/openapijsonschematools/client/schemas/validation/UniqueItemsValidator.java
276277
src/main/java/org/openapijsonschematools/client/schemas/validation/UnsetAnyTypeJsonSchema.java
277278
src/main/java/org/openapijsonschematools/client/schemas/validation/ValidationData.java

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

+6-1
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ public abstract class JsonSchema {
5858
public final @Nullable Class<? extends JsonSchema> then;
5959
public final @Nullable Class<? extends JsonSchema> elseSchema;
6060
public final @Nullable Class<? extends JsonSchema> unevaluatedItems;
61+
public final @Nullable Class<? extends JsonSchema> unevaluatedProperties;
6162
private final LinkedHashMap<String, KeywordValidator> keywordToValidator;
6263

6364
protected JsonSchema(JsonSchemaInfo jsonSchemaInfo) {
@@ -213,6 +214,10 @@ protected JsonSchema(JsonSchemaInfo jsonSchemaInfo) {
213214
if (this.unevaluatedItems != null) {
214215
keywordToValidator.put("unevaluatedItems", new UnevaluatedItemsValidator());
215216
}
217+
this.unevaluatedProperties = jsonSchemaInfo.unevaluatedProperties;
218+
if (this.unevaluatedProperties != null) {
219+
keywordToValidator.put("unevaluatedProperties", new UnevaluatedPropertiesValidator());
220+
}
216221
this.keywordToValidator = keywordToValidator;
217222
}
218223

@@ -333,7 +338,7 @@ public static PathToSchemasMap validate(
333338
continue;
334339
}
335340
}
336-
if ("unevaluatedItems".equals(jsonKeyword)) {
341+
if ("unevaluatedItems".equals(jsonKeyword) || "unevaluatedProperties".equals(jsonKeyword)) {
337342
knownPathToSchemas = pathToSchemas;
338343
}
339344
KeywordValidator validator = entry.getValue();

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

+5
Original file line numberDiff line numberDiff line change
@@ -202,4 +202,9 @@ public JsonSchemaInfo unevaluatedItems(Class<? extends JsonSchema> unevaluatedIt
202202
this.unevaluatedItems = unevaluatedItems;
203203
return this;
204204
}
205+
public @Nullable Class<? extends JsonSchema> unevaluatedProperties = null;
206+
public JsonSchemaInfo unevaluatedProperties(Class<? extends JsonSchema> unevaluatedProperties) {
207+
this.unevaluatedProperties = unevaluatedProperties;
208+
return this;
209+
}
205210
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package org.openapijsonschematools.client.schemas.validation;
2+
3+
import org.checkerframework.checker.nullness.qual.Nullable;
4+
import org.openapijsonschematools.client.exceptions.InvalidTypeException;
5+
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
import java.util.Map;
9+
10+
public class UnevaluatedPropertiesValidator implements KeywordValidator {
11+
@Override
12+
public @Nullable PathToSchemasMap validate(
13+
ValidationData data
14+
) {
15+
var unevaluatedProperties = data.schema().unevaluatedProperties;
16+
if (unevaluatedProperties == null) {
17+
return null;
18+
}
19+
var knownPathToSchemas = data.knownPathToSchemas();
20+
if (knownPathToSchemas == null) {
21+
return null;
22+
}
23+
if (!(data.arg() instanceof Map<?, ?> mapArg)) {
24+
return null;
25+
}
26+
PathToSchemasMap pathToSchemas = new PathToSchemasMap();
27+
JsonSchema unevaluatedPropertiesSchema = JsonSchemaFactory.getInstance(unevaluatedProperties);
28+
for(Map.Entry<?, ?> entry: mapArg.entrySet()) {
29+
if (!(entry.getKey() instanceof String propName)) {
30+
throw new InvalidTypeException("Map keys must be strings");
31+
}
32+
List<Object> propPathToItem = new ArrayList<>(data.validationMetadata().pathToItem());
33+
propPathToItem.add(propName);
34+
if (knownPathToSchemas.containsKey(propPathToItem)) {
35+
continue;
36+
}
37+
@Nullable Object propValue = mapArg.get(propName);
38+
ValidationMetadata propValidationMetadata = new ValidationMetadata(
39+
propPathToItem,
40+
data.validationMetadata().configuration(),
41+
data.validationMetadata().validatedPathToSchemas(),
42+
data.validationMetadata().seenClasses()
43+
);
44+
PathToSchemasMap otherPathToSchemas = JsonSchema.validate(unevaluatedPropertiesSchema, propValue, propValidationMetadata);
45+
pathToSchemas.update(otherPathToSchemas);
46+
}
47+
return pathToSchemas;
48+
}
49+
}

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

+5
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,8 @@ docs/components/schemas/UnevaluateditemsAsSchema.md
129129
docs/components/schemas/UnevaluateditemsDependsOnMultipleNestedContains.md
130130
docs/components/schemas/UnevaluateditemsWithItems.md
131131
docs/components/schemas/UnevaluateditemsWithNullInstanceElements.md
132+
docs/components/schemas/UnevaluatedpropertiesNotAffectedByPropertynames.md
133+
docs/components/schemas/UnevaluatedpropertiesSchema.md
132134
docs/components/schemas/UnevaluatedpropertiesWithAdjacentAdditionalproperties.md
133135
docs/components/schemas/UnevaluatedpropertiesWithNullValuedInstanceProperties.md
134136
docs/components/schemas/UniqueitemsFalseValidation.md
@@ -272,6 +274,8 @@ src/main/java/org/openapijsonschematools/client/components/schemas/Unevaluatedit
272274
src/main/java/org/openapijsonschematools/client/components/schemas/UnevaluateditemsDependsOnMultipleNestedContains.java
273275
src/main/java/org/openapijsonschematools/client/components/schemas/UnevaluateditemsWithItems.java
274276
src/main/java/org/openapijsonschematools/client/components/schemas/UnevaluateditemsWithNullInstanceElements.java
277+
src/main/java/org/openapijsonschematools/client/components/schemas/UnevaluatedpropertiesNotAffectedByPropertynames.java
278+
src/main/java/org/openapijsonschematools/client/components/schemas/UnevaluatedpropertiesSchema.java
275279
src/main/java/org/openapijsonschematools/client/components/schemas/UnevaluatedpropertiesWithAdjacentAdditionalproperties.java
276280
src/main/java/org/openapijsonschematools/client/components/schemas/UnevaluatedpropertiesWithNullValuedInstanceProperties.java
277281
src/main/java/org/openapijsonschematools/client/components/schemas/UniqueitemsFalseValidation.java
@@ -380,6 +384,7 @@ src/main/java/org/openapijsonschematools/client/schemas/validation/StringValueMe
380384
src/main/java/org/openapijsonschematools/client/schemas/validation/ThenValidator.java
381385
src/main/java/org/openapijsonschematools/client/schemas/validation/TypeValidator.java
382386
src/main/java/org/openapijsonschematools/client/schemas/validation/UnevaluatedItemsValidator.java
387+
src/main/java/org/openapijsonschematools/client/schemas/validation/UnevaluatedPropertiesValidator.java
383388
src/main/java/org/openapijsonschematools/client/schemas/validation/UniqueItemsValidator.java
384389
src/main/java/org/openapijsonschematools/client/schemas/validation/UnsetAnyTypeJsonSchema.java
385390
src/main/java/org/openapijsonschematools/client/schemas/validation/ValidationData.java

samples/client/3_1_0_unit_test/java/README.md

+2
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,8 @@ allowed input and output types.
287287
| [UnevaluateditemsDependsOnMultipleNestedContains.UnevaluateditemsDependsOnMultipleNestedContains1](docs/components/schemas/UnevaluateditemsDependsOnMultipleNestedContains.md#unevaluateditemsdependsonmultiplenestedcontains1) | |
288288
| [UnevaluateditemsWithItems.UnevaluateditemsWithItems1](docs/components/schemas/UnevaluateditemsWithItems.md#unevaluateditemswithitems1) | |
289289
| [UnevaluateditemsWithNullInstanceElements.UnevaluateditemsWithNullInstanceElements1](docs/components/schemas/UnevaluateditemsWithNullInstanceElements.md#unevaluateditemswithnullinstanceelements1) | |
290+
| [UnevaluatedpropertiesNotAffectedByPropertynames.UnevaluatedpropertiesNotAffectedByPropertynames1](docs/components/schemas/UnevaluatedpropertiesNotAffectedByPropertynames.md#unevaluatedpropertiesnotaffectedbypropertynames1) | |
291+
| [UnevaluatedpropertiesSchema.UnevaluatedpropertiesSchema1](docs/components/schemas/UnevaluatedpropertiesSchema.md#unevaluatedpropertiesschema1) | |
290292
| [UnevaluatedpropertiesWithAdjacentAdditionalproperties.UnevaluatedpropertiesWithAdjacentAdditionalproperties1](docs/components/schemas/UnevaluatedpropertiesWithAdjacentAdditionalproperties.md#unevaluatedpropertieswithadjacentadditionalproperties1) | |
291293
| [UnevaluatedpropertiesWithNullValuedInstanceProperties.UnevaluatedpropertiesWithNullValuedInstanceProperties1](docs/components/schemas/UnevaluatedpropertiesWithNullValuedInstanceProperties.md#unevaluatedpropertieswithnullvaluedinstanceproperties1) | |
292294
| [UniqueitemsFalseValidation.UniqueitemsFalseValidation1](docs/components/schemas/UniqueitemsFalseValidation.md#uniqueitemsfalsevalidation1) | |
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
# UnevaluatedpropertiesNotAffectedByPropertynames
2+
org.openapijsonschematools.client.components.schemas.UnevaluatedpropertiesNotAffectedByPropertynames.java
3+
public class UnevaluatedpropertiesNotAffectedByPropertynames
4+
5+
A class that contains necessary nested
6+
- schema classes (which validate payloads), extends JsonSchema
7+
8+
## Nested Class Summary
9+
| Modifier and Type | Class and Description |
10+
| ----------------- | ---------------------- |
11+
| static class | [UnevaluatedpropertiesNotAffectedByPropertynames.UnevaluatedpropertiesNotAffectedByPropertynames1](#unevaluatedpropertiesnotaffectedbypropertynames1)<br> schema class |
12+
| static class | [UnevaluatedpropertiesNotAffectedByPropertynames.UnevaluatedProperties](#unevaluatedproperties)<br> schema class |
13+
| static class | [UnevaluatedpropertiesNotAffectedByPropertynames.PropertyNames](#propertynames)<br> schema class |
14+
15+
## UnevaluatedpropertiesNotAffectedByPropertynames1
16+
public static class UnevaluatedpropertiesNotAffectedByPropertynames1<br>
17+
extends JsonSchema
18+
19+
A schema class that validates payloads
20+
21+
### Field Summary
22+
| Modifier and Type | Field and Description |
23+
| ----------------- | ---------------------- |
24+
| Class<? extends JsonSchema> | propertyNames = [PropertyNames.class](#propertynames) |
25+
| Class<? extends JsonSchema> | unevaluatedProperties = [UnevaluatedProperties.class](#unevaluatedproperties) |
26+
27+
### Method Summary
28+
| Modifier and Type | Method and Description |
29+
| ----------------- | ---------------------- |
30+
| String | validate(String arg, SchemaConfiguration configuration) |
31+
| Void | validate(Void arg, SchemaConfiguration configuration) |
32+
| int | validate(int arg, SchemaConfiguration configuration) |
33+
| long | validate(long arg, SchemaConfiguration configuration) |
34+
| float | validate(float arg, SchemaConfiguration configuration) |
35+
| double | validate(double arg, SchemaConfiguration configuration) |
36+
| boolean | validate(boolean arg, SchemaConfiguration configuration) |
37+
| FrozenMap<String, @Nullable Object> | validate(Map&lt;?, ?&gt; arg, SchemaConfiguration configuration) |
38+
| FrozenList<@Nullable Object> | validate(List<?> arg, SchemaConfiguration configuration) |
39+
| @Nullable Object | validate(@Nullable Object arg, SchemaConfiguration configuration) |
40+
## UnevaluatedProperties
41+
public static class UnevaluatedProperties<br>
42+
extends NumberJsonSchema
43+
44+
A schema class that validates payloads
45+
46+
| Methods Inherited from class org.openapijsonschematools.client.schemas.NumberJsonSchema |
47+
| ------------------------------------------------------------------ |
48+
| validate |
49+
50+
## PropertyNames
51+
public static class PropertyNames<br>
52+
extends JsonSchema
53+
54+
A schema class that validates payloads
55+
56+
### Code Sample
57+
```
58+
import org.openapijsonschematools.client.configurations.JsonSchemaKeywordFlags;
59+
import org.openapijsonschematools.client.configurations.SchemaConfiguration;
60+
import org.openapijsonschematools.client.exceptions.ValidationException;
61+
import org.openapijsonschematools.client.schemas.validation.MapUtils;
62+
import org.openapijsonschematools.client.schemas.validation.FrozenList;
63+
import org.openapijsonschematools.client.schemas.validation.FrozenMap;
64+
65+
import java.util.Arrays;
66+
import java.util.List;
67+
import java.util.AbstractMap;
68+
69+
static final SchemaConfiguration configuration = new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone());
70+
71+
// String validation
72+
String validatedPayload = UnevaluatedpropertiesNotAffectedByPropertynames.PropertyNames.validate(
73+
"a",
74+
configuration
75+
);
76+
```
77+
78+
### Field Summary
79+
| Modifier and Type | Field and Description |
80+
| ----------------- | ---------------------- |
81+
| Set<Class<?>> | type = Set.of(<br/>&nbsp;&nbsp;&nbsp;&nbsp;String.class<br/>)<br/> |
82+
| Integer | maxLength = 1 |
83+
84+
### Method Summary
85+
| Modifier and Type | Method and Description |
86+
| ----------------- | ---------------------- |
87+
| String | validate(String arg, SchemaConfiguration configuration) |
88+
| @Nullable Object | validate(@Nullable Object arg, SchemaConfiguration configuration) |
89+
[[Back to top]](#top) [[Back to Component Schemas]](../../../README.md#Component-Schemas) [[Back to README]](../../../README.md)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
# UnevaluatedpropertiesSchema
2+
org.openapijsonschematools.client.components.schemas.UnevaluatedpropertiesSchema.java
3+
public class UnevaluatedpropertiesSchema
4+
5+
A class that contains necessary nested
6+
- schema classes (which validate payloads), extends JsonSchema
7+
8+
## Nested Class Summary
9+
| Modifier and Type | Class and Description |
10+
| ----------------- | ---------------------- |
11+
| static class | [UnevaluatedpropertiesSchema.UnevaluatedpropertiesSchema1](#unevaluatedpropertiesschema1)<br> schema class |
12+
| static class | [UnevaluatedpropertiesSchema.UnevaluatedProperties](#unevaluatedproperties)<br> schema class |
13+
14+
## UnevaluatedpropertiesSchema1
15+
public static class UnevaluatedpropertiesSchema1<br>
16+
extends JsonSchema
17+
18+
A schema class that validates payloads
19+
20+
### Field Summary
21+
| Modifier and Type | Field and Description |
22+
| ----------------- | ---------------------- |
23+
| Set<Class<?>> | type = Set.of(Map.class) |
24+
| Class<? extends JsonSchema> | unevaluatedProperties = [UnevaluatedProperties.class](#unevaluatedproperties) |
25+
26+
### Method Summary
27+
| Modifier and Type | Method and Description |
28+
| ----------------- | ---------------------- |
29+
| FrozenMap<String, @Nullable Object> | validate(Map&lt;?, ?&gt; arg, SchemaConfiguration configuration) |
30+
| @Nullable Object | validate(@Nullable Object arg, SchemaConfiguration configuration) |
31+
## UnevaluatedProperties
32+
public static class UnevaluatedProperties<br>
33+
extends JsonSchema
34+
35+
A schema class that validates payloads
36+
37+
### Code Sample
38+
```
39+
import org.openapijsonschematools.client.configurations.JsonSchemaKeywordFlags;
40+
import org.openapijsonschematools.client.configurations.SchemaConfiguration;
41+
import org.openapijsonschematools.client.exceptions.ValidationException;
42+
import org.openapijsonschematools.client.schemas.validation.MapUtils;
43+
import org.openapijsonschematools.client.schemas.validation.FrozenList;
44+
import org.openapijsonschematools.client.schemas.validation.FrozenMap;
45+
46+
import java.util.Arrays;
47+
import java.util.List;
48+
import java.util.AbstractMap;
49+
50+
static final SchemaConfiguration configuration = new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone());
51+
52+
// String validation
53+
String validatedPayload = UnevaluatedpropertiesSchema.UnevaluatedProperties.validate(
54+
"a",
55+
configuration
56+
);
57+
```
58+
59+
### Field Summary
60+
| Modifier and Type | Field and Description |
61+
| ----------------- | ---------------------- |
62+
| Set<Class<?>> | type = Set.of(<br/>&nbsp;&nbsp;&nbsp;&nbsp;String.class<br/>)<br/> |
63+
| Integer | minLength = 3 |
64+
65+
### Method Summary
66+
| Modifier and Type | Method and Description |
67+
| ----------------- | ---------------------- |
68+
| String | validate(String arg, SchemaConfiguration configuration) |
69+
| @Nullable Object | validate(@Nullable Object arg, SchemaConfiguration configuration) |
70+
[[Back to top]](#top) [[Back to Component Schemas]](../../../README.md#Component-Schemas) [[Back to README]](../../../README.md)

samples/client/3_1_0_unit_test/java/docs/components/schemas/UnevaluatedpropertiesWithAdjacentAdditionalproperties.md

+1
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ UnevaluatedpropertiesWithAdjacentAdditionalproperties.UnevaluatedpropertiesWithA
5555
| Set<Class<?>> | type = Set.of(Map.class) |
5656
| Map<String, Class<? extends JsonSchema>> | properties = Map.ofEntries(<br>&nbsp;&nbsp;&nbsp;&nbsp;new PropertyEntry("foo", [Foo.class](#foo)))<br>)<br> |
5757
| Class<? extends JsonSchema> | additionalProperties = [AdditionalProperties.class](#additionalproperties) |
58+
| Class<? extends JsonSchema> | unevaluatedProperties = [UnevaluatedProperties.class](#unevaluatedproperties) |
5859

5960
### Method Summary
6061
| Modifier and Type | Method and Description |

samples/client/3_1_0_unit_test/java/docs/components/schemas/UnevaluatedpropertiesWithNullValuedInstanceProperties.md

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ A schema class that validates payloads
2020
### Field Summary
2121
| Modifier and Type | Field and Description |
2222
| ----------------- | ---------------------- |
23+
| Class<? extends JsonSchema> | unevaluatedProperties = [UnevaluatedProperties.class](#unevaluatedproperties) |
2324

2425
### Method Summary
2526
| Modifier and Type | Method and Description |

0 commit comments

Comments
 (0)