@@ -11,7 +11,10 @@ import io.openapiparser.ValidationErrorTextBuilder
1111import io.openapiprocessor.core.support.toURI
1212import io.openapiprocessor.jackson.JacksonConverter
1313import io.openapiprocessor.jsonschema.reader.UriReader
14- import io.openapiprocessor.jsonschema.schema.*
14+ import io.openapiprocessor.jsonschema.schema.DocumentLoader
15+ import io.openapiprocessor.jsonschema.schema.DocumentStore
16+ import io.openapiprocessor.jsonschema.schema.Output
17+ import io.openapiprocessor.jsonschema.schema.SchemaStore
1518import io.openapiprocessor.jsonschema.validator.Validator
1619import io.openapiprocessor.jsonschema.validator.ValidatorSettings
1720import org.slf4j.Logger
@@ -35,39 +38,58 @@ class Parser {
3538 val loader = DocumentLoader (reader, converter)
3639
3740 val documents = DocumentStore ()
38- val settings = Resolver .Settings (SchemaVersion .Draft4 )
39- val resolver = Resolver (documents, loader, settings)
41+ val parser = OpenApiParser (documents, loader)
4042
41- val parser = OpenApiParser (resolver)
42-
43- val apiUri = toURI(apiPath)
44- val result = parser.parse(apiUri)
43+ val baseUri = toURI(apiPath)
44+ val result = parser.parse(baseUri)
4545
4646 return when (result.version) {
47+ OpenApiResult .Version .V31 -> {
48+ validate31(loader, apiPath, result)
49+ createApi31(result)
50+ }
4751 OpenApiResult .Version .V30 -> {
48- val store = SchemaStore (loader)
49- store.registerDraft4()
52+ validate30(loader, apiPath, result)
53+ createApi30(result)
54+ }
55+ else -> {
56+ TODO () // unknown openapi version
57+ }
58+ }
59+ }
5060
51- val validator = Validator (ValidatorSettings ().setOutput(Output .BASIC ))
52- val valid = result.validate(validator, store)
61+ private fun createApi30 (result : OpenApiResult ): ParserOpenApi {
62+ val model = result.getModel(OpenApi30 ::class .java)
63+ return ParserOpenApi30 (model)
64+ }
5365
54- if (! valid) {
55- val builder = ValidationErrorTextBuilder ()
66+ private fun createApi31 (result : OpenApiResult ): ParserOpenApi {
67+ val model = result.getModel(OpenApi31 ::class .java)
68+ return ParserOpenApi31 (model)
69+ }
5670
57- log.warn( " OpenAPI description '{}' does not pass schema validation: " , apiPath)
58- for (error in result.validationErrors) {
59- log.warn(builder.getText(error) )
60- }
61- }
71+ private fun validate30 ( loader : DocumentLoader , apiPath : String , result : OpenApiResult ) {
72+ val store = SchemaStore (loader)
73+ store.registerDraft4( )
74+ validate(apiPath, result, store)
75+ }
6276
63- val model = result.getModel(OpenApi30 ::class .java)
64- ParserOpenApi30 (model)
65- }
66- OpenApiResult .Version .V31 -> {
67- ParserOpenApi31 (result.getModel(OpenApi31 ::class .java))
68- }
69- else -> {
70- TODO () // unsupported openapi version
77+ private fun validate31 (loader : DocumentLoader , apiPath : String , result : OpenApiResult ) {
78+ val store = SchemaStore (loader)
79+ store.registerDraft202012()
80+ validate(apiPath, result, store)
81+ }
82+
83+ private fun validate (apiPath : String , result : OpenApiResult , store : SchemaStore ) {
84+ val validator = Validator (ValidatorSettings ().setOutput(Output .BASIC ))
85+ val valid = result.validate(validator, store)
86+
87+ if (! valid) {
88+ val builder = ValidationErrorTextBuilder ()
89+
90+ log.warn(" OpenAPI description '{}' does not pass schema validation:" , apiPath)
91+ for (error in result.validationErrors) {
92+ log.warn(builder.getText(error))
7193 }
7294 }
7395 }
0 commit comments