Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 

unit-test-api

sample spec for testing openapi functionality, built from json schema tests for draft2020-12

This Java package is automatically generated by the OpenAPI JSON Schema Generator project:

  • OpenAPI document version: 0.0.1
  • Java Package version: 0.0.1
  • OpenAPI JSON Schema Generator, Generator: JavaClientGenerator

Requirements

  1. Java 17
  2. Maven

Installation

To install the API client library to your local Maven repository, simply execute:

mvn clean install

To deploy it to a remote Maven repository instead, configure the settings of the repository and execute:

mvn clean deploy

Refer to the OSSRH Guide for more information.

Maven users

Add this dependency to your project's POM:

<dependency>
  <groupId>org.openapijsonschematools</groupId>
  <artifactId>unit-test-api</artifactId>
  <version>0.0.1</version>
  <scope>compile</scope>
</dependency>

Usage Notes

Validation, Immutability, and Data Type

This Java code validates data to schema classes and return back an immutable instance containing the data. This ensure that

  • valid data cannot be mutated and become invalid to a set of schemas
    • the one exception is that files are not immutable, so schema instances storing/sending/receiving files are not immutable

Here is the mapping from json schema types to Java types:

Json Schema Type Java Base Class
object FrozenMap (Map)
array FrozenList (List)
string String
number Number (int, long, float, double)
integer int, long, float, double (with values equal to integers)
boolean boolean
null Void (null)
AnyType (unset) @Nullable Object

Storage of Json Schema Definition in Java JsonSchema Classes

In openapi v3.0.3 there are ~ 28 json schema keywords. Almost all of them can apply if type is unset. I have chosen to separate the storage of

  • json schema definition info
  • output classes for validated Map (json schema type object) payloads
  • output classes for validated List (json schema type array) payloads
Reason

This json schema data is stored in each class that is written for a schema, in a component or other openapi document location. This class is only responsible for storing schema info. Output classes like those that store map payloads are written separately and are returned by the JsonSchema.validate method when that method is passed in Map input. This prevents payload property access methods from colliding with json schema definition.

Json Schema Type Object

Most component schemas (models) are probably of type object. Which is a map data structure. Json schema allows string keys in this map, which means schema properties can have key names that are invalid Java variable names. Names like:

  • "hi-there"
  • "1variable"
  • "@now"
  • " "
  • "from"

To allow these use cases to work, FrozenMap (which extends AbstractMap) is used as the base class of type object schemas. This means that one can use normal Map methods on instances of these classes.

Other Details
  • getters are written for validly named required and optional properties
  • null is only allowed in as a value if type: "null" was included or nullable: true was set
    • because null is an allowed property value, it is not used to represent an unset property state
  • if an optional property is requested and it does not exist in the Map, an UnsetPropertyException is thrown

Json Schema Type + Format, Validated Data Storage

N schemas can be validated on the same payload. To allow multiple schemas to validate, the data must be stored using one base class whether or not a json schema format constraint exists in the schema.

In json schema, type: number with no format validates both integers and floats, so int and float values are stored for type number.

String + Date Example

For example the string payload '2023-12-20' is validates to both of these schemas:

  1. string only
- type: string
  1. string and date format
- type: string
  format: date

Because of use cases like this, a LocalDate is allowed as an input to this schema, but the data is stored as a string.

Getting Started

Please follow the installation procedure and then use the JsonSchema classes in org.openapijsonschematools.client.components.schemas to validate input payloads and instances of validated Map and List output classes. Json schemas allow multiple types for one schema, so a schema's validate method can have allowed input and output types.

Servers

server_index Class Description
0 RootServer0

Endpoints

All URIs are relative to the selected server

  • The server is selected by passing in serverInfo + serverIndexInfo into configurations.ApiConfiguration
  • The security info is selected by passing in securityInfo + securityIndexInfo into configurations.ApiConfiguration
  • serverIndex + securityIndex can also be passed in to endpoint calls, see endpoint documentation
HTTP request Methods Description

Component Schemas

Class Description
ASchemaGivenForPrefixitems.ASchemaGivenForPrefixitems1
AdditionalItemsAreAllowedByDefault.AdditionalItemsAreAllowedByDefault1
AdditionalpropertiesAreAllowedByDefault.AdditionalpropertiesAreAllowedByDefault1
AdditionalpropertiesCanExistByItself.AdditionalpropertiesCanExistByItself1
AdditionalpropertiesDoesNotLookInApplicators.AdditionalpropertiesDoesNotLookInApplicators1
AdditionalpropertiesWithNullValuedInstanceProperties.AdditionalpropertiesWithNullValuedInstanceProperties1
AdditionalpropertiesWithSchema.AdditionalpropertiesWithSchema1
Allof.Allof1
AllofCombinedWithAnyofOneof.AllofCombinedWithAnyofOneof1
AllofSimpleTypes.AllofSimpleTypes1
AllofWithBaseSchema.AllofWithBaseSchema1
AllofWithOneEmptySchema.AllofWithOneEmptySchema1
AllofWithTheFirstEmptySchema.AllofWithTheFirstEmptySchema1
AllofWithTheLastEmptySchema.AllofWithTheLastEmptySchema1
AllofWithTwoEmptySchemas.AllofWithTwoEmptySchemas1
Anyof.Anyof1
AnyofComplexTypes.AnyofComplexTypes1
AnyofWithBaseSchema.AnyofWithBaseSchema1
AnyofWithOneEmptySchema.AnyofWithOneEmptySchema1
ArrayTypeMatchesArrays.ArrayTypeMatchesArrays1
BooleanTypeMatchesBooleans.BooleanTypeMatchesBooleans1
ByInt.ByInt1
ByNumber.ByNumber1
BySmallNumber.BySmallNumber1
ConstNulCharactersInStrings.ConstNulCharactersInStrings1
ContainsKeywordValidation.ContainsKeywordValidation1
ContainsWithNullInstanceElements.ContainsWithNullInstanceElements1
DateFormat.DateFormat1
DateTimeFormat.DateTimeFormat1
DependentSchemasDependenciesWithEscapedCharacters.DependentSchemasDependenciesWithEscapedCharacters1
DependentSchemasDependentSubschemaIncompatibleWithRoot.DependentSchemasDependentSubschemaIncompatibleWithRoot1
DependentSchemasSingleDependency.DependentSchemasSingleDependency1
DurationFormat.DurationFormat1
EmailFormat.EmailFormat1
EmptyDependents.EmptyDependents1
EnumWith0DoesNotMatchFalse.EnumWith0DoesNotMatchFalse1
EnumWith1DoesNotMatchTrue.EnumWith1DoesNotMatchTrue1
EnumWithEscapedCharacters.EnumWithEscapedCharacters1
EnumWithFalseDoesNotMatch0.EnumWithFalseDoesNotMatch01
EnumWithTrueDoesNotMatch1.EnumWithTrueDoesNotMatch11
EnumsInProperties.EnumsInProperties1
ExclusivemaximumValidation.ExclusivemaximumValidation1
ExclusiveminimumValidation.ExclusiveminimumValidation1
FloatDivisionInf.FloatDivisionInf1
ForbiddenProperty.ForbiddenProperty1
HostnameFormat.HostnameFormat1
IdnEmailFormat.IdnEmailFormat1
IdnHostnameFormat.IdnHostnameFormat1
IfAndElseWithoutThen.IfAndElseWithoutThen1
IfAndThenWithoutElse.IfAndThenWithoutElse1
IfAppearsAtTheEndWhenSerializedKeywordProcessingSequence.IfAppearsAtTheEndWhenSerializedKeywordProcessingSequence1
IgnoreElseWithoutIf.IgnoreElseWithoutIf1
IgnoreIfWithoutThenOrElse.IgnoreIfWithoutThenOrElse1
IgnoreThenWithoutIf.IgnoreThenWithoutIf1
IntegerTypeMatchesIntegers.IntegerTypeMatchesIntegers1
Ipv4Format.Ipv4Format1
Ipv6Format.Ipv6Format1
IriFormat.IriFormat1
IriReferenceFormat.IriReferenceFormat1
ItemsContains.ItemsContains1
ItemsDoesNotLookInApplicatorsValidCase.ItemsDoesNotLookInApplicatorsValidCase1
ItemsWithNullInstanceElements.ItemsWithNullInstanceElements1
JsonPointerFormat.JsonPointerFormat1
MaxcontainsWithoutContainsIsIgnored.MaxcontainsWithoutContainsIsIgnored1
MaximumValidation.MaximumValidation1
MaximumValidationWithUnsignedInteger.MaximumValidationWithUnsignedInteger1
MaxitemsValidation.MaxitemsValidation1
MaxlengthValidation.MaxlengthValidation1
Maxproperties0MeansTheObjectIsEmpty.Maxproperties0MeansTheObjectIsEmpty1
MaxpropertiesValidation.MaxpropertiesValidation1
MincontainsWithoutContainsIsIgnored.MincontainsWithoutContainsIsIgnored1
MinimumValidation.MinimumValidation1
MinimumValidationWithSignedInteger.MinimumValidationWithSignedInteger1
MinitemsValidation.MinitemsValidation1
MinlengthValidation.MinlengthValidation1
MinpropertiesValidation.MinpropertiesValidation1
MultipleDependentsRequired.MultipleDependentsRequired1
MultipleSimultaneousPatternpropertiesAreValidated.MultipleSimultaneousPatternpropertiesAreValidated1
MultipleTypesCanBeSpecifiedInAnArray.MultipleTypesCanBeSpecifiedInAnArray1
NestedAllofToCheckValidationSemantics.NestedAllofToCheckValidationSemantics1
NestedAnyofToCheckValidationSemantics.NestedAnyofToCheckValidationSemantics1
NestedItems.NestedItems1
NestedOneofToCheckValidationSemantics.NestedOneofToCheckValidationSemantics1
NonAsciiPatternWithAdditionalproperties.NonAsciiPatternWithAdditionalproperties1
NonInterferenceAcrossCombinedSchemas.NonInterferenceAcrossCombinedSchemas1
Not.Not1
NotMoreComplexSchema.NotMoreComplexSchema1
NotMultipleTypes.NotMultipleTypes1
NulCharactersInStrings.NulCharactersInStrings1
NullTypeMatchesOnlyTheNullObject.NullTypeMatchesOnlyTheNullObject1
NumberTypeMatchesNumbers.NumberTypeMatchesNumbers1
ObjectPropertiesValidation.ObjectPropertiesValidation1
ObjectTypeMatchesObjects.ObjectTypeMatchesObjects1
Oneof.Oneof1
OneofComplexTypes.OneofComplexTypes1
OneofWithBaseSchema.OneofWithBaseSchema1
OneofWithEmptySchema.OneofWithEmptySchema1
OneofWithRequired.OneofWithRequired1
PatternIsNotAnchored.PatternIsNotAnchored1
PatternValidation.PatternValidation1
PatternpropertiesValidatesPropertiesMatchingARegex.PatternpropertiesValidatesPropertiesMatchingARegex1
PatternpropertiesWithNullValuedInstanceProperties.PatternpropertiesWithNullValuedInstanceProperties1
PrefixitemsValidationAdjustsTheStartingIndexForItems.PrefixitemsValidationAdjustsTheStartingIndexForItems1
PrefixitemsWithNullInstanceElements.PrefixitemsWithNullInstanceElements1
PropertiesPatternpropertiesAdditionalpropertiesInteraction.PropertiesPatternpropertiesAdditionalpropertiesInteraction1
PropertiesWhoseNamesAreJavascriptObjectPropertyNames.PropertiesWhoseNamesAreJavascriptObjectPropertyNames1
PropertiesWithEscapedCharacters.PropertiesWithEscapedCharacters1
PropertiesWithNullValuedInstanceProperties.PropertiesWithNullValuedInstanceProperties1
PropertyNamedRefThatIsNotAReference.PropertyNamedRefThatIsNotAReference1
PropertynamesValidation.PropertynamesValidation1
RegexFormat.RegexFormat1
RegexesAreNotAnchoredByDefaultAndAreCaseSensitive.RegexesAreNotAnchoredByDefaultAndAreCaseSensitive1
RelativeJsonPointerFormat.RelativeJsonPointerFormat1
RequiredDefaultValidation.RequiredDefaultValidation1
RequiredPropertiesWhoseNamesAreJavascriptObjectPropertyNames.RequiredPropertiesWhoseNamesAreJavascriptObjectPropertyNames1
RequiredValidation.RequiredValidation1
RequiredWithEmptyArray.RequiredWithEmptyArray1
RequiredWithEscapedCharacters.RequiredWithEscapedCharacters1
SimpleEnumValidation.SimpleEnumValidation1
SingleDependency.SingleDependency1
SmallMultipleOfLargeInteger.SmallMultipleOfLargeInteger1
StringTypeMatchesStrings.StringTypeMatchesStrings1
TimeFormat.TimeFormat1
TypeArrayObjectOrNull.TypeArrayObjectOrNull1
TypeArrayOrObject.TypeArrayOrObject1
TypeAsArrayWithOneItem.TypeAsArrayWithOneItem1
UnevaluateditemsAsSchema.UnevaluateditemsAsSchema1
UnevaluateditemsDependsOnMultipleNestedContains.UnevaluateditemsDependsOnMultipleNestedContains1
UnevaluateditemsWithItems.UnevaluateditemsWithItems1
UnevaluateditemsWithNullInstanceElements.UnevaluateditemsWithNullInstanceElements1
UnevaluatedpropertiesNotAffectedByPropertynames.UnevaluatedpropertiesNotAffectedByPropertynames1
UnevaluatedpropertiesSchema.UnevaluatedpropertiesSchema1
UnevaluatedpropertiesWithAdjacentAdditionalproperties.UnevaluatedpropertiesWithAdjacentAdditionalproperties1
UnevaluatedpropertiesWithNullValuedInstanceProperties.UnevaluatedpropertiesWithNullValuedInstanceProperties1
UniqueitemsFalseValidation.UniqueitemsFalseValidation1
UniqueitemsFalseWithAnArrayOfItems.UniqueitemsFalseWithAnArrayOfItems1
UniqueitemsValidation.UniqueitemsValidation1
UniqueitemsWithAnArrayOfItems.UniqueitemsWithAnArrayOfItems1
UriFormat.UriFormat1
UriReferenceFormat.UriReferenceFormat1
UriTemplateFormat.UriTemplateFormat1
UuidFormat.UuidFormat1
ValidateAgainstCorrectBranchThenVsElse.ValidateAgainstCorrectBranchThenVsElse1