Fix AOT processing of @MultipartConfig annotated @WebServlet
Closes gh-37637
This commit is contained in:
		
							parent
							
								
									ae2693b7f1
								
							
						
					
					
						commit
						e314e11985
					
				|  | @ -59,14 +59,18 @@ class WebServletHandler extends ServletComponentHandler { | ||||||
| 				: beanDefinition.getBeanClassName()); | 				: beanDefinition.getBeanClassName()); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	private MultipartConfigElement determineMultipartConfig(AnnotatedBeanDefinition beanDefinition) { | 	private BeanDefinition determineMultipartConfig(AnnotatedBeanDefinition beanDefinition) { | ||||||
| 		Map<String, Object> attributes = beanDefinition.getMetadata() | 		Map<String, Object> attributes = beanDefinition.getMetadata() | ||||||
| 			.getAnnotationAttributes(MultipartConfig.class.getName()); | 			.getAnnotationAttributes(MultipartConfig.class.getName()); | ||||||
| 		if (attributes == null) { | 		if (attributes == null) { | ||||||
| 			return null; | 			return null; | ||||||
| 		} | 		} | ||||||
| 		return new MultipartConfigElement((String) attributes.get("location"), (Long) attributes.get("maxFileSize"), | 		BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(MultipartConfigElement.class); | ||||||
| 				(Long) attributes.get("maxRequestSize"), (Integer) attributes.get("fileSizeThreshold")); | 		builder.addConstructorArgValue(attributes.get("location")); | ||||||
|  | 		builder.addConstructorArgValue(attributes.get("maxFileSize")); | ||||||
|  | 		builder.addConstructorArgValue(attributes.get("maxRequestSize")); | ||||||
|  | 		builder.addConstructorArgValue(attributes.get("fileSizeThreshold")); | ||||||
|  | 		return builder.getBeanDefinition(); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -39,6 +39,7 @@ import org.springframework.javapoet.ClassName; | ||||||
| 
 | 
 | ||||||
| import static org.assertj.core.api.Assertions.assertThat; | import static org.assertj.core.api.Assertions.assertThat; | ||||||
| import static org.assertj.core.api.Assertions.assertThatExceptionOfType; | import static org.assertj.core.api.Assertions.assertThatExceptionOfType; | ||||||
|  | import static org.assertj.core.api.Assertions.assertThatNoException; | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * Tests for {@link ServletComponentScanRegistrar} |  * Tests for {@link ServletComponentScanRegistrar} | ||||||
|  | @ -158,6 +159,16 @@ class ServletComponentScanRegistrarTests { | ||||||
| 			.accepts(generationContext.getRuntimeHints()); | 			.accepts(generationContext.getRuntimeHints()); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	@Test | ||||||
|  | 	void processAheadOfTimeSucceedsForWebServletWithMultipartConfig() { | ||||||
|  | 		AnnotationConfigServletWebServerApplicationContext context = new AnnotationConfigServletWebServerApplicationContext(); | ||||||
|  | 		context.registerBean(ScanServletPackage.class); | ||||||
|  | 		TestGenerationContext generationContext = new TestGenerationContext( | ||||||
|  | 				ClassName.get(getClass().getPackageName(), "TestTarget")); | ||||||
|  | 		assertThatNoException() | ||||||
|  | 			.isThrownBy(() -> new ApplicationContextAotGenerator().processAheadOfTime(context, generationContext)); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	@SuppressWarnings("unchecked") | 	@SuppressWarnings("unchecked") | ||||||
| 	private void compile(GenericApplicationContext context, Consumer<GenericApplicationContext> freshContext) { | 	private void compile(GenericApplicationContext context, Consumer<GenericApplicationContext> freshContext) { | ||||||
| 		TestGenerationContext generationContext = new TestGenerationContext( | 		TestGenerationContext generationContext = new TestGenerationContext( | ||||||
|  | @ -215,4 +226,10 @@ class ServletComponentScanRegistrarTests { | ||||||
| 
 | 
 | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	@Configuration(proxyBeanMethods = false) | ||||||
|  | 	@ServletComponentScan("org.springframework.boot.web.servlet.testcomponents.servlet") | ||||||
|  | 	static class ScanServletPackage { | ||||||
|  | 
 | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue