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

Java, adds prefixItems #368

Merged
merged 8 commits into from
Jan 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/generators/java.md
Original file line number Diff line number Diff line change
Expand Up @@ -305,7 +305,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|OneOf|✓|OAS3
|Pattern|✓|OAS2,OAS3
|PatternProperties|✓|OAS3
|PrefixItems||OAS3
|PrefixItems||OAS3
|Properties|✓|OAS2,OAS3
|PropertyNames|✓|OAS3
|Ref|✓|OAS2,OAS3
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,7 @@ src/main/java/org/openapijsonschematools/client/schemas/validation/OneOfValidato
src/main/java/org/openapijsonschematools/client/schemas/validation/PathToSchemasMap.java
src/main/java/org/openapijsonschematools/client/schemas/validation/PatternPropertiesValidator.java
src/main/java/org/openapijsonschematools/client/schemas/validation/PatternValidator.java
src/main/java/org/openapijsonschematools/client/schemas/validation/PrefixItemsValidator.java
src/main/java/org/openapijsonschematools/client/schemas/validation/PropertiesValidator.java
src/main/java/org/openapijsonschematools/client/schemas/validation/PropertyEntry.java
src/main/java/org/openapijsonschematools/client/schemas/validation/PropertyNamesValidator.java
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,16 @@ public ItemsValidator(Class<? extends JsonSchema> items) {
@Nullable List<PathToSchemasMap> containsPathToSchemas,
@Nullable PathToSchemasMap patternPropertiesPathToSchemas
) {
if (!(arg instanceof List)) {
if (!(arg instanceof List<?> listArg)) {
return null;
}
if (listArg.isEmpty()) {
return null;
}
PathToSchemasMap pathToSchemas = new PathToSchemasMap();
// todo add handling for prefixItems
int i = 0;
for(Object itemValue: (List<?>) arg) {
int minIndex = schema.prefixItems != null ? schema.prefixItems.size() : 0;
JsonSchema itemsSchema = JsonSchemaFactory.getInstance(items);
for(int i = minIndex; i < listArg.size(); i++) {
List<Object> itemPathToItem = new ArrayList<>(validationMetadata.pathToItem());
itemPathToItem.add(i);
ValidationMetadata itemValidationMetadata = new ValidationMetadata(
Expand All @@ -35,15 +38,12 @@ public ItemsValidator(Class<? extends JsonSchema> items) {
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);
PathToSchemasMap otherPathToSchemas = JsonSchema.validate(itemsSchema, listArg.get(i), itemValidationMetadata);
pathToSchemas.update(otherPathToSchemas);
i += 1;
}
return pathToSchemas;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ public abstract class JsonSchema {
public @Nullable Map<String, Set<String>> dependentRequired;
public final @Nullable Map<String, Class<? extends JsonSchema>> dependentSchemas;
public @Nullable Map<Pattern, Class<? extends JsonSchema>> patternProperties;
public @Nullable List<Class<? extends JsonSchema>> prefixItems;
private final LinkedHashMap<String, KeywordValidator> keywordToValidator;

protected JsonSchema(JsonSchemaInfo jsonSchemaInfo) {
Expand Down Expand Up @@ -284,6 +285,13 @@ protected JsonSchema(JsonSchemaInfo jsonSchemaInfo) {
new PatternPropertiesValidator(this.patternProperties)
);
}
this.prefixItems = jsonSchemaInfo.prefixItems;
if (this.prefixItems != null) {
keywordToValidator.put(
"prefixItems",
new PrefixItemsValidator(this.prefixItems)
);
}
this.keywordToValidator = keywordToValidator;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -177,4 +177,9 @@ public JsonSchemaInfo patternProperties(Map<Pattern, Class<? extends JsonSchema>
this.patternProperties = patternProperties;
return this;
}
public @Nullable List<Class<? extends JsonSchema>> prefixItems = null;
public JsonSchemaInfo prefixItems(List<Class<? extends JsonSchema>> prefixItems) {
this.prefixItems = prefixItems;
return this;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package org.openapijsonschematools.client.schemas.validation;

import org.checkerframework.checker.nullness.qual.Nullable;

import java.util.ArrayList;
import java.util.List;

public class PrefixItemsValidator implements KeywordValidator {
public final List<Class<? extends JsonSchema>> prefixItems;

public PrefixItemsValidator(List<Class<? extends JsonSchema>> prefixItems) {
this.prefixItems = prefixItems;
}

@Override
public @Nullable PathToSchemasMap validate(
JsonSchema schema,
@Nullable Object arg,
ValidationMetadata validationMetadata,
@Nullable List<PathToSchemasMap> containsPathToSchemas,
@Nullable PathToSchemasMap patternPropertiesPathToSchemas
) {
if (!(arg instanceof List<?> listArg)) {
return null;
}
if (listArg.isEmpty()) {
return null;
}
PathToSchemasMap pathToSchemas = new PathToSchemasMap();
int maxIndex = Math.min(listArg.size(), prefixItems.size());
for (int i=0; i < maxIndex; i++) {
List<Object> itemPathToItem = new ArrayList<>(validationMetadata.pathToItem());
itemPathToItem.add(i);
ValidationMetadata itemValidationMetadata = new ValidationMetadata(
itemPathToItem,
validationMetadata.configuration(),
validationMetadata.validatedPathToSchemas(),
validationMetadata.seenClasses()
);
JsonSchema itemsSchema = JsonSchemaFactory.getInstance(prefixItems.get(i));
PathToSchemasMap otherPathToSchemas = JsonSchema.validate(itemsSchema, listArg.get(i), itemValidationMetadata);
pathToSchemas.update(otherPathToSchemas);
}
return pathToSchemas;
}
}
15 changes: 15 additions & 0 deletions samples/client/3_1_0_unit_test/java/.openapi-generator/FILES
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
README.md
docs/components/schemas/ASchemaGivenForPrefixitems.md
docs/components/schemas/AdditionalItemsAreAllowedByDefault.md
docs/components/schemas/AdditionalpropertiesAreAllowedByDefault.md
docs/components/schemas/AdditionalpropertiesCanExistByItself.md
docs/components/schemas/AdditionalpropertiesDoesNotLookInApplicators.md
Expand Down Expand Up @@ -51,6 +53,7 @@ docs/components/schemas/Ipv6Format.md
docs/components/schemas/IriFormat.md
docs/components/schemas/IriReferenceFormat.md
docs/components/schemas/ItemsContains.md
docs/components/schemas/ItemsDoesNotLookInApplicatorsValidCase.md
docs/components/schemas/ItemsWithNullInstanceElements.md
docs/components/schemas/JsonPointerFormat.md
docs/components/schemas/MaxcontainsWithoutContainsIsIgnored.md
Expand Down Expand Up @@ -90,6 +93,8 @@ docs/components/schemas/PatternIsNotAnchored.md
docs/components/schemas/PatternValidation.md
docs/components/schemas/PatternpropertiesValidatesPropertiesMatchingARegex.md
docs/components/schemas/PatternpropertiesWithNullValuedInstanceProperties.md
docs/components/schemas/PrefixitemsValidationAdjustsTheStartingIndexForItems.md
docs/components/schemas/PrefixitemsWithNullInstanceElements.md
docs/components/schemas/PropertiesPatternpropertiesAdditionalpropertiesInteraction.md
docs/components/schemas/PropertiesWhoseNamesAreJavascriptObjectPropertyNames.md
docs/components/schemas/PropertiesWithEscapedCharacters.md
Expand All @@ -116,13 +121,17 @@ docs/components/schemas/UnevaluateditemsWithItems.md
docs/components/schemas/UnevaluatedpropertiesWithAdjacentAdditionalproperties.md
docs/components/schemas/UnevaluatedpropertiesWithNullValuedInstanceProperties.md
docs/components/schemas/UniqueitemsFalseValidation.md
docs/components/schemas/UniqueitemsFalseWithAnArrayOfItems.md
docs/components/schemas/UniqueitemsValidation.md
docs/components/schemas/UniqueitemsWithAnArrayOfItems.md
docs/components/schemas/UriFormat.md
docs/components/schemas/UriReferenceFormat.md
docs/components/schemas/UriTemplateFormat.md
docs/components/schemas/UuidFormat.md
docs/servers/Server0.md
pom.xml
src/main/java/org/openapijsonschematools/client/components/schemas/ASchemaGivenForPrefixitems.java
src/main/java/org/openapijsonschematools/client/components/schemas/AdditionalItemsAreAllowedByDefault.java
src/main/java/org/openapijsonschematools/client/components/schemas/AdditionalpropertiesAreAllowedByDefault.java
src/main/java/org/openapijsonschematools/client/components/schemas/AdditionalpropertiesCanExistByItself.java
src/main/java/org/openapijsonschematools/client/components/schemas/AdditionalpropertiesDoesNotLookInApplicators.java
Expand Down Expand Up @@ -175,6 +184,7 @@ src/main/java/org/openapijsonschematools/client/components/schemas/Ipv6Format.ja
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/ItemsDoesNotLookInApplicatorsValidCase.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
Expand Down Expand Up @@ -214,6 +224,8 @@ src/main/java/org/openapijsonschematools/client/components/schemas/PatternIsNotA
src/main/java/org/openapijsonschematools/client/components/schemas/PatternValidation.java
src/main/java/org/openapijsonschematools/client/components/schemas/PatternpropertiesValidatesPropertiesMatchingARegex.java
src/main/java/org/openapijsonschematools/client/components/schemas/PatternpropertiesWithNullValuedInstanceProperties.java
src/main/java/org/openapijsonschematools/client/components/schemas/PrefixitemsValidationAdjustsTheStartingIndexForItems.java
src/main/java/org/openapijsonschematools/client/components/schemas/PrefixitemsWithNullInstanceElements.java
src/main/java/org/openapijsonschematools/client/components/schemas/PropertiesPatternpropertiesAdditionalpropertiesInteraction.java
src/main/java/org/openapijsonschematools/client/components/schemas/PropertiesWhoseNamesAreJavascriptObjectPropertyNames.java
src/main/java/org/openapijsonschematools/client/components/schemas/PropertiesWithEscapedCharacters.java
Expand All @@ -240,7 +252,9 @@ src/main/java/org/openapijsonschematools/client/components/schemas/Unevaluatedit
src/main/java/org/openapijsonschematools/client/components/schemas/UnevaluatedpropertiesWithAdjacentAdditionalproperties.java
src/main/java/org/openapijsonschematools/client/components/schemas/UnevaluatedpropertiesWithNullValuedInstanceProperties.java
src/main/java/org/openapijsonschematools/client/components/schemas/UniqueitemsFalseValidation.java
src/main/java/org/openapijsonschematools/client/components/schemas/UniqueitemsFalseWithAnArrayOfItems.java
src/main/java/org/openapijsonschematools/client/components/schemas/UniqueitemsValidation.java
src/main/java/org/openapijsonschematools/client/components/schemas/UniqueitemsWithAnArrayOfItems.java
src/main/java/org/openapijsonschematools/client/components/schemas/UriFormat.java
src/main/java/org/openapijsonschematools/client/components/schemas/UriReferenceFormat.java
src/main/java/org/openapijsonschematools/client/components/schemas/UriTemplateFormat.java
Expand Down Expand Up @@ -329,6 +343,7 @@ src/main/java/org/openapijsonschematools/client/schemas/validation/OneOfValidato
src/main/java/org/openapijsonschematools/client/schemas/validation/PathToSchemasMap.java
src/main/java/org/openapijsonschematools/client/schemas/validation/PatternPropertiesValidator.java
src/main/java/org/openapijsonschematools/client/schemas/validation/PatternValidator.java
src/main/java/org/openapijsonschematools/client/schemas/validation/PrefixItemsValidator.java
src/main/java/org/openapijsonschematools/client/schemas/validation/PropertiesValidator.java
src/main/java/org/openapijsonschematools/client/schemas/validation/PropertyEntry.java
src/main/java/org/openapijsonschematools/client/schemas/validation/PropertyNamesValidator.java
Expand Down
7 changes: 7 additions & 0 deletions samples/client/3_1_0_unit_test/java/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,8 @@ allowed input and output types.

| Class | Description |
| ----- | ----------- |
| [ASchemaGivenForPrefixitems.ASchemaGivenForPrefixitems1](docs/components/schemas/ASchemaGivenForPrefixitems.md#aschemagivenforprefixitems1) | |
| [AdditionalItemsAreAllowedByDefault.AdditionalItemsAreAllowedByDefault1](docs/components/schemas/AdditionalItemsAreAllowedByDefault.md#additionalitemsareallowedbydefault1) | |
| [AdditionalpropertiesAreAllowedByDefault.AdditionalpropertiesAreAllowedByDefault1](docs/components/schemas/AdditionalpropertiesAreAllowedByDefault.md#additionalpropertiesareallowedbydefault1) | |
| [AdditionalpropertiesCanExistByItself.AdditionalpropertiesCanExistByItself1](docs/components/schemas/AdditionalpropertiesCanExistByItself.md#additionalpropertiescanexistbyitself1) | |
| [AdditionalpropertiesDoesNotLookInApplicators.AdditionalpropertiesDoesNotLookInApplicators1](docs/components/schemas/AdditionalpropertiesDoesNotLookInApplicators.md#additionalpropertiesdoesnotlookinapplicators1) | |
Expand Down Expand Up @@ -209,6 +211,7 @@ allowed input and output types.
| [IriFormat.IriFormat1](docs/components/schemas/IriFormat.md#iriformat1) | |
| [IriReferenceFormat.IriReferenceFormat1](docs/components/schemas/IriReferenceFormat.md#irireferenceformat1) | |
| [ItemsContains.ItemsContains1](docs/components/schemas/ItemsContains.md#itemscontains1) | |
| [ItemsDoesNotLookInApplicatorsValidCase.ItemsDoesNotLookInApplicatorsValidCase1](docs/components/schemas/ItemsDoesNotLookInApplicatorsValidCase.md#itemsdoesnotlookinapplicatorsvalidcase1) | |
| [ItemsWithNullInstanceElements.ItemsWithNullInstanceElements1](docs/components/schemas/ItemsWithNullInstanceElements.md#itemswithnullinstanceelements1) | |
| [JsonPointerFormat.JsonPointerFormat1](docs/components/schemas/JsonPointerFormat.md#jsonpointerformat1) | |
| [MaxcontainsWithoutContainsIsIgnored.MaxcontainsWithoutContainsIsIgnored1](docs/components/schemas/MaxcontainsWithoutContainsIsIgnored.md#maxcontainswithoutcontainsisignored1) | |
Expand Down Expand Up @@ -248,6 +251,8 @@ allowed input and output types.
| [PatternValidation.PatternValidation1](docs/components/schemas/PatternValidation.md#patternvalidation1) | |
| [PatternpropertiesValidatesPropertiesMatchingARegex.PatternpropertiesValidatesPropertiesMatchingARegex1](docs/components/schemas/PatternpropertiesValidatesPropertiesMatchingARegex.md#patternpropertiesvalidatespropertiesmatchingaregex1) | |
| [PatternpropertiesWithNullValuedInstanceProperties.PatternpropertiesWithNullValuedInstanceProperties1](docs/components/schemas/PatternpropertiesWithNullValuedInstanceProperties.md#patternpropertieswithnullvaluedinstanceproperties1) | |
| [PrefixitemsValidationAdjustsTheStartingIndexForItems.PrefixitemsValidationAdjustsTheStartingIndexForItems1](docs/components/schemas/PrefixitemsValidationAdjustsTheStartingIndexForItems.md#prefixitemsvalidationadjuststhestartingindexforitems1) | |
| [PrefixitemsWithNullInstanceElements.PrefixitemsWithNullInstanceElements1](docs/components/schemas/PrefixitemsWithNullInstanceElements.md#prefixitemswithnullinstanceelements1) | |
| [PropertiesPatternpropertiesAdditionalpropertiesInteraction.PropertiesPatternpropertiesAdditionalpropertiesInteraction1](docs/components/schemas/PropertiesPatternpropertiesAdditionalpropertiesInteraction.md#propertiespatternpropertiesadditionalpropertiesinteraction1) | |
| [PropertiesWhoseNamesAreJavascriptObjectPropertyNames.PropertiesWhoseNamesAreJavascriptObjectPropertyNames1](docs/components/schemas/PropertiesWhoseNamesAreJavascriptObjectPropertyNames.md#propertieswhosenamesarejavascriptobjectpropertynames1) | |
| [PropertiesWithEscapedCharacters.PropertiesWithEscapedCharacters1](docs/components/schemas/PropertiesWithEscapedCharacters.md#propertieswithescapedcharacters1) | |
Expand All @@ -274,7 +279,9 @@ allowed input and output types.
| [UnevaluatedpropertiesWithAdjacentAdditionalproperties.UnevaluatedpropertiesWithAdjacentAdditionalproperties1](docs/components/schemas/UnevaluatedpropertiesWithAdjacentAdditionalproperties.md#unevaluatedpropertieswithadjacentadditionalproperties1) | |
| [UnevaluatedpropertiesWithNullValuedInstanceProperties.UnevaluatedpropertiesWithNullValuedInstanceProperties1](docs/components/schemas/UnevaluatedpropertiesWithNullValuedInstanceProperties.md#unevaluatedpropertieswithnullvaluedinstanceproperties1) | |
| [UniqueitemsFalseValidation.UniqueitemsFalseValidation1](docs/components/schemas/UniqueitemsFalseValidation.md#uniqueitemsfalsevalidation1) | |
| [UniqueitemsFalseWithAnArrayOfItems.UniqueitemsFalseWithAnArrayOfItems1](docs/components/schemas/UniqueitemsFalseWithAnArrayOfItems.md#uniqueitemsfalsewithanarrayofitems1) | |
| [UniqueitemsValidation.UniqueitemsValidation1](docs/components/schemas/UniqueitemsValidation.md#uniqueitemsvalidation1) | |
| [UniqueitemsWithAnArrayOfItems.UniqueitemsWithAnArrayOfItems1](docs/components/schemas/UniqueitemsWithAnArrayOfItems.md#uniqueitemswithanarrayofitems1) | |
| [UriFormat.UriFormat1](docs/components/schemas/UriFormat.md#uriformat1) | |
| [UriReferenceFormat.UriReferenceFormat1](docs/components/schemas/UriReferenceFormat.md#urireferenceformat1) | |
| [UriTemplateFormat.UriTemplateFormat1](docs/components/schemas/UriTemplateFormat.md#uritemplateformat1) | |
Expand Down
Loading