|
28 | 28 | import java.util.Optional; |
29 | 29 | import java.util.Properties; |
30 | 30 |
|
31 | | -import io.swagger.v3.core.converter.ModelConverter; |
32 | | -import io.swagger.v3.core.converter.ModelConverters; |
33 | | -import io.swagger.v3.core.filter.SpecFilter; |
34 | | -import io.swagger.v3.core.jackson.ApiResponsesSerializer; |
35 | | -import io.swagger.v3.core.jackson.PathsSerializer; |
36 | | -import io.swagger.v3.core.jackson.mixin.Components31Mixin; |
37 | | -import io.swagger.v3.core.jackson.mixin.ComponentsMixin; |
38 | | -import io.swagger.v3.core.jackson.mixin.DateSchemaMixin; |
39 | | -import io.swagger.v3.core.jackson.mixin.Discriminator31Mixin; |
40 | | -import io.swagger.v3.core.jackson.mixin.ExampleMixin; |
41 | | -import io.swagger.v3.core.jackson.mixin.ExtensionsMixin; |
42 | | -import io.swagger.v3.core.jackson.mixin.MediaTypeMixin; |
43 | | -import io.swagger.v3.core.jackson.mixin.OpenAPI31Mixin; |
44 | | -import io.swagger.v3.core.jackson.mixin.OpenAPIMixin; |
45 | | -import io.swagger.v3.core.jackson.mixin.OperationMixin; |
46 | | -import io.swagger.v3.core.jackson.mixin.Schema31Mixin; |
47 | | -import io.swagger.v3.core.jackson.mixin.SchemaMixin; |
48 | | -import io.swagger.v3.oas.annotations.ExternalDocumentation; |
49 | | -import io.swagger.v3.oas.annotations.Hidden; |
50 | | -import io.swagger.v3.oas.annotations.OpenAPIDefinition; |
51 | | -import io.swagger.v3.oas.annotations.Operation; |
52 | | -import io.swagger.v3.oas.annotations.Parameter; |
53 | | -import io.swagger.v3.oas.annotations.callbacks.Callbacks; |
54 | | -import io.swagger.v3.oas.annotations.enums.SecuritySchemeType; |
55 | | -import io.swagger.v3.oas.annotations.extensions.Extension; |
56 | | -import io.swagger.v3.oas.annotations.extensions.ExtensionProperty; |
57 | | -import io.swagger.v3.oas.annotations.headers.Header; |
58 | | -import io.swagger.v3.oas.annotations.info.Contact; |
59 | | -import io.swagger.v3.oas.annotations.info.Info; |
60 | | -import io.swagger.v3.oas.annotations.info.License; |
61 | | -import io.swagger.v3.oas.annotations.links.Link; |
62 | | -import io.swagger.v3.oas.annotations.links.LinkParameter; |
63 | | -import io.swagger.v3.oas.annotations.media.ArraySchema; |
64 | | -import io.swagger.v3.oas.annotations.media.Content; |
65 | | -import io.swagger.v3.oas.annotations.media.DiscriminatorMapping; |
66 | | -import io.swagger.v3.oas.annotations.media.Encoding; |
67 | | -import io.swagger.v3.oas.annotations.media.ExampleObject; |
68 | | -import io.swagger.v3.oas.annotations.media.Schema; |
69 | | -import io.swagger.v3.oas.annotations.parameters.RequestBody; |
70 | | -import io.swagger.v3.oas.annotations.responses.ApiResponse; |
71 | | -import io.swagger.v3.oas.annotations.responses.ApiResponses; |
72 | | -import io.swagger.v3.oas.annotations.security.OAuthFlow; |
73 | | -import io.swagger.v3.oas.annotations.security.OAuthFlows; |
74 | | -import io.swagger.v3.oas.annotations.security.OAuthScope; |
75 | | -import io.swagger.v3.oas.annotations.security.SecurityRequirement; |
76 | | -import io.swagger.v3.oas.annotations.security.SecurityRequirements; |
77 | | -import io.swagger.v3.oas.annotations.security.SecurityScheme; |
78 | | -import io.swagger.v3.oas.annotations.security.SecuritySchemes; |
79 | | -import io.swagger.v3.oas.annotations.servers.Server; |
80 | | -import io.swagger.v3.oas.annotations.servers.ServerVariable; |
81 | | -import io.swagger.v3.oas.annotations.tags.Tag; |
82 | | -import io.swagger.v3.oas.models.Components; |
83 | | -import io.swagger.v3.oas.models.OpenAPI; |
84 | | -import io.swagger.v3.oas.models.PathItem; |
85 | | -import io.swagger.v3.oas.models.Paths; |
86 | | -import io.swagger.v3.oas.models.examples.Example; |
87 | | -import io.swagger.v3.oas.models.media.BinarySchema; |
88 | | -import io.swagger.v3.oas.models.media.BooleanSchema; |
89 | | -import io.swagger.v3.oas.models.media.ByteArraySchema; |
90 | | -import io.swagger.v3.oas.models.media.ComposedSchema; |
91 | | -import io.swagger.v3.oas.models.media.DateSchema; |
92 | | -import io.swagger.v3.oas.models.media.DateTimeSchema; |
93 | | -import io.swagger.v3.oas.models.media.Discriminator; |
94 | | -import io.swagger.v3.oas.models.media.EmailSchema; |
95 | | -import io.swagger.v3.oas.models.media.EncodingProperty; |
96 | | -import io.swagger.v3.oas.models.media.FileSchema; |
97 | | -import io.swagger.v3.oas.models.media.IntegerSchema; |
98 | | -import io.swagger.v3.oas.models.media.MapSchema; |
99 | | -import io.swagger.v3.oas.models.media.MediaType; |
100 | | -import io.swagger.v3.oas.models.media.NumberSchema; |
101 | | -import io.swagger.v3.oas.models.media.ObjectSchema; |
102 | | -import io.swagger.v3.oas.models.media.PasswordSchema; |
103 | | -import io.swagger.v3.oas.models.media.StringSchema; |
104 | | -import io.swagger.v3.oas.models.media.UUIDSchema; |
105 | | -import io.swagger.v3.oas.models.media.XML; |
106 | | -import io.swagger.v3.oas.models.parameters.CookieParameter; |
107 | | -import io.swagger.v3.oas.models.parameters.HeaderParameter; |
108 | | -import io.swagger.v3.oas.models.parameters.PathParameter; |
109 | | -import io.swagger.v3.oas.models.parameters.QueryParameter; |
110 | | -import io.swagger.v3.oas.models.security.Scopes; |
111 | | -import io.swagger.v3.oas.models.servers.ServerVariables; |
112 | 31 | import org.apache.commons.lang3.StringUtils; |
113 | | -import org.springdoc.api.AbstractOpenApiResource; |
114 | | -import org.springdoc.core.converters.AdditionalModelsConverter; |
115 | | -import org.springdoc.core.converters.FileSupportConverter; |
116 | | -import org.springdoc.core.converters.ModelConverterRegistrar; |
117 | | -import org.springdoc.core.converters.PolymorphicModelConverter; |
118 | | -import org.springdoc.core.converters.PropertyCustomizingConverter; |
119 | | -import org.springdoc.core.converters.ResponseSupportConverter; |
120 | | -import org.springdoc.core.converters.SchemaPropertyDeprecatingConverter; |
121 | | -import org.springdoc.core.mixins.SortedOpenAPIMixin; |
122 | | -import org.springdoc.core.mixins.SortedSchemaMixin; |
123 | | -import org.springdoc.core.models.GroupedOpenApi; |
124 | | -import org.springdoc.core.parsers.ReturnTypeParser; |
125 | | -import org.springdoc.core.properties.SpringDocConfigProperties; |
126 | | -import org.springdoc.core.properties.SwaggerUiConfigParameters; |
| 32 | +import org.springdoc.core.configuration.SpringDocHints.SpringDocRuntimeHints; |
127 | 33 | import org.springdoc.core.properties.SwaggerUiConfigProperties; |
128 | | -import org.springdoc.core.properties.SwaggerUiOAuthProperties; |
129 | | -import org.springdoc.core.providers.WebConversionServiceProvider; |
130 | | -import org.springdoc.core.service.AbstractRequestService; |
131 | | -import org.springdoc.core.service.GenericParameterService; |
132 | | -import org.springdoc.core.service.GenericResponseService; |
133 | | -import org.springdoc.core.service.OpenAPIService; |
134 | | -import org.springdoc.core.service.OperationService; |
135 | | -import org.springdoc.core.service.RequestBodyService; |
136 | | -import org.springdoc.core.service.SecurityService; |
137 | | -import org.springdoc.core.utils.Constants; |
138 | | -import org.springdoc.core.utils.PropertyResolverUtils; |
139 | | -import org.springdoc.ui.AbstractSwaggerWelcome; |
140 | 34 |
|
| 35 | +import org.springframework.aot.hint.RuntimeHints; |
| 36 | +import org.springframework.aot.hint.RuntimeHintsRegistrar; |
141 | 37 | import org.springframework.beans.factory.InitializingBean; |
142 | 38 | import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; |
143 | | -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; |
144 | 39 | import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; |
145 | 40 | import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; |
146 | 41 | import org.springframework.context.annotation.Configuration; |
| 42 | +import org.springframework.context.annotation.ImportRuntimeHints; |
147 | 43 | import org.springframework.context.annotation.Lazy; |
148 | | -import org.springframework.context.annotation.PropertySource; |
149 | 44 | import org.springframework.core.io.ClassPathResource; |
150 | 45 | import org.springframework.core.io.Resource; |
151 | 46 | import org.springframework.core.io.support.PropertiesLoaderUtils; |
152 | | -import org.springframework.nativex.hint.JdkProxyHint; |
153 | | -import org.springframework.nativex.hint.ResourceHint; |
154 | | -import org.springframework.nativex.hint.TypeAccess; |
155 | | -import org.springframework.nativex.hint.TypeHint; |
156 | 47 | import org.springframework.util.AntPathMatcher; |
157 | 48 |
|
158 | 49 | /** |
159 | 50 | * The type Spring doc hints. |
160 | 51 | * @author bnasslahsen |
161 | 52 | */ |
162 | | -@JdkProxyHint(typeNames = "jakarta.servlet.http.HttpServletRequest") |
163 | | -@JdkProxyHint(typeNames = "org.springframework.web.context.request.NativeWebRequest") |
164 | | - |
165 | | -@JdkProxyHint(typeNames = { "org.springframework.web.bind.annotation.RestController", "org.springframework.core.annotation.SynthesizedAnnotation" }) |
166 | | -@JdkProxyHint(typeNames = { "org.springframework.stereotype.Controller", "org.springframework.core.annotation.SynthesizedAnnotation" }) |
167 | | -@JdkProxyHint(typeNames = { "org.springframework.web.bind.annotation.SessionAttribute", "org.springframework.core.annotation.SynthesizedAnnotation" }) |
168 | | -@JdkProxyHint(typeNames = { "org.springframework.web.bind.annotation.RestControllerAdvice", "org.springframework.core.annotation.SynthesizedAnnotation" }) |
169 | | -@JdkProxyHint(typeNames = { "org.springframework.web.bind.annotation.ResponseStatus", "org.springframework.core.annotation.SynthesizedAnnotation" }) |
170 | | -@JdkProxyHint(typeNames = { "org.springframework.web.bind.annotation.ResponseBody", "org.springframework.core.annotation.SynthesizedAnnotation" }) |
171 | | -@JdkProxyHint(typeNames = { "org.springframework.web.bind.annotation.RequestPart", "org.springframework.core.annotation.SynthesizedAnnotation" }) |
172 | | -@JdkProxyHint(typeNames = { "org.springframework.web.bind.annotation.RequestPart", "org.springframework.core.annotation.SynthesizedAnnotation" }) |
173 | | -@JdkProxyHint(typeNames = { "org.springframework.web.bind.annotation.RequestMapping", "org.springframework.core.annotation.SynthesizedAnnotation" }) |
174 | | -@JdkProxyHint(typeNames = { "org.springframework.web.bind.annotation.GetMapping", "org.springframework.core.annotation.SynthesizedAnnotation" }) |
175 | | -@JdkProxyHint(typeNames = { "org.springframework.web.bind.annotation.PostMapping", "org.springframework.core.annotation.SynthesizedAnnotation" }) |
176 | | -@JdkProxyHint(typeNames = { "org.springframework.web.bind.annotation.PutMapping", "org.springframework.core.annotation.SynthesizedAnnotation" }) |
177 | | -@JdkProxyHint(typeNames = { "org.springframework.web.bind.annotation.PatchMapping", "org.springframework.core.annotation.SynthesizedAnnotation" }) |
178 | | -@JdkProxyHint(typeNames = { "org.springframework.web.bind.annotation.DeleteMapping", "org.springframework.core.annotation.SynthesizedAnnotation" }) |
179 | | -@JdkProxyHint(typeNames = { "org.springframework.web.bind.annotation.ControllerAdvice", "org.springframework.core.annotation.SynthesizedAnnotation" }) |
180 | | -@JdkProxyHint(typeNames = { "org.springframework.web.bind.annotation.RequestParam", "org.springframework.core.annotation.SynthesizedAnnotation" }) |
181 | | -@JdkProxyHint(typeNames = { "org.springframework.web.bind.annotation.RequestHeader", "org.springframework.core.annotation.SynthesizedAnnotation" }) |
182 | | -@JdkProxyHint(typeNames = { "org.springframework.web.bind.annotation.RequestBody", "org.springframework.core.annotation.SynthesizedAnnotation" }) |
183 | | -@JdkProxyHint(typeNames = { "org.springframework.web.bind.annotation.PathVariable", "org.springframework.core.annotation.SynthesizedAnnotation" }) |
184 | | -@JdkProxyHint(typeNames = { "org.springframework.web.bind.annotation.ModelAttribute", "org.springframework.core.annotation.SynthesizedAnnotation" }) |
185 | | -@JdkProxyHint(typeNames = { "org.springframework.stereotype.Controller", "org.springframework.core.annotation.SynthesizedAnnotation" }) |
186 | | -@JdkProxyHint(typeNames = { "org.springframework.web.bind.annotation.ControllerAdvice", "org.springframework.core.annotation.SynthesizedAnnotation" }) |
187 | | - |
188 | | -@TypeHint(typeNames = { "org.springdoc.core.conditions.CacheOrGroupedOpenApiCondition$OnCacheDisabled", "io.swagger.v3.oas.models.parameters.Parameter$StyleEnum", |
189 | | - "io.swagger.v3.oas.models.security.SecurityScheme$In", "io.swagger.v3.oas.models.security.SecurityScheme$Type", |
190 | | - "org.springdoc.core.conditions.CacheOrGroupedOpenApiCondition$OnMultipleOpenApiSupportCondition", "org.springdoc.core.properties.SpringDocConfigProperties$GroupConfig", |
191 | | - "org.springdoc.core.properties.SpringDocConfigProperties$Cache", "org.springdoc.core.properties.SpringDocConfigProperties$GroupConfig", |
192 | | - "org.springdoc.core.properties.AbstractSwaggerUiConfigProperties$SwaggerUrl", "org.springdoc.core.properties.AbstractSwaggerUiConfigProperties$Direction", |
193 | | - "org.springdoc.core.properties.AbstractSwaggerUiConfigProperties$SyntaxHighlight", "org.springdoc.core.configuration.SpringDocConfiguration$1", |
194 | | - "org.springdoc.core.configuration.SpringDocConfiguration$OpenApiResourceAdvice", "org.springdoc.core.configuration.SpringDocConfiguration$WebConversionServiceConfiguration", |
195 | | - "org.springdoc.core.properties.SpringDocConfigProperties$Webjars", "org.springdoc.core.properties.SpringDocConfigProperties$ApiDocs" }, |
196 | | - access = { TypeAccess.RESOURCE, TypeAccess.PUBLIC_CLASSES, TypeAccess.DECLARED_CLASSES, TypeAccess.DECLARED_CONSTRUCTORS, TypeAccess.PUBLIC_CONSTRUCTORS, TypeAccess.DECLARED_METHODS, TypeAccess.PUBLIC_METHODS |
197 | | - , TypeAccess.PUBLIC_FIELDS, TypeAccess.DECLARED_FIELDS }) |
198 | | - |
199 | | -@TypeHint(types = { Constants.class, ModelConverter.class, ModelConverters.class }, access = { TypeAccess.RESOURCE, TypeAccess.PUBLIC_CLASSES, TypeAccess.DECLARED_CLASSES, TypeAccess.DECLARED_CONSTRUCTORS, TypeAccess.PUBLIC_CONSTRUCTORS, TypeAccess.DECLARED_METHODS, TypeAccess.PUBLIC_METHODS |
200 | | - , TypeAccess.PUBLIC_FIELDS, TypeAccess.DECLARED_FIELDS }) |
201 | | -@TypeHint(types = { SecurityRequirements.class, SecurityRequirement.class, ApiResponses.class, Callbacks.class, PropertySource.class, ExternalDocumentation.class, Hidden.class, |
202 | | - Operation.class, Parameter.class, Callbacks.class, Extension.class, ExtensionProperty.class, Header.class, Link.class, LinkParameter.class, |
203 | | - ArraySchema.class, Content.class, DiscriminatorMapping.class, Encoding.class, ExampleObject.class, Schema.class, RequestBody.class, ApiResponse.class, |
204 | | - Info.class, Server.class, ServerVariable.class, OpenAPIDefinition.class, Tag.class, SecuritySchemes.class, SecurityScheme.class, SecuritySchemeType.class, |
205 | | - OAuthFlow.class, OAuthFlows.class, OAuthScope.class, License.class, Contact.class }) |
206 | | - |
207 | | -@TypeHint(types = { |
208 | | - AbstractSwaggerWelcome.class, |
209 | | - SchemaPropertyDeprecatingConverter.class, |
210 | | - ResponseSupportConverter.class, |
211 | | - PropertyCustomizingConverter.class, |
212 | | - PolymorphicModelConverter.class, |
213 | | - ModelConverterRegistrar.class, |
214 | | - FileSupportConverter.class, |
215 | | - AdditionalModelsConverter.class, |
216 | | - WebConversionServiceProvider.class, |
217 | | - SwaggerUiOAuthProperties.class, |
218 | | - SwaggerUiConfigProperties.class, |
219 | | - SwaggerUiConfigParameters.class, |
220 | | - SpringDocConfigProperties.class, |
221 | | - AbstractOpenApiResource.class, |
222 | | - AbstractRequestService.class, |
223 | | - GenericParameterService.class, |
224 | | - GenericResponseService.class, |
225 | | - GroupedOpenApi.class, |
226 | | - OpenAPIService.class, |
227 | | - OperationService.class, |
228 | | - PropertyResolverUtils.class, |
229 | | - RequestBodyService.class, |
230 | | - ReturnTypeParser.class, |
231 | | - SecurityService.class, |
232 | | - SpringDocConfiguration.class, |
233 | | - SpecFilter.class, |
234 | | - MediaType.class, |
235 | | - ApiResponsesSerializer.class, |
236 | | - PathsSerializer.class, |
237 | | - ComponentsMixin.class, |
238 | | - ExtensionsMixin.class, |
239 | | - OpenAPIMixin.class, |
240 | | - OperationMixin.class, |
241 | | - SchemaMixin.class, |
242 | | - Schema31Mixin.class, |
243 | | - Components31Mixin.class, |
244 | | - OpenAPI31Mixin.class, |
245 | | - Discriminator31Mixin.class, |
246 | | - Paths.class, |
247 | | - XML.class, |
248 | | - UUIDSchema.class, |
249 | | - PathItem.class, |
250 | | - ServerVariables.class, |
251 | | - OpenAPI.class, |
252 | | - Components.class, |
253 | | - StringSchema.class, |
254 | | - DateTimeSchema.class, |
255 | | - Discriminator.class, |
256 | | - BooleanSchema.class, |
257 | | - FileSchema.class, |
258 | | - IntegerSchema.class, |
259 | | - MapSchema.class, |
260 | | - ObjectSchema.class, |
261 | | - Scopes.class, |
262 | | - DateSchema.class, |
263 | | - ComposedSchema.class, |
264 | | - BinarySchema.class, |
265 | | - ByteArraySchema.class, |
266 | | - EmailSchema.class, |
267 | | - Example.class, |
268 | | - EncodingProperty.class, |
269 | | - NumberSchema.class, |
270 | | - PasswordSchema.class, |
271 | | - CookieParameter.class, |
272 | | - HeaderParameter.class, |
273 | | - PathParameter.class, |
274 | | - QueryParameter.class, |
275 | | - DateSchemaMixin.class, |
276 | | - ExampleMixin.class, |
277 | | - MediaTypeMixin.class, |
278 | | - SortedOpenAPIMixin.class, |
279 | | - SortedSchemaMixin.class, |
280 | | - io.swagger.v3.oas.models.security.SecurityScheme.Type.class, |
281 | | - io.swagger.v3.oas.models.security.SecurityScheme.In.class, |
282 | | - io.swagger.v3.oas.models.media.Encoding.class, |
283 | | - io.swagger.v3.oas.models.info.Contact.class, |
284 | | - io.swagger.v3.oas.models.info.License.class, |
285 | | - io.swagger.v3.oas.models.security.OAuthFlow.class, io.swagger.v3.oas.models.security.OAuthFlows.class, |
286 | | - io.swagger.v3.oas.models.security.SecurityScheme.class, |
287 | | - io.swagger.v3.oas.models.tags.Tag.class, |
288 | | - io.swagger.v3.oas.models.servers.ServerVariable.class, |
289 | | - io.swagger.v3.oas.models.servers.Server.class, |
290 | | - io.swagger.v3.oas.models.security.SecurityRequirement.class, |
291 | | - io.swagger.v3.oas.models.info.Info.class, |
292 | | - io.swagger.v3.oas.models.parameters.RequestBody.class, |
293 | | - io.swagger.v3.oas.models.media.Schema.class, |
294 | | - io.swagger.v3.oas.models.media.Content.class, |
295 | | - io.swagger.v3.oas.models.media.ArraySchema.class, |
296 | | - io.swagger.v3.oas.models.responses.ApiResponse.class, |
297 | | - io.swagger.v3.oas.models.responses.ApiResponses.class, |
298 | | - io.swagger.v3.oas.models.ExternalDocumentation.class, |
299 | | - io.swagger.v3.oas.models.links.LinkParameter.class, |
300 | | - io.swagger.v3.oas.models.links.Link.class, |
301 | | - io.swagger.v3.oas.models.parameters.Parameter.class, |
302 | | - io.swagger.v3.oas.models.Operation.class, |
303 | | - io.swagger.v3.oas.models.headers.Header.class, |
304 | | - org.springframework.core.MethodParameter.class |
305 | | -}, access = { TypeAccess.RESOURCE, TypeAccess.PUBLIC_CLASSES, TypeAccess.DECLARED_CLASSES, TypeAccess.DECLARED_CONSTRUCTORS, TypeAccess.PUBLIC_CONSTRUCTORS, TypeAccess.DECLARED_METHODS, TypeAccess.PUBLIC_METHODS |
306 | | - , TypeAccess.PUBLIC_FIELDS, TypeAccess.DECLARED_FIELDS }) |
307 | | - |
308 | | -@ResourceHint(patterns = "sun.util.resources.LocaleNames", isBundle = true) |
309 | | - |
310 | 53 | @Lazy(false) |
311 | 54 | @ConditionalOnExpression("${springdoc.api-docs.enabled:true} and ${springdoc.enable-native-support:true}") |
312 | | -@ConditionalOnClass(ResourceHint.class) |
313 | 55 | @ConditionalOnWebApplication |
314 | 56 | @Configuration(proxyBeanMethods = false) |
315 | | -@ResourceHint(patterns = SpringDocHints.SPRINGDOC_CONFIG_PROPERTIES) |
316 | 57 | @ConditionalOnBean(SpringDocConfiguration.class) |
| 58 | +@ImportRuntimeHints(SpringDocRuntimeHints.class) |
317 | 59 | public class SpringDocHints implements InitializingBean { |
318 | 60 |
|
| 61 | + static class SpringDocRuntimeHints implements RuntimeHintsRegistrar { |
| 62 | + @Override |
| 63 | + public void registerHints(RuntimeHints hints, ClassLoader classLoader) { |
| 64 | + hints.resources().registerPattern(SpringDocHints.SPRINGDOC_CONFIG_PROPERTIES) |
| 65 | + .registerResourceBundle("sun.util.resources.LocaleNames"); |
| 66 | + } |
| 67 | + } |
| 68 | + |
319 | 69 | /** |
320 | 70 | * The Swagger ui config properties. |
321 | 71 | */ |
|
0 commit comments