swagger-api / swagger-parser

Swagger Spec to Java POJOs
http://swagger.io
Apache License 2.0
778 stars 525 forks source link

Cache loaded extensions in OpenApiDeserializer #1909

Closed tvahrst closed 10 months ago

tvahrst commented 1 year ago

The ServiceLoader for JsonSchemaParserExtensions in OpenApiDeserializer is invoked for each detected schema in an OpenAPI document. The loaded Extensions should be cached statically in OpenApiDeserializer (per classloader).

We are using openapi-diff (which in turn uses the OpenAPIParser) in our apimangement application to detect api changes. The fact, that

results in poor performance (about 30 seconds) for a comparison because of multiple ServiceLoader invocations.

This is (admittedly) a special use case. But caching of all detected Extensions would be generally a good idea to avoid unnecessary classpath-scan-operations.

btw, there is corresponding TODO in SchemaProcessor (https://github.com/swagger-api/swagger-parser/blob/master/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/SchemaProcessor.java#L49)