Package io.micronaut.openapi.visitor
Class OpenApiApplicationVisitor
- java.lang.Object
-
- io.micronaut.openapi.visitor.OpenApiApplicationVisitor
-
- All Implemented Interfaces:
io.micronaut.core.order.Ordered,io.micronaut.core.util.Toggleable,io.micronaut.inject.visitor.TypeElementVisitor<io.swagger.v3.oas.annotations.OpenAPIDefinition,java.lang.Object>
@SupportedOptions({"micronaut.openapi.server.context.path","micronaut.openapi.property.naming.strategy","micronaut.openapi.views.spec","micronaut.openapi.json.format","micronaut.openapi.environments","micronaut.environment.enabled","micronaut.openapi.config.file.locations","micronaut.openapi.target.file","micronaut.openapi.additional.files","micronaut.openapi.config.file"}) public class OpenApiApplicationVisitor extends java.lang.Object implements io.micronaut.inject.visitor.TypeElementVisitor<io.swagger.v3.oas.annotations.OpenAPIDefinition,java.lang.Object>Visits the application class.- Since:
- 1.0
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.StringMICRONAUT_CONFIG_FILE_LOCATIONSConfig file locations.static java.lang.StringMICRONAUT_ENVIRONMENT_ENABLEDIs this property true, properties wll be loaded in the standard way from application.yml.static java.lang.StringMICRONAUT_OPENAPI_ADDITIONAL_FILESSystem property that specifies the location of additional swagger YAML and JSON files to read from.static java.lang.StringMICRONAUT_OPENAPI_CONFIG_FILESystem property that enables setting the open api config file.static java.lang.StringMICRONAUT_OPENAPI_CONTEXT_SERVER_PATHSystem property for server context path.static java.lang.StringMICRONAUT_OPENAPI_ENDPOINT_CLASS_TAGSThe name of the entry for Endpoint class tags in the context.static java.lang.StringMICRONAUT_OPENAPI_ENDPOINT_SECURITY_REQUIREMENTSThe name of the entry for Endpoint security requirements in the context.static java.lang.StringMICRONAUT_OPENAPI_ENDPOINT_SERVERSThe name of the entry for Endpoint servers in the context.static java.lang.StringMICRONAUT_OPENAPI_ENVIRONMENTSActive micronaut environments which will be used for @Requires annotations.static java.lang.StringMICRONAUT_OPENAPI_EXPAND_PREFIXPrefix for expandable properties.static java.lang.StringMICRONAUT_OPENAPI_JSON_FORMATIs this property true, output file format will be JSON, otherwise YAML.static java.lang.StringMICRONAUT_OPENAPI_PROPERTY_NAMING_STRATEGYSystem property for naming strategy.static java.lang.StringMICRONAUT_OPENAPI_TARGET_FILESystem property that enables setting the target file to write to.static java.lang.StringMICRONAUT_OPENAPI_VIEWS_SPECSystem property for views specification.static java.lang.StringOPENAPI_CONFIG_FILEDefault openapi config file.
-
Constructor Summary
Constructors Constructor Description OpenApiApplicationVisitor()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected io.swagger.v3.oas.models.media.SchemabindArraySchemaAnnotationValue(io.micronaut.inject.visitor.VisitorContext context, io.micronaut.inject.ast.Element element, io.swagger.v3.oas.models.media.Schema schemaToBind, io.micronaut.core.annotation.AnnotationValue<io.swagger.v3.oas.annotations.media.ArraySchema> schemaAnn)Binds the array schema for the given element.protected io.swagger.v3.oas.models.media.SchemabindSchemaAnnotationValue(io.micronaut.inject.visitor.VisitorContext context, io.micronaut.inject.ast.Element element, io.swagger.v3.oas.models.media.Schema schemaToBind, io.micronaut.core.annotation.AnnotationValue<io.swagger.v3.oas.annotations.media.Schema> schemaAnn)Binds the schema for the given element.protected io.swagger.v3.oas.models.media.SchemabindSchemaForElement(io.micronaut.inject.visitor.VisitorContext context, io.micronaut.inject.ast.Element element, io.micronaut.inject.ast.ClassElement elementType, io.swagger.v3.oas.models.media.Schema schemaToBind)Binds the schema for the given element.static java.lang.StringexpandProperties(java.lang.String s, java.util.List<java.util.Map.Entry<java.lang.String,java.lang.String>> properties, io.micronaut.inject.visitor.VisitorContext context)voidfinish(io.micronaut.inject.visitor.VisitorContext visitorContext)static java.util.List<java.lang.String>getActiveEnvs(io.micronaut.inject.visitor.VisitorContext context)static java.lang.StringgetConfigurationProperty(java.lang.String key, io.micronaut.inject.visitor.VisitorContext context)static io.micronaut.context.env.EnvironmentgetEnv(io.micronaut.inject.visitor.VisitorContext context)static java.util.List<java.util.Map.Entry<java.lang.String,java.lang.String>>getExpandableProperties(io.micronaut.inject.visitor.VisitorContext context)protected booleanisElementNotNullable(io.micronaut.inject.ast.Element element, io.micronaut.inject.ast.Element classElement)protected voidprocessJavaxValidationAnnotations(io.micronaut.inject.ast.Element element, io.micronaut.inject.ast.ClassElement elementType, io.swagger.v3.oas.models.media.Schema schemaToBind)protected <T,A extends java.lang.annotation.Annotation>
java.util.List<T>processOpenApiAnnotation(io.micronaut.inject.ast.Element element, io.micronaut.inject.visitor.VisitorContext context, java.lang.Class<A> annotationType, java.lang.Class<T> modelType, java.util.List<T> tagList)Converts annotation to model.protected voidprocessSchemaProperty(io.micronaut.inject.visitor.VisitorContext context, io.micronaut.inject.ast.Element element, io.micronaut.inject.ast.ClassElement elementType, io.micronaut.inject.ast.Element classElement, io.swagger.v3.oas.models.media.Schema parentSchema, io.swagger.v3.oas.models.media.Schema propertySchema)Processes a schema property.protected voidprocessSecuritySchemes(io.micronaut.inject.ast.ClassElement element, io.micronaut.inject.visitor.VisitorContext context)ProcessesSecuritySchemeannotations.static java.util.PropertiesreadOpenApiConfigFile(io.micronaut.inject.visitor.VisitorContext context)protected io.swagger.v3.oas.models.media.SchemareadSchema(io.micronaut.core.annotation.AnnotationValue<io.swagger.v3.oas.annotations.media.Schema> schemaValue, io.swagger.v3.oas.models.OpenAPI openAPI, io.micronaut.inject.visitor.VisitorContext context, io.micronaut.inject.ast.Element type, java.util.List<io.micronaut.http.MediaType> mediaTypes)Reads schema.static com.fasterxml.jackson.databind.JsonNoderesolvePlaceholders(com.fasterxml.jackson.databind.JsonNode node, java.util.function.UnaryOperator<java.lang.String> propertyExpander)static com.fasterxml.jackson.databind.JsonNoderesolvePlaceholders(com.fasterxml.jackson.databind.node.ArrayNode anode, java.util.function.UnaryOperator<java.lang.String> propertyExpander)static com.fasterxml.jackson.databind.JsonNoderesolvePlaceholders(com.fasterxml.jackson.databind.node.ObjectNode onode, java.util.function.UnaryOperator<java.lang.String> propertyExpander)protected io.swagger.v3.oas.models.media.SchemaresolveSchema(io.micronaut.inject.ast.Element definingElement, io.micronaut.inject.ast.ClassElement type, io.micronaut.inject.visitor.VisitorContext context, java.util.List<io.micronaut.http.MediaType> mediaTypes)Resolves the schema for the given type element.protected io.swagger.v3.oas.models.media.SchemaresolveSchema(io.swagger.v3.oas.models.OpenAPI openAPI, io.micronaut.inject.ast.Element definingElement, io.micronaut.inject.ast.ClassElement type, io.micronaut.inject.visitor.VisitorContext context, java.util.List<io.micronaut.http.MediaType> mediaTypes, JavadocDescription fieldJavadoc, JavadocDescription classJavadoc)Resolves the schema for the given type element.protected java.util.Map<java.lang.CharSequence,java.lang.Object>toValueMap(java.util.Map<java.lang.CharSequence,java.lang.Object> values, io.micronaut.inject.visitor.VisitorContext context)Convert the values to a map.voidvisitClass(io.micronaut.inject.ast.ClassElement element, io.micronaut.inject.visitor.VisitorContext context)
-
-
-
Field Detail
-
MICRONAUT_OPENAPI_CONFIG_FILE
public static final java.lang.String MICRONAUT_OPENAPI_CONFIG_FILE
System property that enables setting the open api config file.- See Also:
- Constant Field Values
-
MICRONAUT_OPENAPI_EXPAND_PREFIX
public static final java.lang.String MICRONAUT_OPENAPI_EXPAND_PREFIX
Prefix for expandable properties.- See Also:
- Constant Field Values
-
MICRONAUT_OPENAPI_CONTEXT_SERVER_PATH
public static final java.lang.String MICRONAUT_OPENAPI_CONTEXT_SERVER_PATH
System property for server context path.- See Also:
- Constant Field Values
-
MICRONAUT_OPENAPI_PROPERTY_NAMING_STRATEGY
public static final java.lang.String MICRONAUT_OPENAPI_PROPERTY_NAMING_STRATEGY
System property for naming strategy. One jackson PropertyNamingStrategy.- See Also:
- Constant Field Values
-
MICRONAUT_OPENAPI_VIEWS_SPEC
public static final java.lang.String MICRONAUT_OPENAPI_VIEWS_SPEC
System property for views specification.- See Also:
- Constant Field Values
-
MICRONAUT_OPENAPI_TARGET_FILE
public static final java.lang.String MICRONAUT_OPENAPI_TARGET_FILE
System property that enables setting the target file to write to.- See Also:
- Constant Field Values
-
MICRONAUT_OPENAPI_ADDITIONAL_FILES
public static final java.lang.String MICRONAUT_OPENAPI_ADDITIONAL_FILES
System property that specifies the location of additional swagger YAML and JSON files to read from.- See Also:
- Constant Field Values
-
OPENAPI_CONFIG_FILE
public static final java.lang.String OPENAPI_CONFIG_FILE
Default openapi config file.- See Also:
- Constant Field Values
-
MICRONAUT_OPENAPI_ENDPOINT_CLASS_TAGS
public static final java.lang.String MICRONAUT_OPENAPI_ENDPOINT_CLASS_TAGS
The name of the entry for Endpoint class tags in the context.- See Also:
- Constant Field Values
-
MICRONAUT_OPENAPI_ENDPOINT_SERVERS
public static final java.lang.String MICRONAUT_OPENAPI_ENDPOINT_SERVERS
The name of the entry for Endpoint servers in the context.- See Also:
- Constant Field Values
-
MICRONAUT_OPENAPI_ENDPOINT_SECURITY_REQUIREMENTS
public static final java.lang.String MICRONAUT_OPENAPI_ENDPOINT_SECURITY_REQUIREMENTS
The name of the entry for Endpoint security requirements in the context.- See Also:
- Constant Field Values
-
MICRONAUT_OPENAPI_JSON_FORMAT
public static final java.lang.String MICRONAUT_OPENAPI_JSON_FORMAT
Is this property true, output file format will be JSON, otherwise YAML.- See Also:
- Constant Field Values
-
MICRONAUT_OPENAPI_ENVIRONMENTS
public static final java.lang.String MICRONAUT_OPENAPI_ENVIRONMENTS
Active micronaut environments which will be used for @Requires annotations.- See Also:
- Constant Field Values
-
MICRONAUT_ENVIRONMENT_ENABLED
public static final java.lang.String MICRONAUT_ENVIRONMENT_ENABLED
Is this property true, properties wll be loaded in the standard way from application.yml. Also, environments from "micronaut.openapi.environments" property will set as additional environments, if you want to set specific environment name for openAPI generator.
Default value is "true".- See Also:
- Constant Field Values
-
MICRONAUT_CONFIG_FILE_LOCATIONS
public static final java.lang.String MICRONAUT_CONFIG_FILE_LOCATIONS
Config file locations. By default, micronaut-openapi search config in standard path: <project_path>/src/main/resources/You can set your custom paths separated by ','. To set absolute paths use prefix 'file:', classpath paths use prefix 'classpath:' or use prefix 'project:' to set paths from project directory.
- See Also:
- Constant Field Values
-
-
Method Detail
-
visitClass
public void visitClass(io.micronaut.inject.ast.ClassElement element, io.micronaut.inject.visitor.VisitorContext context)- Specified by:
visitClassin interfaceio.micronaut.inject.visitor.TypeElementVisitor<io.swagger.v3.oas.annotations.OpenAPIDefinition,java.lang.Object>
-
getConfigurationProperty
public static java.lang.String getConfigurationProperty(java.lang.String key, io.micronaut.inject.visitor.VisitorContext context)
-
getEnv
@Nullable public static io.micronaut.context.env.Environment getEnv(io.micronaut.inject.visitor.VisitorContext context)
-
getActiveEnvs
public static java.util.List<java.lang.String> getActiveEnvs(io.micronaut.inject.visitor.VisitorContext context)
-
readOpenApiConfigFile
public static java.util.Properties readOpenApiConfigFile(io.micronaut.inject.visitor.VisitorContext context)
-
resolvePlaceholders
public static com.fasterxml.jackson.databind.JsonNode resolvePlaceholders(com.fasterxml.jackson.databind.node.ArrayNode anode, java.util.function.UnaryOperator<java.lang.String> propertyExpander)
-
resolvePlaceholders
public static com.fasterxml.jackson.databind.JsonNode resolvePlaceholders(com.fasterxml.jackson.databind.node.ObjectNode onode, java.util.function.UnaryOperator<java.lang.String> propertyExpander)
-
resolvePlaceholders
public static com.fasterxml.jackson.databind.JsonNode resolvePlaceholders(com.fasterxml.jackson.databind.JsonNode node, java.util.function.UnaryOperator<java.lang.String> propertyExpander)
-
expandProperties
public static java.lang.String expandProperties(java.lang.String s, java.util.List<java.util.Map.Entry<java.lang.String,java.lang.String>> properties, io.micronaut.inject.visitor.VisitorContext context)
-
getExpandableProperties
public static java.util.List<java.util.Map.Entry<java.lang.String,java.lang.String>> getExpandableProperties(io.micronaut.inject.visitor.VisitorContext context)
-
finish
public void finish(io.micronaut.inject.visitor.VisitorContext visitorContext)
- Specified by:
finishin interfaceio.micronaut.inject.visitor.TypeElementVisitor<io.swagger.v3.oas.annotations.OpenAPIDefinition,java.lang.Object>
-
toValueMap
protected java.util.Map<java.lang.CharSequence,java.lang.Object> toValueMap(java.util.Map<java.lang.CharSequence,java.lang.Object> values, io.micronaut.inject.visitor.VisitorContext context)Convert the values to a map.- Parameters:
values- The valuescontext- The visitor context- Returns:
- The map
-
resolveSchema
@Nullable protected io.swagger.v3.oas.models.media.Schema resolveSchema(@Nullable io.micronaut.inject.ast.Element definingElement, io.micronaut.inject.ast.ClassElement type, io.micronaut.inject.visitor.VisitorContext context, java.util.List<io.micronaut.http.MediaType> mediaTypes)Resolves the schema for the given type element.- Parameters:
definingElement- The defining elementtype- The type elementcontext- The contextmediaTypes- An optional media type- Returns:
- The schema or null if it cannot be resolved
-
resolveSchema
@Nullable protected io.swagger.v3.oas.models.media.Schema resolveSchema(io.swagger.v3.oas.models.OpenAPI openAPI, @Nullable io.micronaut.inject.ast.Element definingElement, io.micronaut.inject.ast.ClassElement type, io.micronaut.inject.visitor.VisitorContext context, java.util.List<io.micronaut.http.MediaType> mediaTypes, JavadocDescription fieldJavadoc, JavadocDescription classJavadoc)Resolves the schema for the given type element.- Parameters:
openAPI- The OpenAPI objectdefiningElement- The defining elementtype- The type elementcontext- The contextmediaTypes- An optional media typefieldJavadoc- Field-level java docclassJavadoc- Class-level java doc- Returns:
- The schema or null if it cannot be resolved
-
processSchemaProperty
protected void processSchemaProperty(io.micronaut.inject.visitor.VisitorContext context, io.micronaut.inject.ast.Element element, io.micronaut.inject.ast.ClassElement elementType, @Nullable io.micronaut.inject.ast.Element classElement, io.swagger.v3.oas.models.media.Schema parentSchema, io.swagger.v3.oas.models.media.Schema propertySchema)Processes a schema property.- Parameters:
context- The visitor contextelement- The elementelementType- The element typeclassElement- The class elementparentSchema- The parent schemapropertySchema- The property schema
-
isElementNotNullable
protected boolean isElementNotNullable(io.micronaut.inject.ast.Element element, @Nullable io.micronaut.inject.ast.Element classElement)
-
bindSchemaForElement
protected io.swagger.v3.oas.models.media.Schema bindSchemaForElement(io.micronaut.inject.visitor.VisitorContext context, io.micronaut.inject.ast.Element element, io.micronaut.inject.ast.ClassElement elementType, io.swagger.v3.oas.models.media.Schema schemaToBind)Binds the schema for the given element.- Parameters:
context- The contextelement- The elementelementType- The element typeschemaToBind- The schema to bind- Returns:
- The bound schema
-
processJavaxValidationAnnotations
protected void processJavaxValidationAnnotations(io.micronaut.inject.ast.Element element, io.micronaut.inject.ast.ClassElement elementType, io.swagger.v3.oas.models.media.Schema schemaToBind)
-
bindSchemaAnnotationValue
protected io.swagger.v3.oas.models.media.Schema bindSchemaAnnotationValue(io.micronaut.inject.visitor.VisitorContext context, io.micronaut.inject.ast.Element element, io.swagger.v3.oas.models.media.Schema schemaToBind, io.micronaut.core.annotation.AnnotationValue<io.swagger.v3.oas.annotations.media.Schema> schemaAnn)Binds the schema for the given element.- Parameters:
context- The contextelement- The elementschemaToBind- The schema to bindschemaAnn- The schema annotation- Returns:
- The bound schema
-
bindArraySchemaAnnotationValue
protected io.swagger.v3.oas.models.media.Schema bindArraySchemaAnnotationValue(io.micronaut.inject.visitor.VisitorContext context, io.micronaut.inject.ast.Element element, io.swagger.v3.oas.models.media.Schema schemaToBind, io.micronaut.core.annotation.AnnotationValue<io.swagger.v3.oas.annotations.media.ArraySchema> schemaAnn)Binds the array schema for the given element.- Parameters:
context- The contextelement- The elementschemaToBind- The schema to bindschemaAnn- The schema annotation- Returns:
- The bound schema
-
readSchema
protected io.swagger.v3.oas.models.media.Schema readSchema(io.micronaut.core.annotation.AnnotationValue<io.swagger.v3.oas.annotations.media.Schema> schemaValue, io.swagger.v3.oas.models.OpenAPI openAPI, io.micronaut.inject.visitor.VisitorContext context, @Nullable io.micronaut.inject.ast.Element type, java.util.List<io.micronaut.http.MediaType> mediaTypes) throws com.fasterxml.jackson.core.JsonProcessingExceptionReads schema.- Parameters:
schemaValue- annotation valueopenAPI- The OpenApicontext- The VisitorContexttype- The elementmediaTypes- The media types of schema- Returns:
- New schema instance
- Throws:
com.fasterxml.jackson.core.JsonProcessingException- when Json parsing fails
-
processSecuritySchemes
protected void processSecuritySchemes(io.micronaut.inject.ast.ClassElement element, io.micronaut.inject.visitor.VisitorContext context)ProcessesSecuritySchemeannotations.- Parameters:
element- The elementcontext- The visitor context
-
processOpenApiAnnotation
protected <T,A extends java.lang.annotation.Annotation> java.util.List<T> processOpenApiAnnotation(io.micronaut.inject.ast.Element element, io.micronaut.inject.visitor.VisitorContext context, java.lang.Class<A> annotationType, java.lang.Class<T> modelType, java.util.List<T> tagList)Converts annotation to model.- Type Parameters:
T- The model type.A- The annotation type.- Parameters:
element- The element to process.context- The context.annotationType- The annotation type.modelType- The model type.tagList- The initial list of models.- Returns:
- A list of model objects.
-
-