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

Commit b1901fc

Browse files
authored
Java adds propertyNames (#362)
* ENables propertynames test in java 310 client * 310 java regen * Generates schema and test in java client * Turns on PropertyNames feature for java generator * Samples regen * Updates java data type features to include number
1 parent 48c6e68 commit b1901fc

File tree

28 files changed

+776
-11
lines changed

28 files changed

+776
-11
lines changed

docs/generators/java.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
197197
|Integer|✓|OAS2,OAS3
198198
|Float|✓|OAS2,OAS3
199199
|Double|✓|OAS2,OAS3
200-
|Number||OAS2,OAS3
200+
|Number||OAS2,OAS3
201201
|String|✓|OAS2,OAS3
202202
|Byte|✗|OAS2,OAS3
203203
|Binary|✗|OAS2,OAS3
@@ -307,7 +307,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
307307
|PatternProperties|✗|OAS3
308308
|PrefixItems|✗|OAS3
309309
|Properties|✓|OAS2,OAS3
310-
|PropertyNames||OAS3
310+
|PropertyNames||OAS3
311311
|Ref|✓|OAS2,OAS3
312312
|Required|✓|OAS2,OAS3
313313
|Then|✗|OAS3

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,7 @@ src/main/java/org/openapijsonschematools/client/schemas/validation/PathToSchemas
258258
src/main/java/org/openapijsonschematools/client/schemas/validation/PatternValidator.java
259259
src/main/java/org/openapijsonschematools/client/schemas/validation/PropertiesValidator.java
260260
src/main/java/org/openapijsonschematools/client/schemas/validation/PropertyEntry.java
261+
src/main/java/org/openapijsonschematools/client/schemas/validation/PropertyNamesValidator.java
261262
src/main/java/org/openapijsonschematools/client/schemas/validation/RequiredValidator.java
262263
src/main/java/org/openapijsonschematools/client/schemas/validation/StringEnumValidator.java
263264
src/main/java/org/openapijsonschematools/client/schemas/validation/StringSchemaValidator.java

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ public abstract class JsonSchema {
4949
public final @Nullable Class<? extends JsonSchema> contains;
5050
public final @Nullable Integer maxContains;
5151
public final @Nullable Integer minContains;
52+
public final @Nullable Class<? extends JsonSchema> propertyNames;
5253
private final LinkedHashMap<String, KeywordValidator> keywordToValidator;
5354

5455
protected JsonSchema(JsonSchemaInfo jsonSchemaInfo) {
@@ -252,6 +253,13 @@ protected JsonSchema(JsonSchemaInfo jsonSchemaInfo) {
252253
new MinContainsValidator(this.minContains)
253254
);
254255
}
256+
this.propertyNames = jsonSchemaInfo.propertyNames;
257+
if (this.propertyNames != null) {
258+
keywordToValidator.put(
259+
"propertyNames",
260+
new PropertyNamesValidator(this.propertyNames)
261+
);
262+
}
255263
this.keywordToValidator = keywordToValidator;
256264
}
257265

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
@@ -157,4 +157,9 @@ public JsonSchemaInfo minContains(Integer minContains) {
157157
this.minContains = minContains;
158158
return this;
159159
}
160+
public @Nullable Class<? extends JsonSchema> propertyNames = null;
161+
public JsonSchemaInfo propertyNames(Class<? extends JsonSchema> propertyNames) {
162+
this.propertyNames = propertyNames;
163+
return this;
164+
}
160165
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package org.openapijsonschematools.client.schemas.validation;
2+
3+
import org.checkerframework.checker.nullness.qual.Nullable;
4+
5+
import java.util.ArrayList;
6+
import java.util.List;
7+
import java.util.Map;
8+
9+
public class PropertyNamesValidator implements KeywordValidator {
10+
public final Class<? extends JsonSchema> propertyNames;
11+
12+
public PropertyNamesValidator(Class<? extends JsonSchema> propertyNames) {
13+
this.propertyNames = propertyNames;
14+
}
15+
16+
@Override
17+
public @Nullable PathToSchemasMap validate(
18+
JsonSchema schema,
19+
@Nullable Object arg,
20+
ValidationMetadata validationMetadata,
21+
@Nullable List<PathToSchemasMap> containsPathToSchemas
22+
) {
23+
if (!(arg instanceof Map)) {
24+
return null;
25+
}
26+
JsonSchema propertyNamesSchema = JsonSchemaFactory.getInstance(propertyNames);
27+
for (Object objKey: ((Map<?, ?>) arg).keySet()) {
28+
if (objKey instanceof String key) {
29+
List<Object> propPathToItem = new ArrayList<>(validationMetadata.pathToItem());
30+
propPathToItem.add(key);
31+
ValidationMetadata keyValidationMetadata = new ValidationMetadata(
32+
propPathToItem,
33+
validationMetadata.configuration(),
34+
validationMetadata.validatedPathToSchemas(),
35+
validationMetadata.seenClasses()
36+
);
37+
JsonSchema.validate(propertyNamesSchema, key, keyValidationMetadata);
38+
}
39+
}
40+
return null;
41+
}
42+
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ docs/components/schemas/PropertiesWhoseNamesAreJavascriptObjectPropertyNames.md
8888
docs/components/schemas/PropertiesWithEscapedCharacters.md
8989
docs/components/schemas/PropertiesWithNullValuedInstanceProperties.md
9090
docs/components/schemas/PropertyNamedRefThatIsNotAReference.md
91+
docs/components/schemas/PropertynamesValidation.md
9192
docs/components/schemas/RegexFormat.md
9293
docs/components/schemas/RelativeJsonPointerFormat.md
9394
docs/components/schemas/RequiredDefaultValidation.md
@@ -202,6 +203,7 @@ src/main/java/org/openapijsonschematools/client/components/schemas/PropertiesWho
202203
src/main/java/org/openapijsonschematools/client/components/schemas/PropertiesWithEscapedCharacters.java
203204
src/main/java/org/openapijsonschematools/client/components/schemas/PropertiesWithNullValuedInstanceProperties.java
204205
src/main/java/org/openapijsonschematools/client/components/schemas/PropertyNamedRefThatIsNotAReference.java
206+
src/main/java/org/openapijsonschematools/client/components/schemas/PropertynamesValidation.java
205207
src/main/java/org/openapijsonschematools/client/components/schemas/RegexFormat.java
206208
src/main/java/org/openapijsonschematools/client/components/schemas/RelativeJsonPointerFormat.java
207209
src/main/java/org/openapijsonschematools/client/components/schemas/RequiredDefaultValidation.java
@@ -308,6 +310,7 @@ src/main/java/org/openapijsonschematools/client/schemas/validation/PathToSchemas
308310
src/main/java/org/openapijsonschematools/client/schemas/validation/PatternValidator.java
309311
src/main/java/org/openapijsonschematools/client/schemas/validation/PropertiesValidator.java
310312
src/main/java/org/openapijsonschematools/client/schemas/validation/PropertyEntry.java
313+
src/main/java/org/openapijsonschematools/client/schemas/validation/PropertyNamesValidator.java
311314
src/main/java/org/openapijsonschematools/client/schemas/validation/RequiredValidator.java
312315
src/main/java/org/openapijsonschematools/client/schemas/validation/StringEnumValidator.java
313316
src/main/java/org/openapijsonschematools/client/schemas/validation/StringSchemaValidator.java

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,7 @@ allowed input and output types.
246246
| [PropertiesWithEscapedCharacters.PropertiesWithEscapedCharacters1](docs/components/schemas/PropertiesWithEscapedCharacters.md#propertieswithescapedcharacters1) | |
247247
| [PropertiesWithNullValuedInstanceProperties.PropertiesWithNullValuedInstanceProperties1](docs/components/schemas/PropertiesWithNullValuedInstanceProperties.md#propertieswithnullvaluedinstanceproperties1) | |
248248
| [PropertyNamedRefThatIsNotAReference.PropertyNamedRefThatIsNotAReference1](docs/components/schemas/PropertyNamedRefThatIsNotAReference.md#propertynamedrefthatisnotareference1) | |
249+
| [PropertynamesValidation.PropertynamesValidation1](docs/components/schemas/PropertynamesValidation.md#propertynamesvalidation1) | |
249250
| [RegexFormat.RegexFormat1](docs/components/schemas/RegexFormat.md#regexformat1) | |
250251
| [RelativeJsonPointerFormat.RelativeJsonPointerFormat1](docs/components/schemas/RelativeJsonPointerFormat.md#relativejsonpointerformat1) | |
251252
| [RequiredDefaultValidation.RequiredDefaultValidation1](docs/components/schemas/RequiredDefaultValidation.md#requireddefaultvalidation1) | |
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
# PropertynamesValidation
2+
org.openapijsonschematools.client.components.schemas.PropertynamesValidation.java
3+
public class PropertynamesValidation
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 | [PropertynamesValidation.PropertynamesValidation1](#propertynamesvalidation1)<br> schema class |
12+
| static class | [PropertynamesValidation.PropertyNames](#propertynames)<br> schema class |
13+
14+
## PropertynamesValidation1
15+
public static class PropertynamesValidation1<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+
| Class<? extends JsonSchema> | propertyNames = [PropertyNames.class](#propertynames) |
24+
25+
### Method Summary
26+
| Modifier and Type | Method and Description |
27+
| ----------------- | ---------------------- |
28+
| String | validate(String arg, SchemaConfiguration configuration) |
29+
| Void | validate(Void arg, SchemaConfiguration configuration) |
30+
| int | validate(int arg, SchemaConfiguration configuration) |
31+
| long | validate(long arg, SchemaConfiguration configuration) |
32+
| float | validate(float arg, SchemaConfiguration configuration) |
33+
| double | validate(double arg, SchemaConfiguration configuration) |
34+
| boolean | validate(boolean arg, SchemaConfiguration configuration) |
35+
| FrozenMap<String, @Nullable Object> | validate(Map&lt;?, ?&gt; arg, SchemaConfiguration configuration) |
36+
| FrozenList<@Nullable Object> | validate(List<?> arg, SchemaConfiguration configuration) |
37+
| @Nullable Object | validate(@Nullable Object arg, SchemaConfiguration configuration) |
38+
## PropertyNames
39+
public static class PropertyNames<br>
40+
extends JsonSchema
41+
42+
A schema class that validates payloads
43+
44+
### Code Sample
45+
```
46+
import org.openapijsonschematools.client.configurations.JsonSchemaKeywordFlags;
47+
import org.openapijsonschematools.client.configurations.SchemaConfiguration;
48+
import org.openapijsonschematools.client.exceptions.ValidationException;
49+
import org.openapijsonschematools.client.schemas.validation.MapUtils;
50+
import org.openapijsonschematools.client.schemas.validation.FrozenList;
51+
import org.openapijsonschematools.client.schemas.validation.FrozenMap;
52+
53+
import java.util.Arrays;
54+
import java.util.List;
55+
import java.util.AbstractMap;
56+
57+
static final SchemaConfiguration configuration = new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone());
58+
59+
// String validation
60+
String validatedPayload = PropertynamesValidation.PropertyNames.validate(
61+
"a",
62+
configuration
63+
);
64+
```
65+
66+
### Field Summary
67+
| Modifier and Type | Field and Description |
68+
| ----------------- | ---------------------- |
69+
| Set<Class<?>> | type = Set.of(<br/>&nbsp;&nbsp;&nbsp;&nbsp;String.class<br/>)<br/> |
70+
| Integer | maxLength = 3 |
71+
72+
### Method Summary
73+
| Modifier and Type | Method and Description |
74+
| ----------------- | ---------------------- |
75+
| String | validate(String arg, SchemaConfiguration configuration) |
76+
| @Nullable Object | validate(@Nullable Object arg, SchemaConfiguration configuration) |
77+
[[Back to top]](#top) [[Back to Component Schemas]](../../../README.md#Component-Schemas) [[Back to README]](../../../README.md)

0 commit comments

Comments
 (0)