Skip to content

Commit bb5b1c3

Browse files
committed
update OpenAPI parser (2023.3) setup
1 parent 8cd9b06 commit bb5b1c3

1 file changed

Lines changed: 48 additions & 26 deletions

File tree

  • openapi-processor-core/src/main/kotlin/io/openapiprocessor/core/parser/openapi

openapi-processor-core/src/main/kotlin/io/openapiprocessor/core/parser/openapi/Parser.kt

Lines changed: 48 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@ import io.openapiparser.ValidationErrorTextBuilder
1111
import io.openapiprocessor.core.support.toURI
1212
import io.openapiprocessor.jackson.JacksonConverter
1313
import 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
1518
import io.openapiprocessor.jsonschema.validator.Validator
1619
import io.openapiprocessor.jsonschema.validator.ValidatorSettings
1720
import 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

Comments
 (0)