From d84ca2ba90d27a7c63d7b35a6259b5b9cf341118 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Fri, 17 Sep 2021 09:14:07 +0200 Subject: [PATCH] Jakarta EE 9 migration Upgrades many dependency declarations; removes old EJB 2.x support and outdated Servlet-based integrations (Commons FileUpload, FreeMarker JSP support, Tiles). Closes gh-22093 Closes gh-25354 Closes gh-26185 Closes gh-27423 See gh-27424 --- build.gradle | 120 ++-- integration-tests/integration-tests.gradle | 8 +- ...visorAutoProxyCreatorIntegrationTests.java | 3 +- ...ionScannerJsr330ScopeIntegrationTests.java | 15 +- .../EnvironmentSystemIntegrationTests.java | 19 - ...toProxyCreatorIntegrationTests-context.xml | 2 +- .../AsyncExecutionInterceptor.java | 4 +- spring-aspects/spring-aspects.gradle | 4 +- ...JtaTransactionManagementConfiguration.java | 2 +- .../aspectj/JtaAnnotationTransactionAspect.aj | 8 +- .../aspectj/JtaTransactionAspectsTests.java | 3 +- spring-beans/spring-beans.gradle | 4 +- .../beans/factory/annotation/Autowired.java | 2 +- .../AutowiredAnnotationBeanPostProcessor.java | 14 +- ...nitDestroyAnnotationBeanPostProcessor.java | 8 +- ...erAnnotationAutowireCandidateResolver.java | 6 +- .../factory/config/DependencyDescriptor.java | 2 +- .../config/ProviderCreatingFactoryBean.java | 8 +- .../beans/factory/config/Scope.java | 2 +- .../support/DefaultListableBeanFactory.java | 12 +- .../DefaultListableBeanFactoryTests.java | 3 +- ...njectAnnotationBeanPostProcessorTests.java | 9 +- ...ObjectFactoryCreatingFactoryBeanTests.java | 3 +- .../spring-context-indexer.gradle | 8 +- .../StandardStereotypesProvider.java | 2 +- .../CandidateComponentsIndexerTests.java | 15 +- .../index/sample/cdi/SampleManagedBean.java | 2 +- .../context/index/sample/cdi/SampleNamed.java | 2 +- .../index/sample/cdi/SampleTransactional.java | 2 +- .../index/sample/jpa/SampleConverter.java | 2 +- .../index/sample/jpa/SampleEmbeddable.java | 2 +- .../index/sample/jpa/SampleEntity.java | 2 +- .../sample/jpa/SampleMappedSuperClass.java | 2 +- .../spring-context-support.gradle | 13 +- .../cache/ehcache/EhCacheCache.java | 171 ----- .../cache/ehcache/EhCacheCacheManager.java | 117 ---- .../cache/ehcache/EhCacheFactoryBean.java | 329 --------- .../ehcache/EhCacheManagerFactoryBean.java | 199 ------ .../cache/ehcache/EhCacheManagerUtils.java | 125 ---- .../cache/ehcache/package-info.java | 17 - .../mail/MailSendException.java | 2 +- .../javamail/ConfigurableMimeFileTypeMap.java | 10 +- .../mail/javamail/InternetAddressEditor.java | 6 +- .../mail/javamail/JavaMailSender.java | 8 +- .../mail/javamail/JavaMailSenderImpl.java | 24 +- .../mail/javamail/MimeMailMessage.java | 6 +- .../mail/javamail/MimeMessageHelper.java | 76 +- .../mail/javamail/MimeMessagePreparator.java | 4 +- .../mail/javamail/SmartMimeMessage.java | 10 +- .../commonj/DelegatingTimerListener.java | 58 -- .../scheduling/commonj/DelegatingWork.java | 85 --- .../commonj/ScheduledTimerListener.java | 229 ------ .../commonj/TimerManagerAccessor.java | 192 ----- .../commonj/TimerManagerFactoryBean.java | 165 ----- .../commonj/TimerManagerTaskScheduler.java | 201 ------ .../commonj/WorkManagerTaskExecutor.java | 234 ------- .../scheduling/commonj/package-info.java | 10 - .../ehcache/EhCacheCacheManagerTests.java | 85 --- .../cache/ehcache/EhCacheCacheTests.java | 91 --- .../cache/ehcache/EhCacheSupportTests.java | 287 -------- .../jcache/JCacheEhCache3AnnotationTests.java | 35 - .../cache/jcache/JCacheEhCache3ApiTests.java | 35 - .../jcache/JCacheEhCacheAnnotationTests.java | 2 +- .../cache/jcache/JCacheEhCacheApiTests.java | 2 +- .../mail/javamail/JavaMailSenderTests.java | 23 +- .../BeanValidationPostProcessorTests.java | 155 ----- .../MethodValidationTests.java | 218 ------ .../SpringValidatorAdapterTests.java | 563 --------------- .../ValidatorFactoryTests.java | 505 -------------- spring-context/spring-context.gradle | 24 +- .../AnnotationProcessorBenchmark.java | 3 +- .../AnnotationBeanNameGenerator.java | 10 +- .../AnnotationConfigApplicationContext.java | 2 +- .../annotation/AnnotationConfigUtils.java | 4 +- .../context/annotation/Bean.java | 2 +- .../ClassPathBeanDefinitionScanner.java | 4 +- ...athScanningCandidateComponentProvider.java | 14 +- .../CommonAnnotationBeanPostProcessor.java | 51 +- .../context/annotation/Configuration.java | 2 +- .../Jsr330ScopeMetadataResolver.java | 6 +- .../context/annotation/Lazy.java | 4 +- .../annotation/MBeanExportConfiguration.java | 70 +- .../MBeanExportBeanDefinitionParser.java | 8 +- .../MBeanServerBeanDefinitionParser.java | 37 +- .../weaving/DefaultContextLoadTimeWeaver.java | 17 +- .../AbstractRemoteSlsbInvokerInterceptor.java | 213 ------ .../AbstractSlsbInvokerInterceptor.java | 238 ------- .../ejb/access/EjbAccessException.java | 47 -- .../access/LocalSlsbInvokerInterceptor.java | 179 ----- ...LocalStatelessSessionProxyFactoryBean.java | 116 ---- .../SimpleRemoteSlsbInvokerInterceptor.java | 188 ----- ...emoteStatelessSessionProxyFactoryBean.java | 130 ---- .../ejb/access/package-info.java | 27 - ...lStatelessSessionBeanDefinitionParser.java | 10 +- ...eStatelessSessionBeanDefinitionParser.java | 10 +- .../ejb/config/package-info.java | 2 +- .../weblogic/WebLogicClassLoaderAdapter.java | 117 ---- .../WebLogicClassPreProcessorAdapter.java | 97 --- .../weblogic/WebLogicLoadTimeWeaver.java | 78 --- .../classloading/weblogic/package-info.java | 9 - .../WebSphereClassLoaderAdapter.java | 120 ---- .../WebSphereClassPreDefinePlugin.java | 95 --- .../websphere/WebSphereLoadTimeWeaver.java | 75 -- .../classloading/websphere/package-info.java | 9 - .../WebSphereMBeanServerFactoryBean.java | 105 --- .../jndi/JndiLocatorDelegate.java | 2 +- .../jndi/JndiLocatorSupport.java | 8 +- .../jndi/JndiObjectLocator.java | 2 +- .../jndi/JndiObjectTargetSource.java | 2 +- .../jndi/support/SimpleJndiBeanFactory.java | 2 +- .../scheduling/TaskScheduler.java | 2 +- .../scheduling/annotation/Async.java | 2 +- .../annotation/AsyncAnnotationAdvisor.java | 6 +- .../AsyncAnnotationBeanPostProcessor.java | 4 +- .../scheduling/annotation/EnableAsync.java | 4 +- .../concurrent/ConcurrentTaskExecutor.java | 20 +- .../concurrent/ConcurrentTaskScheduler.java | 18 +- .../DefaultManagedAwareThreadFactory.java | 6 +- .../DefaultManagedTaskExecutor.java | 8 +- .../DefaultManagedTaskScheduler.java | 8 +- .../ExecutorConfigurationSupport.java | 4 +- .../scheduling/concurrent/package-info.java | 2 +- .../stereotype/Repository.java | 2 +- .../validation/ObjectError.java | 6 +- .../validation/SmartValidator.java | 4 +- .../validation/annotation/Validated.java | 4 +- .../annotation/ValidationAnnotationUtils.java | 4 +- .../BeanValidationPostProcessor.java | 12 +- .../beanvalidation/CustomValidatorBean.java | 14 +- .../LocalValidatorFactoryBean.java | 70 +- .../LocaleContextMessageInterpolator.java | 2 +- .../MethodValidationInterceptor.java | 15 +- .../MethodValidationPostProcessor.java | 9 +- .../OptionalValidatorFactoryBean.java | 5 +- .../SpringConstraintValidatorFactory.java | 4 +- .../SpringValidatorAdapter.java | 30 +- .../springframework/ejb/config/spring-jee.xsd | 86 +-- .../AutowiredQualifierFooService.java | 2 +- .../example/scannable/FooServiceImpl.java | 2 +- .../BridgeMethodAutowiringTests.java | 5 +- .../InjectAnnotationAutowireContextTests.java | 9 +- .../annotation/AutoProxyLazyInitTests.java | 3 +- ...ommonAnnotationBeanPostProcessorTests.java | 9 +- ...nClassPostConstructAndAutowiringTests.java | 3 +- .../ConfigurationClassPostProcessorTests.java | 3 +- ...PrimitiveBeanLookupAndAutowiringTests.java | 3 +- .../PropertySourceAnnotationTests.java | 3 +- .../Spr3775InitDestroyLifecycleTests.java | 9 +- .../AutowiredConfigurationTests.java | 3 +- .../ConfigurationClassProcessingTests.java | 5 +- .../configuration/Spr12526Tests.java | 3 +- .../annotation6/Jsr330NamedForScanning.java | 2 +- .../AnnotationDrivenEventListenerTests.java | 5 +- .../LocalSlsbInvokerInterceptorTests.java | 207 ------ ...StatelessSessionProxyFactoryBeanTests.java | 197 ------ ...mpleRemoteSlsbInvokerInterceptorTests.java | 349 ---------- ...StatelessSessionProxyFactoryBeanTests.java | 288 -------- .../config/JeeNamespaceHandlerEventTests.java | 11 +- .../ejb/config/JeeNamespaceHandlerTests.java | 37 +- .../BeanValidationPostProcessorTests.java | 9 +- .../beanvalidation/MethodValidationTests.java | 22 +- .../SpringValidatorAdapterTests.java | 97 ++- .../beanvalidation/ValidatorFactoryTests.java | 19 +- .../ejb/config/jeeNamespaceHandlerTests.xml | 35 +- .../jndi/SimpleNamingContextBuilder.java | 2 +- spring-core/spring-core.gradle | 4 +- .../springframework/core/MethodParameter.java | 2 +- .../AnnotationAwareOrderComparator.java | 8 +- .../core/annotation/Order.java | 4 +- .../core/annotation/OrderUtils.java | 18 +- .../core/io/ContextResource.java | 2 +- .../core/task/SimpleAsyncTaskExecutor.java | 2 +- .../task/support/ExecutorServiceAdapter.java | 4 +- .../AnnotatedElementUtilsTests.java | 2 +- .../AnnotationAwareOrderComparatorTests.java | 3 +- .../annotation/MergedAnnotationsTests.java | 7 +- .../core/annotation/OrderUtilsTests.java | 3 +- .../util/Base64UtilsTests.java | 3 +- spring-jdbc/spring-jdbc.gradle | 2 +- .../DataSourceTransactionManager.java | 4 +- .../datasource/DriverManagerDataSource.java | 4 +- .../LazyConnectionDataSourceProxy.java | 2 +- .../datasource/SimpleDriverDataSource.java | 2 +- .../TransactionAwareDataSourceProxy.java | 4 +- .../WebSphereDataSourceAdapter.java | 204 ------ .../DataSourceJtaTransactionTests.java | 12 +- spring-jms/spring-jms.gradle | 9 +- .../jms/IllegalStateException.java | 4 +- .../jms/InvalidClientIDException.java | 4 +- .../jms/InvalidDestinationException.java | 4 +- .../jms/InvalidSelectorException.java | 4 +- .../org/springframework/jms/JmsException.java | 10 +- .../jms/JmsSecurityException.java | 4 +- .../jms/MessageEOFException.java | 4 +- .../jms/MessageFormatException.java | 4 +- .../jms/MessageNotReadableException.java | 4 +- .../jms/MessageNotWriteableException.java | 4 +- .../jms/ResourceAllocationException.java | 4 +- .../jms/TransactionInProgressException.java | 4 +- .../jms/TransactionRolledBackException.java | 4 +- .../jms/UncategorizedJmsException.java | 4 +- .../jms/annotation/EnableJms.java | 4 +- .../jms/annotation/JmsListener.java | 4 +- .../AbstractJmsListenerContainerFactory.java | 5 +- .../config/AbstractJmsListenerEndpoint.java | 2 +- .../AbstractListenerContainerParser.java | 3 +- .../DefaultJcaListenerContainerFactory.java | 2 +- .../config/JmsListenerContainerParser.java | 3 +- .../jms/config/SimpleJmsListenerEndpoint.java | 2 +- .../jms/connection/CachedMessageConsumer.java | 16 +- .../jms/connection/CachedMessageProducer.java | 18 +- .../connection/CachingConnectionFactory.java | 28 +- .../connection/ChainedExceptionListener.java | 4 +- .../connection/ConnectionFactoryUtils.java | 25 +- .../DelegatingConnectionFactory.java | 28 +- .../jms/connection/JmsResourceHolder.java | 13 +- .../jms/connection/JmsTransactionManager.java | 20 +- .../jms/connection/SessionProxy.java | 6 +- .../connection/SingleConnectionFactory.java | 49 +- .../connection/SmartConnectionFactory.java | 8 +- ...ynchedLocalTransactionFailedException.java | 2 +- ...ransactionAwareConnectionFactoryProxy.java | 36 +- ...erCredentialsConnectionFactoryAdapter.java | 34 +- .../jms/core/BrowserCallback.java | 12 +- .../jms/core/JmsMessageOperations.java | 4 +- .../jms/core/JmsMessagingTemplate.java | 24 +- .../jms/core/JmsOperations.java | 14 +- .../springframework/jms/core/JmsTemplate.java | 66 +- .../jms/core/MessageCreator.java | 10 +- .../jms/core/MessagePostProcessor.java | 8 +- .../jms/core/ProducerCallback.java | 10 +- .../jms/core/SessionCallback.java | 6 +- .../jms/core/support/JmsGatewaySupport.java | 7 +- .../AbstractJmsListeningContainer.java | 16 +- .../AbstractMessageListenerContainer.java | 52 +- ...stractPollingMessageListenerContainer.java | 28 +- .../DefaultMessageListenerContainer.java | 24 +- .../LocallyExposedJmsResourceHolder.java | 2 +- .../listener/MessageListenerContainer.java | 10 +- .../listener/SessionAwareMessageListener.java | 10 +- .../SimpleMessageListenerContainer.java | 20 +- .../listener/SubscriptionNameProvider.java | 2 +- .../AbstractAdaptableMessageListener.java | 53 +- .../jms/listener/adapter/JmsResponse.java | 6 +- .../adapter/MessageListenerAdapter.java | 16 +- .../MessagingMessageListenerAdapter.java | 18 +- .../DefaultJmsActivationSpecFactory.java | 5 +- .../endpoint/JmsActivationSpecConfig.java | 22 +- .../endpoint/JmsActivationSpecFactory.java | 6 +- .../endpoint/JmsMessageEndpointFactory.java | 14 +- .../endpoint/JmsMessageEndpointManager.java | 12 +- .../StandardJmsActivationSpecFactory.java | 22 +- .../jms/support/JmsAccessor.java | 43 +- .../jms/support/JmsHeaderMapper.java | 4 +- .../jms/support/JmsHeaders.java | 28 +- .../jms/support/JmsMessageHeaderAccessor.java | 2 +- .../springframework/jms/support/JmsUtils.java | 73 +- .../jms/support/QosSettings.java | 18 +- .../jms/support/SimpleJmsHeaderMapper.java | 10 +- .../MappingJackson2MessageConverter.java | 17 +- .../MarshallingMessageConverter.java | 15 +- .../converter/MessageConversionException.java | 2 +- .../support/converter/MessageConverter.java | 10 +- .../jms/support/converter/MessageType.java | 12 +- .../converter/MessagingMessageConverter.java | 20 +- .../converter/SimpleMessageConverter.java | 28 +- .../converter/SmartMessageConverter.java | 8 +- .../BeanFactoryDestinationResolver.java | 10 +- .../destination/DestinationResolver.java | 8 +- .../DynamicDestinationResolver.java | 24 +- .../destination/JmsDestinationAccessor.java | 22 +- .../destination/JndiDestinationResolver.java | 11 +- .../springframework/jms/config/spring-jms.xsd | 12 +- .../jca/StubActivationSpec.java | 8 +- .../jca/StubResourceAdapter.java | 13 +- .../jms/StubConnectionFactory.java | 8 +- .../org/springframework/jms/StubQueue.java | 4 +- .../springframework/jms/StubTextMessage.java | 6 +- .../org/springframework/jms/StubTopic.java | 2 +- .../AbstractJmsAnnotationDrivenTests.java | 5 +- .../AnnotationDrivenNamespaceTests.java | 5 +- .../jms/annotation/EnableJmsTests.java | 5 +- ...tenerContainerFactoryIntegrationTests.java | 11 +- .../JmsListenerContainerFactoryTests.java | 9 +- .../jms/config/JmsListenerEndpointTests.java | 3 +- .../jms/config/JmsNamespaceHandlerTests.java | 9 +- .../MethodJmsListenerEndpointTests.java | 19 +- .../SimpleJmsListenerEndpointTests.java | 3 +- .../JmsTransactionManagerTests.java | 15 +- .../SingleConnectionFactoryTests.java | 23 +- .../jms/connection/TestConnection.java | 18 +- .../jms/connection/TestExceptionListener.java | 4 +- .../jms/core/JmsMessagingTemplateTests.java | 59 +- .../jms/core/JmsTemplateTests.java | 50 +- .../jms/core/JmsTemplateTransactedTests.java | 3 +- .../core/support/JmsGatewaySupportTests.java | 3 +- .../DefaultMessageListenerContainerTests.java | 9 +- ...sageListenerContainerIntegrationTests.java | 119 ---- .../SimpleMessageListenerContainerTests.java | 17 +- .../listener/adapter/JmsResponseTests.java | 11 +- .../jms/listener/adapter/MessageDelegate.java | 8 +- .../adapter/MessageListenerAdapterTests.java | 23 +- .../MessagingMessageListenerAdapterTests.java | 51 +- ...msTextMessageReturningMessageDelegate.java | 2 +- .../adapter/ResponsiveMessageDelegate.java | 8 +- .../DefaultJmsActivationSpecFactoryTests.java | 5 +- .../endpoint/StubJmsActivationSpec.java | 2 +- .../StubJmsActivationSpecFactory.java | 4 +- .../jms/support/JmsAccessorTests.java | 3 +- .../JmsMessageHeaderAccessorTests.java | 5 +- .../support/SimpleJmsHeaderMapperTests.java | 95 ++- .../support/SimpleMessageConverterTests.java | 15 +- .../MappingJackson2MessageConverterTests.java | 9 +- .../MarshallingMessageConverterTests.java | 6 +- .../MessagingMessageConverterTests.java | 11 +- .../DynamicDestinationResolverTests.java | 15 +- .../JmsDestinationAccessorTests.java | 3 +- .../JndiDestinationResolverTests.java | 4 +- spring-messaging/spring-messaging.gradle | 16 +- .../converter/JsonbMessageConverter.java | 10 +- .../PayloadMethodArgumentResolver.java | 4 +- .../PayloadMethodArgumentResolver.java | 2 +- .../AbstractMessageBrokerConfiguration.java | 4 +- .../converter/JsonbMessageConverterTests.java | 11 +- .../MarshallingMessageConverterTests.java | 3 +- spring-orm/spring-orm.gradle | 6 +- .../hibernate5/ConfigurableJtaPlatform.java | 15 +- .../HibernateExceptionTranslator.java | 3 +- .../orm/hibernate5/HibernateTemplate.java | 3 +- .../HibernateTransactionManager.java | 2 +- .../hibernate5/LocalSessionFactoryBean.java | 6 +- .../LocalSessionFactoryBuilder.java | 16 +- .../orm/hibernate5/SessionFactoryUtils.java | 2 +- .../orm/hibernate5/SpringSessionContext.java | 7 +- .../support/OpenSessionInViewFilter.java | 9 +- .../jpa/AbstractEntityManagerFactoryBean.java | 40 +- .../orm/jpa/DefaultJpaDialect.java | 6 +- .../orm/jpa/EntityManagerFactoryAccessor.java | 21 +- .../orm/jpa/EntityManagerFactoryInfo.java | 13 +- .../orm/jpa/EntityManagerFactoryUtils.java | 43 +- .../orm/jpa/EntityManagerHolder.java | 4 +- .../orm/jpa/EntityManagerProxy.java | 6 +- .../orm/jpa/ExtendedEntityManagerCreator.java | 31 +- .../springframework/orm/jpa/JpaDialect.java | 14 +- .../JpaObjectRetrievalFailureException.java | 2 +- .../JpaOptimisticLockingFailureException.java | 2 +- .../orm/jpa/JpaTransactionManager.java | 19 +- .../orm/jpa/JpaVendorAdapter.java | 20 +- ...ocalContainerEntityManagerFactoryBean.java | 31 +- .../jpa/LocalEntityManagerFactoryBean.java | 18 +- .../orm/jpa/SharedEntityManagerCreator.java | 25 +- .../ClassFileTransformerAdapter.java | 5 +- .../DefaultPersistenceUnitManager.java | 24 +- .../MutablePersistenceUnitInfo.java | 13 +- .../PersistenceUnitManager.java | 6 +- .../PersistenceUnitReader.java | 6 +- .../SmartPersistenceUnitInfo.java | 4 +- .../SpringPersistenceUnitInfo.java | 2 +- .../jpa/support/AsyncRequestInterceptor.java | 3 +- .../OpenEntityManagerInViewFilter.java | 16 +- .../OpenEntityManagerInViewInterceptor.java | 6 +- ...ersistenceAnnotationBeanPostProcessor.java | 58 +- .../jpa/support/SharedEntityManagerBean.java | 12 +- .../jpa/vendor/AbstractJpaVendorAdapter.java | 8 +- .../orm/jpa/vendor/EclipseLinkJpaDialect.java | 5 +- .../vendor/EclipseLinkJpaVendorAdapter.java | 5 +- .../orm/jpa/vendor/HibernateJpaDialect.java | 5 +- .../HibernateJpaSessionFactoryBean.java | 3 +- .../jpa/vendor/HibernateJpaVendorAdapter.java | 11 +- ...SpringHibernateJpaPersistenceProvider.java | 5 +- ...rEntityManagerFactoryIntegrationTests.java | 9 +- ...AbstractEntityManagerFactoryBeanTests.java | 7 +- ...tEntityManagerFactoryIntegrationTests.java | 6 +- ...nManagedEntityManagerIntegrationTests.java | 7 +- ...rManagedEntityManagerIntegrationTests.java | 9 +- .../orm/jpa/DefaultJpaDialectTests.java | 7 +- .../jpa/EntityManagerFactoryUtilsTests.java | 19 +- .../orm/jpa/JpaTransactionManagerTests.java | 9 +- ...ontainerEntityManagerFactoryBeanTests.java | 19 +- .../LocalEntityManagerFactoryBeanTests.java | 9 +- .../jpa/SharedEntityManagerCreatorTests.java | 13 +- .../orm/jpa/domain/DriversLicense.java | 6 +- .../orm/jpa/domain/Person.java | 20 +- .../orm/jpa/domain/PersonListener.java | 2 +- ...eEntityManagerFactoryIntegrationTests.java | 3 +- ...iEntityManagerFactoryIntegrationTests.java | 5 +- ...rySpringBeanContainerIntegrationTests.java | 3 +- .../PersistenceXmlParsingTests.java | 4 +- .../support/OpenEntityManagerInViewTests.java | 11 +- .../PersistenceContextTransactionTests.java | 13 +- .../support/PersistenceInjectionTests.java | 13 +- .../SharedEntityManagerFactoryTests.java | 5 +- .../orm/jpa/domain/spring.components | 4 +- .../hibernate/hibernate-manager-native.xml | 2 +- spring-oxm/spring-oxm.gradle | 38 +- .../oxm/jaxb/ClassPathJaxb2TypeScanner.java | 10 +- .../oxm/jaxb/Jaxb2Marshaller.java | 50 +- .../oxm/mime/MimeContainer.java | 2 +- .../springframework/oxm/jaxb/Airplane.java | 2 +- .../oxm/jaxb/BinaryObject.java | 8 +- .../oxm/jaxb/Jaxb2MarshallerTests.java | 20 +- .../oxm/jaxb/Jaxb2UnmarshallerTests.java | 6 +- .../springframework/oxm/jaxb/Primitives.java | 3 +- .../oxm/jaxb/StandardClasses.java | 11 +- .../oxm/jaxb/XmlRegObjectFactory.java | 7 +- spring-test/spring-test.gradle | 36 +- .../mock/jndi/SimpleNamingContextBuilder.java | 2 +- .../mock/jndi/package-info.java | 2 +- .../web/DelegatingServletInputStream.java | 6 +- .../web/DelegatingServletOutputStream.java | 6 +- .../mock/web/MockAsyncContext.java | 18 +- .../mock/web/MockBodyContent.java | 8 +- .../springframework/mock/web/MockCookie.java | 2 +- .../mock/web/MockExpressionEvaluator.java | 84 --- .../mock/web/MockFilterChain.java | 16 +- .../mock/web/MockFilterConfig.java | 8 +- .../mock/web/MockHttpServletMapping.java | 4 +- .../mock/web/MockHttpServletRequest.java | 36 +- .../mock/web/MockHttpServletResponse.java | 10 +- .../mock/web/MockHttpSession.java | 12 +- .../mock/web/MockJspWriter.java | 6 +- .../web/MockMultipartHttpServletRequest.java | 6 +- .../mock/web/MockPageContext.java | 35 +- .../springframework/mock/web/MockPart.java | 4 +- .../mock/web/MockRequestDispatcher.java | 11 +- .../mock/web/MockServletConfig.java | 6 +- .../mock/web/MockServletContext.java | 31 +- .../mock/web/MockSessionCookieConfig.java | 6 +- .../mock/web/PassThroughFilterChain.java | 18 +- .../test/context/ContextConfiguration.java | 2 +- .../test/context/ContextLoader.java | 4 +- .../test/context/SmartContextLoader.java | 4 +- .../web/AbstractGenericWebContextLoader.java | 3 +- .../web/ServletTestExecutionListener.java | 3 +- .../web/socket/MockServerContainer.java | 16 +- .../MockServerContainerContextCustomizer.java | 6 +- ...rverContainerContextCustomizerFactory.java | 2 +- .../test/util/ReflectionTestUtils.java | 8 +- .../client/match/ContentRequestMatchers.java | 72 +- .../test/web/servlet/MockMvc.java | 14 +- .../web/servlet/MockMvcBuilderSupport.java | 4 +- .../test/web/servlet/RequestBuilder.java | 2 +- .../web/servlet/TestDispatcherServlet.java | 8 +- .../client/AbstractMockMvcServerSpec.java | 2 +- .../servlet/client/MockMvcHttpConnector.java | 5 +- .../servlet/client/MockMvcWebTestClient.java | 2 +- .../htmlunit/HtmlUnitRequestBuilder.java | 9 +- .../htmlunit/MockMvcWebConnection.java | 10 +- .../MockHttpServletRequestBuilder.java | 14 +- ...ockMultipartHttpServletRequestBuilder.java | 4 +- .../request/MockMvcRequestBuilders.java | 2 +- .../servlet/result/ContentResultMatchers.java | 2 +- .../servlet/result/CookieResultMatchers.java | 3 +- .../servlet/result/PrintingResultHandler.java | 6 +- .../servlet/result/RequestResultMatchers.java | 5 +- .../servlet/setup/AbstractMockMvcBuilder.java | 4 +- .../setup/ConfigurableMockMvcBuilder.java | 2 +- .../servlet/setup/DefaultMockMvcBuilder.java | 2 +- .../web/servlet/setup/MockMvcBuilders.java | 2 +- .../setup/PatternMappingFilterProxy.java | 14 +- .../setup/SharedHttpSessionConfigurer.java | 2 +- .../setup/StandaloneMockMvcBuilder.java | 2 +- .../setup/StubWebApplicationContext.java | 2 +- .../web/servlet/MockHttpServletRequestDsl.kt | 2 +- .../MockMultipartHttpServletRequestDsl.kt | 2 +- .../mock/web/MockFilterChainTests.java | 15 +- .../mock/web/MockHttpServletRequestTests.java | 3 +- .../web/MockHttpServletResponseTests.java | 5 +- .../mock/web/MockHttpSessionTests.java | 5 +- .../mock/web/MockPageContextTests.java | 3 +- .../mock/web/MockServletContextTests.java | 7 +- .../groovy/GroovySpringContextTests.java | 3 +- .../web/ControllerIntegrationTests.java | 3 +- .../web/DispatcherWacRootWacEarTests.java | 3 +- ...TransactionalJUnit4SpringContextTests.java | 3 +- .../SpringJUnit4ClassRunnerAppCtxTests.java | 7 +- .../orm/HibernateSessionFlushingTests.java | 3 +- .../junit4/spr4868/Jsr250LifecycleTests.java | 5 +- .../context/junit4/spr4868/LifecycleBean.java | 5 +- .../context/junit4/spr8849/TestClass1.java | 2 +- .../context/junit4/spr8849/TestClass2.java | 2 +- .../context/junit4/spr8849/TestClass3.java | 2 +- .../context/junit4/spr8849/TestClass4.java | 2 +- .../context/junit4/spr9051/LifecycleBean.java | 2 +- ...TransactionalTestNGSpringContextTests.java | 3 +- .../ejb/AbstractEjbTxDaoTestNGTests.java | 7 +- .../web/TestNGSpringContextWebTests.java | 3 +- .../ejb/AbstractEjbTxDaoTests.java | 7 +- .../ejb/dao/AbstractEjbTxTestEntityDao.java | 6 +- .../ejb/dao/RequiredEjbTxTestEntityDao.java | 8 +- .../dao/RequiresNewEjbTxTestEntityDao.java | 8 +- .../transaction/ejb/model/TestEntity.java | 8 +- .../context/web/AbstractBasicWacTests.java | 3 +- .../web/JUnit4SpringContextWebTests.java | 3 +- .../context/web/ServletContextAwareBean.java | 2 +- ...ervletServerContainerFactoryBeanTests.java | 3 +- .../test/util/subpackage/Component.java | 4 +- .../org/springframework/test/web/Person.java | 4 +- .../match/ContentRequestMatchersTests.java | 11 +- .../match/MultipartRequestMatchersTests.java | 4 +- ...ontentRequestMatchersIntegrationTests.java | 11 +- .../XpathRequestMatchersIntegrationTests.java | 11 +- .../web/reactive/server/samples/Person.java | 3 +- .../server/samples/XmlContentTests.java | 9 +- .../web/servlet/htmlunit/HelloController.java | 2 +- .../htmlunit/HtmlUnitRequestBuilderTests.java | 9 +- .../MockMvcConnectionBuilderSupportTests.java | 3 +- .../MockMvcWebClientBuilderTests.java | 9 +- .../htmlunit/MockWebResponseBuilderTests.java | 3 +- .../MockMvcHtmlUnitDriverBuilderTests.java | 3 +- .../MockHttpServletRequestBuilderTests.java | 5 +- ...ltipartHttpServletRequestBuilderTests.java | 3 +- .../result/PrintingResultHandlerTests.java | 5 +- .../client/context/JavaConfigTests.java | 24 +- .../client/context/WebAppResourceTests.java | 12 +- .../client/context/XmlConfigTests.java | 10 +- .../client/standalone/FilterTests.java | 25 +- .../standalone/MultipartControllerTests.java | 13 +- .../client/standalone/RedirectTests.java | 3 +- .../client/standalone/ResponseBodyTests.java | 3 +- .../PrintingResultHandlerSmokeTests.java | 5 +- .../resultmatches/ModelAssertionTests.java | 3 +- .../XmlContentAssertionTests.java | 11 +- .../resultmatches/XpathAssertionTests.java | 11 +- .../samples/context/JavaConfigTests.java | 25 +- .../samples/context/WebAppResourceTests.java | 10 +- .../samples/context/XmlConfigTests.java | 10 +- ...stAttributesRequestContextHolderTests.java | 7 +- .../spr/RequestContextHolderTests.java | 9 +- .../samples/standalone/FilterTests.java | 27 +- .../standalone/MultipartControllerTests.java | 15 +- .../samples/standalone/RedirectTests.java | 3 +- ...PrintingResultHandlerIntegrationTests.java | 5 +- .../PrintingResultHandlerSmokeTests.java | 5 +- .../resultmatchers/ModelAssertionTests.java | 3 +- .../XmlContentAssertionTests.java | 11 +- .../resultmatchers/XpathAssertionTests.java | 11 +- ...ConditionalDelegatingFilterProxyTests.java | 13 +- .../servlet/setup/SharedHttpSessionTests.java | 3 +- .../setup/StandaloneMockMvcBuilderTests.java | 11 +- .../samples/context/servlet-context.xml | 23 +- spring-tx/spring-tx.gradle | 11 +- .../jca/cci/CannotCreateRecordException.java | 45 -- .../cci/CannotGetCciConnectionException.java | 45 -- .../CciOperationNotSupportedException.java | 44 -- .../cci/InvalidResultSetAccessException.java | 49 -- .../cci/RecordTypeNotSupportedException.java | 45 -- .../CciLocalTransactionManager.java | 297 -------- .../connection/ConnectionFactoryUtils.java | 220 ------ .../jca/cci/connection/ConnectionHolder.java | 53 -- ...onnectionSpecConnectionFactoryAdapter.java | 144 ---- .../DelegatingConnectionFactory.java | 118 ---- .../connection/NotSupportedRecordFactory.java | 57 -- .../connection/SingleConnectionFactory.java | 264 ------- ...ransactionAwareConnectionFactoryProxy.java | 171 ----- .../jca/cci/connection/package-info.java | 11 - .../jca/cci/core/CciOperations.java | 130 ---- .../jca/cci/core/CciTemplate.java | 461 ------------ .../jca/cci/core/ConnectionCallback.java | 83 --- .../jca/cci/core/InteractionCallback.java | 84 --- .../jca/cci/core/RecordCreator.java | 68 -- .../jca/cci/core/RecordExtractor.java | 70 -- .../jca/cci/core/package-info.java | 10 - .../jca/cci/core/support/CciDaoSupport.java | 147 ---- .../jca/cci/core/support/CommAreaRecord.java | 107 --- .../jca/cci/core/support/package-info.java | 10 - .../jca/cci/object/EisOperation.java | 99 --- .../cci/object/MappingCommAreaOperation.java | 100 --- .../cci/object/MappingRecordOperation.java | 157 ----- .../jca/cci/object/SimpleRecordOperation.java | 87 --- .../jca/cci/object/package-info.java | 13 - .../springframework/jca/cci/package-info.java | 12 - .../jca/context/BootstrapContextAware.java | 47 -- .../BootstrapContextAwareProcessor.java | 64 -- .../ResourceAdapterApplicationContext.java | 66 -- .../context/SpringContextResourceAdapter.java | 260 ------- .../jca/context/package-info.java | 10 - .../AbstractMessageEndpointFactory.java | 20 +- .../GenericMessageEndpointFactory.java | 18 +- .../GenericMessageEndpointManager.java | 28 +- .../support/LocalConnectionFactoryBean.java | 24 +- .../support/ResourceAdapterFactoryBean.java | 22 +- .../jca/support/SimpleBootstrapContext.java | 16 +- .../jca/work/DelegatingWork.java | 69 -- .../jca/work/SimpleTaskWorkManager.java | 257 ------- .../jca/work/WorkManagerTaskExecutor.java | 337 --------- .../jca/work/package-info.java | 10 - .../transaction/TransactionDefinition.java | 8 +- .../AnnotationTransactionAttributeSource.java | 12 +- .../Ejb3TransactionAnnotationParser.java | 12 +- .../JtaTransactionAnnotationParser.java | 8 +- .../transaction/annotation/Propagation.java | 8 +- .../TransactionAnnotationParser.java | 4 +- ...actionManagementConfigurationSelector.java | 2 +- .../transaction/annotation/Transactional.java | 2 +- .../AnnotationDrivenBeanDefinitionParser.java | 2 +- ...ransactionManagerBeanDefinitionParser.java | 13 +- .../JtaTransactionManagerFactoryBean.java | 62 +- .../interceptor/RollbackRuleAttribute.java | 2 +- .../JtaAfterCompletionSynchronization.java | 4 +- .../jta/JtaTransactionManager.java | 91 ++- .../transaction/jta/JtaTransactionObject.java | 10 +- .../jta/ManagedTransactionAdapter.java | 19 +- .../jta/SimpleTransactionFactory.java | 16 +- .../jta/SpringJtaSynchronizationAdapter.java | 23 +- .../transaction/jta/TransactionFactory.java | 16 +- .../jta/UserTransactionAdapter.java | 18 +- .../jta/WebLogicJtaTransactionManager.java | 366 ---------- .../jta/WebSphereUowTransactionManager.java | 423 ----------- .../AbstractPlatformTransactionManager.java | 4 +- .../support/SmartTransactionObject.java | 4 +- ...tenceExceptionTranslationAdvisorTests.java | 3 +- ...xceptionTranslationPostProcessorTests.java | 3 +- .../jca/cci/CciLocalTransactionTests.java | 132 ---- .../jca/cci/CciTemplateTests.java | 545 --------------- .../jca/cci/EisOperationTests.java | 217 ------ .../LocalConnectionFactoryBeanTests.java | 5 +- .../JndiJtaTransactionManagerTests.java | 9 +- .../JtaTransactionManagerTests.java | 21 +- .../transaction/MockJtaTransaction.java | 7 +- ...tationTransactionAttributeSourceTests.java | 27 +- .../transaction/jta/MockUOWManager.java | 132 ---- .../WebSphereUowTransactionManagerTests.java | 656 ------------------ ...aTransactionManagerSerializationTests.java | 5 +- spring-web/spring-web.gradle | 36 +- .../reactive/JettyClientHttpRequest.java | 11 +- .../reactive/JettyClientHttpResponse.java | 60 +- .../client/reactive/JettyHeadersAdapter.java | 40 +- .../http/codec/ServerCodecConfigurer.java | 9 +- .../SynchronossPartHttpMessageReader.java | 597 ---------------- .../http/codec/support/BaseDefaultCodecs.java | 13 +- .../http/codec/xml/Jaxb2XmlDecoder.java | 20 +- .../http/codec/xml/Jaxb2XmlEncoder.java | 15 +- .../http/codec/xml/JaxbContextContainer.java | 8 +- .../converter/FormHttpMessageConverter.java | 4 +- .../json/JsonbHttpMessageConverter.java | 10 +- ...lEncompassingFormHttpMessageConverter.java | 4 +- .../AbstractJaxb2HttpMessageConverter.java | 8 +- .../Jaxb2CollectionHttpMessageConverter.java | 11 +- .../Jaxb2RootElementHttpMessageConverter.java | 22 +- .../ServletServerHttpAsyncRequestControl.java | 10 +- .../http/server/ServletServerHttpRequest.java | 4 +- .../server/ServletServerHttpResponse.java | 2 +- .../server/reactive/JettyHeadersAdapter.java | 40 +- .../reactive/JettyHttpHandlerAdapter.java | 74 +- .../reactive/ServletHttpHandlerAdapter.java | 27 +- .../reactive/ServletServerHttpRequest.java | 19 +- .../reactive/ServletServerHttpResponse.java | 13 +- .../reactive/TomcatHttpHandlerAdapter.java | 17 +- .../web/HttpMediaTypeException.java | 2 +- .../web/HttpRequestHandler.java | 10 +- ...ttpRequestMethodNotSupportedException.java | 2 +- .../web/HttpSessionRequiredException.java | 2 +- .../SpringServletContainerInitializer.java | 10 +- .../web/WebApplicationInitializer.java | 4 +- ...ractMappingContentNegotiationStrategy.java | 2 +- .../ContentNegotiationManagerFactoryBean.java | 2 +- ...thExtensionContentNegotiationStrategy.java | 2 +- ...thExtensionContentNegotiationStrategy.java | 2 +- .../web/bind/ServletRequestDataBinder.java | 6 +- ...ServletRequestParameterPropertyValues.java | 2 +- .../web/bind/ServletRequestUtils.java | 2 +- ...sfiedServletRequestParameterException.java | 2 +- .../web/bind/annotation/ControllerAdvice.java | 2 +- .../web/bind/annotation/CookieValue.java | 4 +- .../web/bind/annotation/ExceptionHandler.java | 6 +- .../web/bind/annotation/RequestMapping.java | 2 +- .../web/bind/annotation/RequestPart.java | 2 +- .../web/bind/annotation/ResponseStatus.java | 8 +- .../web/bind/annotation/SessionAttribute.java | 2 +- .../SpringWebConstraintValidatorFactory.java | 4 +- .../bind/support/WebRequestDataBinder.java | 4 +- .../web/client/RestTemplate.java | 4 +- .../AbstractContextLoaderInitializer.java | 5 +- .../ConfigurableWebApplicationContext.java | 6 +- .../context/ConfigurableWebEnvironment.java | 4 +- .../web/context/ContextCleanupListener.java | 7 +- .../web/context/ContextLoader.java | 3 +- .../web/context/ContextLoaderListener.java | 6 +- .../web/context/ServletConfigAware.java | 2 +- .../web/context/ServletContextAware.java | 2 +- .../web/context/WebApplicationContext.java | 16 +- .../DestructionCallbackBindingListener.java | 4 +- .../request/FacesRequestAttributes.java | 17 +- .../web/context/request/FacesWebRequest.java | 8 +- .../web/context/request/NativeWebRequest.java | 8 +- .../context/request/RequestContextHolder.java | 18 +- .../request/RequestContextListener.java | 8 +- .../request/ServletRequestAttributes.java | 10 +- .../context/request/ServletWebRequest.java | 8 +- .../web/context/request/WebRequest.java | 26 +- .../async/StandardServletAsyncWebRequest.java | 10 +- .../request/async/WebAsyncManager.java | 5 +- .../context/request/async/WebAsyncUtils.java | 6 +- ...tractRefreshableWebApplicationContext.java | 4 +- ...AnnotationConfigWebApplicationContext.java | 2 +- .../ContextExposingHttpServletRequest.java | 4 +- .../support/GenericWebApplicationContext.java | 4 +- .../support/HttpRequestHandlerServlet.java | 8 +- .../context/support/LiveBeansViewServlet.java | 8 +- .../context/support/RequestHandledEvent.java | 2 +- .../support/ServletConfigPropertySource.java | 2 +- .../ServletContextAttributeExporter.java | 5 +- .../ServletContextAttributeFactoryBean.java | 2 +- .../support/ServletContextAwareProcessor.java | 4 +- .../support/ServletContextLiveBeansView.java | 2 +- .../ServletContextParameterFactoryBean.java | 2 +- .../support/ServletContextPropertySource.java | 2 +- .../support/ServletContextResource.java | 22 +- .../support/ServletContextResourceLoader.java | 2 +- ...ServletContextResourcePatternResolver.java | 9 +- .../context/support/ServletContextScope.java | 2 +- .../support/SpringBeanAutowiringSupport.java | 5 +- .../support/StandardServletEnvironment.java | 4 +- .../support/StaticWebApplicationContext.java | 4 +- .../support/WebApplicationContextUtils.java | 16 +- .../support/WebApplicationObjectSupport.java | 8 +- .../web/cors/CorsConfigurationSource.java | 2 +- .../web/cors/CorsProcessor.java | 4 +- .../springframework/web/cors/CorsUtils.java | 2 +- .../web/cors/DefaultCorsProcessor.java | 5 +- .../cors/UrlBasedCorsConfigurationSource.java | 2 +- .../filter/AbstractRequestLoggingFilter.java | 10 +- .../web/filter/CharacterEncodingFilter.java | 18 +- .../filter/CommonsRequestLoggingFilter.java | 2 +- .../web/filter/CompositeFilter.java | 12 +- .../web/filter/CorsFilter.java | 12 +- .../web/filter/DelegatingFilterProxy.java | 24 +- .../web/filter/FormContentFilter.java | 10 +- .../web/filter/ForwardedHeaderFilter.java | 12 +- .../web/filter/GenericFilterBean.java | 25 +- .../web/filter/HiddenHttpMethodFilter.java | 12 +- .../web/filter/HttpPutFormContentFilter.java | 12 +- .../web/filter/OncePerRequestFilter.java | 24 +- .../web/filter/RelativeRedirectFilter.java | 8 +- .../RelativeRedirectResponseWrapper.java | 4 +- .../web/filter/RequestContextFilter.java | 8 +- .../ServletContextRequestLoggingFilter.java | 4 +- .../web/filter/ServletRequestPathFilter.java | 12 +- .../web/filter/ShallowEtagHeaderFilter.java | 14 +- .../web/jsf/DecoratingNavigationHandler.java | 8 +- .../jsf/DelegatingNavigationHandlerProxy.java | 4 +- .../DelegatingPhaseListenerMulticaster.java | 8 +- .../web/jsf/FacesContextUtils.java | 4 +- .../web/jsf/el/SpringBeanFacesELResolver.java | 10 +- .../WebApplicationContextFacesELResolver.java | 9 +- ...tractNamedValueMethodArgumentResolver.java | 2 +- ...ExpressionValueMethodArgumentResolver.java | 2 +- .../ModelAttributeMethodProcessor.java | 11 +- ...RequestParamMapMethodArgumentResolver.java | 4 +- .../RequestParamMethodArgumentResolver.java | 6 +- .../web/multipart/MultipartFile.java | 2 +- .../MultipartHttpServletRequest.java | 10 +- .../web/multipart/MultipartResolver.java | 10 +- .../commons/CommonsFileUploadSupport.java | 374 ---------- .../commons/CommonsMultipartFile.java | 242 ------- .../commons/CommonsMultipartResolver.java | 237 ------- .../web/multipart/commons/package-info.java | 10 - .../AbstractMultipartHttpServletRequest.java | 4 +- .../DefaultMultipartHttpServletRequest.java | 2 +- .../MissingServletRequestPartException.java | 2 +- .../multipart/support/MultipartFilter.java | 8 +- .../support/MultipartResolutionDelegate.java | 4 +- .../RequestPartServletServerHttpRequest.java | 4 +- .../StandardMultipartHttpServletRequest.java | 6 +- .../StandardServletMultipartResolver.java | 11 +- .../support/StandardServletPartUtils.java | 4 +- .../AbstractReactiveWebInitializer.java | 10 +- .../util/ContentCachingRequestWrapper.java | 10 +- .../util/ContentCachingResponseWrapper.java | 10 +- .../web/util/CookieGenerator.java | 17 +- .../web/util/HttpSessionMutexListener.java | 6 +- .../web/util/IntrospectorCleanupListener.java | 4 +- .../web/util/NestedServletException.java | 2 +- .../web/util/ServletContextPropertyUtils.java | 2 +- .../web/util/ServletRequestPathUtils.java | 10 +- .../springframework/web/util/TagUtils.java | 14 +- .../web/util/UrlPathHelper.java | 25 +- .../web/util/WebAppRootListener.java | 4 +- .../springframework/web/util/WebUtils.java | 92 +-- .../MultipartHttpMessageWriterTests.java | 9 +- ...SynchronossPartHttpMessageReaderTests.java | 237 ------- .../http/codec/xml/Jaxb2XmlDecoderTests.java | 2 +- .../http/codec/xml/Jaxb2XmlEncoderTests.java | 7 +- .../http/codec/xml/jaxb/XmlRootElement.java | 2 +- .../xml/jaxb/XmlRootElementWithName.java | 2 +- .../XmlRootElementWithNameAndNamespace.java | 2 +- .../http/codec/xml/jaxb/XmlType.java | 2 +- .../http/codec/xml/jaxb/XmlTypeWithName.java | 2 +- .../xml/jaxb/XmlTypeWithNameAndNamespace.java | 2 +- .../http/codec/xml/jaxb/package-info.java | 2 +- .../FormHttpMessageConverterTests.java | 26 +- .../json/JsonbHttpMessageConverterTests.java | 6 +- ...b2CollectionHttpMessageConverterTests.java | 8 +- ...2RootElementHttpMessageConverterTests.java | 17 +- .../ErrorHandlerIntegrationTests.java | 4 +- .../server/reactive/HeadersAdaptersTests.java | 2 +- .../reactive/ServerHttpRequestTests.java | 9 +- .../WebRequestDataBinderIntegrationTests.java | 11 +- .../ContextLoaderInitializerTests.java | 5 +- .../RequestAndSessionScopedBeanTests.java | 9 +- .../request/RequestContextListenerTests.java | 3 +- .../ServletRequestAttributesTests.java | 5 +- .../request/ServletWebRequestTests.java | 13 +- .../WebApplicationContextScopeTests.java | 3 +- .../StandardServletAsyncWebRequestTests.java | 3 +- .../async/WebAsyncManagerErrorTests.java | 3 +- .../request/async/WebAsyncManagerTests.java | 3 +- .../async/WebAsyncManagerTimeoutTests.java | 3 +- .../web/context/support/Spr8510Tests.java | 3 +- .../web/cors/DefaultCorsProcessorTests.java | 3 +- .../web/cors/reactive/CorsWebFilterTests.java | 3 +- .../filter/CharacterEncodingFilterTests.java | 9 +- .../web/filter/CompositeFilterTests.java | 15 +- .../ContentCachingResponseWrapperTests.java | 3 +- .../web/filter/CorsFilterTests.java | 5 +- .../filter/DelegatingFilterProxyTests.java | 15 +- .../filter/ForwardedHeaderFilterTests.java | 15 +- .../filter/HiddenHttpMethodFilterTests.java | 11 +- .../web/filter/OncePerRequestFilterTests.java | 13 +- .../filter/RelativeRedirectFilterTests.java | 5 +- .../web/filter/RequestContextFilterTests.java | 9 +- .../web/filter/RequestLoggingFilterTests.java | 7 +- .../filter/ShallowEtagHeaderFilterTests.java | 5 +- .../jsf/DelegatingNavigationHandlerTests.java | 5 +- .../web/jsf/DelegatingPhaseListenerTests.java | 9 +- .../web/jsf/MockFacesContext.java | 20 +- .../web/jsf/MockLifecycle.java | 8 +- .../web/method/ControllerAdviceBeanTests.java | 3 +- ...ookieValueMethodArgumentResolverTests.java | 3 +- .../ExceptionHandlerMethodResolverTests.java | 5 +- ...stParamMapMethodArgumentResolverTests.java | 3 +- ...questParamMethodArgumentResolverTests.java | 3 +- .../CommonsMultipartResolverTests.java | 618 ----------------- ...uestPartServletServerHttpRequestTests.java | 5 +- .../util/ServletRequestPathUtilsTests.java | 3 +- .../web/util/TagUtilsTests.java | 7 +- .../web/util/WebUtilsTests.java | 3 +- .../servlet/DelegatingServletInputStream.java | 6 +- .../DelegatingServletOutputStream.java | 6 +- .../testfixture/servlet/MockAsyncContext.java | 18 +- .../testfixture/servlet/MockBodyContent.java | 8 +- .../web/testfixture/servlet/MockCookie.java | 2 +- .../servlet/MockExpressionEvaluator.java | 84 --- .../testfixture/servlet/MockFilterChain.java | 16 +- .../testfixture/servlet/MockFilterConfig.java | 8 +- .../servlet/MockHttpServletMapping.java | 4 +- .../servlet/MockHttpServletRequest.java | 38 +- .../servlet/MockHttpServletResponse.java | 10 +- .../testfixture/servlet/MockHttpSession.java | 12 +- .../testfixture/servlet/MockJspWriter.java | 6 +- .../MockMultipartHttpServletRequest.java | 6 +- .../testfixture/servlet/MockPageContext.java | 35 +- .../web/testfixture/servlet/MockPart.java | 4 +- .../servlet/MockRequestDispatcher.java | 11 +- .../servlet/MockServletConfig.java | 6 +- .../servlet/MockServletContext.java | 31 +- .../servlet/MockSessionCookieConfig.java | 6 +- .../servlet/PassThroughFilterChain.java | 18 +- .../web/testfixture/xml/Pojo.java | 2 +- spring-webflux/spring-webflux.gradle | 20 +- .../config/WebFluxConfigurationSupport.java | 2 +- .../ModelAttributeMethodArgumentResolver.java | 2 +- .../RequestBodyMethodArgumentResolver.java | 2 +- .../reactive/result/view/RedirectView.java | 2 +- .../Jetty10WebSocketHandlerAdapter.java | 146 ---- .../adapter/JettyWebSocketHandlerAdapter.java | 6 +- .../StandardWebSocketHandlerAdapter.java | 10 +- .../adapter/StandardWebSocketSession.java | 13 +- .../adapter/TomcatWebSocketSession.java | 5 +- .../socket/client/JettyWebSocketClient.java | 113 +-- .../client/StandardWebSocketClient.java | 15 +- .../socket/client/TomcatWebSocketClient.java | 5 +- .../support/HandshakeWebSocketService.java | 8 +- .../upgrade/DefaultServerEndpointConfig.java | 14 +- .../Jetty10RequestUpgradeStrategy.java | 158 ----- .../upgrade/JettyRequestUpgradeStrategy.java | 178 ++--- .../upgrade/TomcatRequestUpgradeStrategy.java | 21 +- .../WebFluxConfigurationSupportTests.java | 3 +- .../function/BodyExtractorsTests.java | 6 +- .../MessageReaderArgumentResolverTests.java | 3 +- ...lAttributeMethodArgumentResolverTests.java | 3 +- ...pingMessageConversionIntegrationTests.java | 5 +- spring-webmvc/spring-webmvc.gradle | 30 +- .../web/servlet/AsyncHandlerInterceptor.java | 6 +- .../web/servlet/DispatcherServlet.java | 13 +- .../web/servlet/FlashMapManager.java | 4 +- .../web/servlet/FrameworkServlet.java | 22 +- .../web/servlet/HandlerAdapter.java | 4 +- .../web/servlet/HandlerExceptionResolver.java | 4 +- .../web/servlet/HandlerExecutionChain.java | 5 +- .../web/servlet/HandlerInterceptor.java | 6 +- .../web/servlet/HandlerMapping.java | 4 +- .../web/servlet/HttpServletBean.java | 9 +- .../web/servlet/LocaleContextResolver.java | 4 +- .../web/servlet/LocaleResolver.java | 4 +- .../ModelAndViewDefiningException.java | 2 +- .../web/servlet/NoHandlerFoundException.java | 6 +- .../servlet/RequestToViewNameTranslator.java | 4 +- .../web/servlet/ThemeResolver.java | 4 +- .../org/springframework/web/servlet/View.java | 4 +- .../AnnotationDrivenBeanDefinitionParser.java | 4 +- .../servlet/config/MvcNamespaceHandler.java | 3 +- .../TilesConfigurerBeanDefinitionParser.java | 81 --- .../ViewResolversBeanDefinitionParser.java | 7 +- .../ContentNegotiationConfigurer.java | 4 +- .../DefaultServletHandlerConfigurer.java | 2 +- .../annotation/ResourceHandlerRegistry.java | 2 +- .../annotation/ViewResolverRegistry.java | 25 - .../WebMvcConfigurationSupport.java | 12 +- .../function/AbstractServerResponse.java | 8 +- .../function/DefaultAsyncServerResponse.java | 9 +- .../DefaultEntityResponseBuilder.java | 11 +- .../DefaultRenderingResponseBuilder.java | 6 +- .../function/DefaultServerRequest.java | 14 +- .../function/DefaultServerRequestBuilder.java | 14 +- .../DefaultServerResponseBuilder.java | 6 +- .../web/servlet/function/EntityResponse.java | 2 +- .../function/ErrorHandlingServerResponse.java | 7 +- .../servlet/function/RenderingResponse.java | 2 +- .../servlet/function/RequestPredicates.java | 11 +- .../web/servlet/function/ServerRequest.java | 10 +- .../web/servlet/function/ServerResponse.java | 9 +- .../servlet/function/SseServerResponse.java | 8 +- .../support/HandlerFunctionAdapter.java | 7 +- .../support/RouterFunctionMapping.java | 2 +- .../AbstractHandlerExceptionResolver.java | 5 +- .../handler/AbstractHandlerMapping.java | 7 +- ...bstractHandlerMethodExceptionResolver.java | 4 +- .../handler/AbstractHandlerMethodMapping.java | 4 +- .../handler/AbstractUrlHandlerMapping.java | 4 +- .../ConversionServiceExposingInterceptor.java | 6 +- .../handler/DispatcherServletWebRequest.java | 4 +- .../HandlerExceptionResolverComposite.java | 4 +- .../handler/HandlerMappingIntrospector.java | 4 +- .../servlet/handler/MappedInterceptor.java | 4 +- .../handler/MatchableHandlerMapping.java | 2 +- .../PathPatternMatchableHandlerMapping.java | 2 +- .../SimpleMappingExceptionResolver.java | 6 +- .../handler/SimpleServletHandlerAdapter.java | 10 +- .../handler/SimpleServletPostProcessor.java | 14 +- .../UserRoleAuthorizationInterceptor.java | 10 +- .../WebRequestHandlerInterceptorAdapter.java | 4 +- .../i18n/AbstractLocaleContextResolver.java | 4 +- .../i18n/AcceptHeaderLocaleResolver.java | 6 +- .../servlet/i18n/CookieLocaleResolver.java | 8 +- .../web/servlet/i18n/FixedLocaleResolver.java | 4 +- .../servlet/i18n/LocaleChangeInterceptor.java | 7 +- .../servlet/i18n/SessionLocaleResolver.java | 6 +- .../web/servlet/mvc/AbstractController.java | 8 +- .../mvc/AbstractUrlViewController.java | 4 +- .../web/servlet/mvc/Controller.java | 4 +- .../mvc/HttpRequestHandlerAdapter.java | 4 +- .../web/servlet/mvc/LastModified.java | 6 +- .../mvc/ParameterizableViewController.java | 4 +- .../mvc/ServletForwardingController.java | 16 +- .../mvc/ServletWrappingController.java | 20 +- .../mvc/SimpleControllerHandlerAdapter.java | 4 +- .../mvc/UrlFilenameViewController.java | 2 +- .../servlet/mvc/WebContentInterceptor.java | 8 +- .../ResponseStatusExceptionResolver.java | 4 +- .../AbstractNameValueExpression.java | 2 +- .../condition/CompositeRequestCondition.java | 2 +- .../condition/ConsumesRequestCondition.java | 2 +- .../condition/HeadersRequestCondition.java | 2 +- .../mvc/condition/ParamsRequestCondition.java | 2 +- .../PathPatternsRequestCondition.java | 2 +- .../condition/PatternsRequestCondition.java | 2 +- .../condition/ProducesRequestCondition.java | 2 +- .../mvc/condition/RequestCondition.java | 2 +- .../mvc/condition/RequestConditionHolder.java | 2 +- .../RequestMethodsRequestCondition.java | 4 +- .../method/AbstractHandlerMethodAdapter.java | 6 +- .../mvc/method/RequestMappingInfo.java | 4 +- .../RequestMappingInfoHandlerMapping.java | 4 +- ...essageConverterMethodArgumentResolver.java | 5 +- ...stractMessageConverterMethodProcessor.java | 6 +- .../ExceptionHandlerExceptionResolver.java | 4 +- .../ExtendedServletRequestDataBinder.java | 2 +- .../annotation/HttpEntityMethodProcessor.java | 4 +- .../HttpHeadersReturnValueHandler.java | 2 +- .../annotation/MvcUriComponentsBuilder.java | 3 +- .../PrincipalMethodArgumentResolver.java | 2 +- ...equestAttributeMethodArgumentResolver.java | 2 +- .../RequestMappingHandlerAdapter.java | 8 +- .../RequestMappingHandlerMapping.java | 2 +- .../RequestPartMethodArgumentResolver.java | 6 +- .../RequestResponseBodyMethodProcessor.java | 2 +- ...ResponseBodyEmitterReturnValueHandler.java | 4 +- .../ResponseEntityExceptionHandler.java | 3 +- ...vletCookieValueMethodArgumentResolver.java | 4 +- .../ServletInvocableHandlerMethod.java | 4 +- .../ServletModelAttributeMethodProcessor.java | 2 +- .../ServletRequestMethodArgumentResolver.java | 10 +- ...ServletResponseMethodArgumentResolver.java | 2 +- ...essionAttributeMethodArgumentResolver.java | 2 +- ...reamingResponseBodyReturnValueHandler.java | 4 +- ...mponentsBuilderMethodArgumentResolver.java | 2 +- .../DefaultHandlerExceptionResolver.java | 11 +- .../resource/AbstractResourceResolver.java | 3 +- .../resource/AppCacheManifestTransformer.java | 3 +- .../resource/CachingResourceResolver.java | 2 +- .../resource/CachingResourceTransformer.java | 3 +- .../resource/CssLinkResourceTransformer.java | 3 +- .../DefaultResourceResolverChain.java | 2 +- .../DefaultResourceTransformerChain.java | 2 +- .../DefaultServletHttpRequestHandler.java | 10 +- .../resource/EncodedResourceResolver.java | 2 +- .../resource/GzipResourceResolver.java | 2 +- .../resource/PathResourceResolver.java | 2 +- .../resource/ResourceHttpRequestHandler.java | 11 +- .../servlet/resource/ResourceResolver.java | 2 +- .../resource/ResourceResolverChain.java | 2 +- .../servlet/resource/ResourceTransformer.java | 2 +- .../resource/ResourceTransformerChain.java | 2 +- .../resource/ResourceTransformerSupport.java | 2 +- .../resource/ResourceUrlEncodingFilter.java | 17 +- .../servlet/resource/ResourceUrlProvider.java | 5 +- ...esourceUrlProviderExposingInterceptor.java | 4 +- .../resource/VersionResourceResolver.java | 2 +- .../resource/WebJarsResourceResolver.java | 3 +- .../AbstractDispatcherServletInitializer.java | 14 +- .../support/AbstractFlashMapManager.java | 5 +- .../support/JspAwareRequestContext.java | 10 +- .../web/servlet/support/JstlUtils.java | 12 +- .../web/servlet/support/RequestContext.java | 22 +- .../servlet/support/RequestContextUtils.java | 10 +- .../support/RequestDataValueProcessor.java | 2 +- .../support/ServletUriComponentsBuilder.java | 2 +- .../support/SessionFlashMapManager.java | 6 +- .../servlet/support/WebContentGenerator.java | 6 +- .../web/servlet/tags/ArgumentAware.java | 2 +- .../web/servlet/tags/ArgumentTag.java | 4 +- .../web/servlet/tags/BindErrorsTag.java | 6 +- .../web/servlet/tags/BindTag.java | 4 +- .../web/servlet/tags/EditorAwareTag.java | 2 +- .../web/servlet/tags/EscapeBodyTag.java | 6 +- .../web/servlet/tags/EvalTag.java | 8 +- .../web/servlet/tags/HtmlEscapeTag.java | 2 +- .../servlet/tags/HtmlEscapingAwareTag.java | 2 +- .../web/servlet/tags/MessageTag.java | 8 +- .../web/servlet/tags/NestedPathTag.java | 8 +- .../web/servlet/tags/ParamTag.java | 4 +- .../servlet/tags/RequestContextAwareTag.java | 13 +- .../web/servlet/tags/TransformTag.java | 8 +- .../web/servlet/tags/UrlTag.java | 10 +- .../tags/form/AbstractCheckedElementTag.java | 2 +- .../form/AbstractDataBoundFormElementTag.java | 8 +- .../servlet/tags/form/AbstractFormTag.java | 12 +- .../tags/form/AbstractHtmlElementBodyTag.java | 14 +- .../tags/form/AbstractHtmlElementTag.java | 4 +- .../form/AbstractHtmlInputElementTag.java | 2 +- .../form/AbstractMultiCheckedElementTag.java | 2 +- .../form/AbstractSingleCheckedElementTag.java | 2 +- .../web/servlet/tags/form/ButtonTag.java | 2 +- .../web/servlet/tags/form/CheckboxTag.java | 2 +- .../web/servlet/tags/form/CheckboxesTag.java | 2 +- .../web/servlet/tags/form/ErrorsTag.java | 6 +- .../web/servlet/tags/form/FormTag.java | 20 +- .../web/servlet/tags/form/HiddenInputTag.java | 2 +- .../web/servlet/tags/form/InputTag.java | 2 +- .../web/servlet/tags/form/LabelTag.java | 4 +- .../web/servlet/tags/form/OptionTag.java | 6 +- .../web/servlet/tags/form/OptionWriter.java | 2 +- .../web/servlet/tags/form/OptionsTag.java | 2 +- .../servlet/tags/form/PasswordInputTag.java | 2 +- .../web/servlet/tags/form/RadioButtonTag.java | 2 +- .../web/servlet/tags/form/SelectTag.java | 4 +- .../web/servlet/tags/form/TagIdGenerator.java | 2 +- .../web/servlet/tags/form/TagWriter.java | 4 +- .../web/servlet/tags/form/TextareaTag.java | 2 +- .../servlet/theme/CookieThemeResolver.java | 6 +- .../web/servlet/theme/FixedThemeResolver.java | 4 +- .../servlet/theme/SessionThemeResolver.java | 4 +- .../servlet/theme/ThemeChangeInterceptor.java | 6 +- .../view/AbstractCachingViewResolver.java | 4 +- .../servlet/view/AbstractTemplateView.java | 8 +- .../web/servlet/view/AbstractView.java | 10 +- .../view/ContentNegotiatingViewResolver.java | 6 +- .../DefaultRequestToViewNameTranslator.java | 4 +- .../servlet/view/InternalResourceView.java | 28 +- .../view/InternalResourceViewResolver.java | 2 +- .../web/servlet/view/JstlView.java | 8 +- .../web/servlet/view/RedirectView.java | 10 +- .../servlet/view/UrlBasedViewResolver.java | 2 +- .../servlet/view/ViewResolverComposite.java | 2 +- .../view/document/AbstractPdfStamperView.java | 5 +- .../view/document/AbstractPdfView.java | 5 +- .../view/document/AbstractXlsView.java | 7 +- .../document/AbstractXlsxStreamingView.java | 5 +- .../view/document/AbstractXlsxView.java | 3 +- .../view/feed/AbstractAtomFeedView.java | 5 +- .../servlet/view/feed/AbstractFeedView.java | 7 +- .../view/feed/AbstractRssFeedView.java | 5 +- .../view/freemarker/FreeMarkerConfig.java | 9 +- .../view/freemarker/FreeMarkerConfigurer.java | 28 +- .../view/freemarker/FreeMarkerView.java | 121 +--- .../servlet/view/groovy/GroovyMarkupView.java | 5 +- .../view/json/AbstractJackson2View.java | 5 +- .../view/script/ScriptTemplateView.java | 7 +- .../tiles3/AbstractSpringPreparerFactory.java | 64 -- .../tiles3/SimpleSpringPreparerFactory.java | 72 -- .../tiles3/SpringBeanPreparerFactory.java | 42 -- .../view/tiles3/SpringLocaleResolver.java | 57 -- ...ildcardServletTilesApplicationContext.java | 106 --- .../servlet/view/tiles3/TilesConfigurer.java | 442 ------------ .../web/servlet/view/tiles3/TilesView.java | 166 ----- .../view/tiles3/TilesViewResolver.java | 95 --- .../web/servlet/view/tiles3/package-info.java | 12 - .../web/servlet/view/xml/MarshallingView.java | 7 +- .../web/servlet/view/xslt/XsltView.java | 4 +- .../web/servlet/config/spring-mvc.xsd | 67 +- .../web/context/ContextLoaderTests.java | 7 +- .../web/context/ServletConfigAwareBean.java | 2 +- .../web/context/ServletContextAwareBean.java | 2 +- .../ServletContextAwareProcessorTests.java | 5 +- .../XmlWebApplicationContextTests.java | 3 +- .../support/HttpRequestHandlerTests.java | 9 +- .../servlet/ComplexWebApplicationContext.java | 14 +- .../web/servlet/DispatcherServletTests.java | 17 +- .../servlet/SimpleWebApplicationContext.java | 6 +- .../web/servlet/config/MvcNamespaceTests.java | 40 +- .../DefaultServletHandlerConfigurerTests.java | 3 +- .../ViewResolutionIntegrationTests.java | 44 +- .../annotation/ViewResolverRegistryTests.java | 11 +- .../WebMvcConfigurationSupportTests.java | 9 +- .../DefaultEntityResponseBuilderTests.java | 5 +- .../DefaultRenderingResponseTests.java | 3 +- .../DefaultServerRequestBuilderTests.java | 5 +- .../function/DefaultServerRequestTests.java | 5 +- .../DefaultServerResponseBuilderTests.java | 3 +- .../ResourceHandlerFunctionTests.java | 3 +- .../BeanNameUrlHandlerMappingTests.java | 3 +- .../CorsAbstractHandlerMappingTests.java | 4 +- .../HandlerMappingIntrospectorTests.java | 3 +- .../servlet/handler/HandlerMappingTests.java | 3 +- .../handler/HandlerMethodMappingTests.java | 3 +- .../handler/MappedInterceptorTests.java | 5 +- .../SimpleMappingExceptionResolverTests.java | 3 +- .../i18n/AcceptHeaderLocaleResolverTests.java | 3 +- .../i18n/CookieLocaleResolverTests.java | 5 +- .../i18n/SessionLocaleResolverTests.java | 3 +- .../web/servlet/mvc/ControllerTests.java | 17 +- .../annotation/CglibProxyControllerTests.java | 3 +- .../annotation/JdkProxyControllerTests.java | 3 +- .../CompositeRequestConditionTests.java | 3 +- .../PathPatternsRequestConditionTests.java | 3 +- .../PatternsRequestConditionTests.java | 3 +- .../ProducesRequestConditionTests.java | 3 +- .../RequestConditionHolderTests.java | 3 +- .../RequestMethodsRequestConditionTests.java | 5 +- ...RequestMappingInfoHandlerMappingTests.java | 3 +- .../mvc/method/RequestMappingInfoTests.java | 3 +- ...equestAttributesArgumentResolverTests.java | 5 +- .../AbstractServletHandlerMethodTests.java | 3 +- .../method/annotation/CrossOriginTests.java | 3 +- .../HttpEntityMethodProcessorMockTests.java | 3 +- .../HttpEntityMethodProcessorTests.java | 7 +- .../MvcUriComponentsBuilderTests.java | 15 +- .../PrincipalMethodArgumentResolverTests.java | 3 +- ...MappingHandlerAdapterIntegrationTests.java | 9 +- .../RequestPartIntegrationTests.java | 33 +- ...equestPartMethodArgumentResolverTests.java | 7 +- ...tResponseBodyMethodProcessorMockTests.java | 5 +- .../ResponseEntityExceptionHandlerTests.java | 5 +- ...nnotationControllerHandlerMethodTests.java | 23 +- ...ookieValueMethodArgumentResolverTests.java | 3 +- .../ServletInvocableHandlerMethodTests.java | 5 +- ...letRequestMethodArgumentResolverTests.java | 7 +- ...etResponseMethodArgumentResolverTests.java | 3 +- ...nnotationControllerHandlerMethodTests.java | 4 +- .../DefaultHandlerExceptionResolverTests.java | 2 +- .../AppCacheManifestTransformerTests.java | 3 +- ...rceHttpRequestHandlerIntegrationTests.java | 3 +- .../ResourceHttpRequestHandlerTests.java | 3 +- .../ResourceTransformerSupportTests.java | 3 +- .../ResourceUrlEncodingFilterTests.java | 9 +- .../ResourceUrlProviderJavaConfigTests.java | 7 +- .../WebJarsResourceResolverTests.java | 3 +- ...nfigDispatcherServletInitializerTests.java | 17 +- .../DispatcherServletInitializerTests.java | 7 +- .../servlet/support/FlashMapManagerTests.java | 5 +- .../support/MockFilterRegistration.java | 4 +- .../support/MockServletRegistration.java | 6 +- .../RequestDataValueProcessorWrapper.java | 2 +- .../ServletUriComponentsBuilderTests.java | 3 +- .../web/servlet/tags/ArgumentTagTests.java | 9 +- .../web/servlet/tags/BindTagTests.java | 7 +- .../web/servlet/tags/EvalTagTests.java | 3 +- .../web/servlet/tags/HtmlEscapeTagTests.java | 9 +- .../web/servlet/tags/MessageTagTests.java | 11 +- .../web/servlet/tags/ParamTagTests.java | 9 +- .../web/servlet/tags/ThemeTagTests.java | 11 +- .../web/servlet/tags/UrlTagTests.java | 7 +- .../tags/form/AbstractFormTagTests.java | 2 +- .../form/AbstractHtmlElementTagTests.java | 5 +- .../web/servlet/tags/form/ButtonTagTests.java | 3 +- .../servlet/tags/form/CheckboxTagTests.java | 5 +- .../servlet/tags/form/CheckboxesTagTests.java | 5 +- .../web/servlet/tags/form/ErrorsTagTests.java | 11 +- .../web/servlet/tags/form/FormTagTests.java | 5 +- .../tags/form/HiddenInputTagTests.java | 5 +- .../web/servlet/tags/form/InputTagTests.java | 5 +- .../web/servlet/tags/form/LabelTagTests.java | 5 +- .../servlet/tags/form/OptionTagEnumTests.java | 5 +- .../web/servlet/tags/form/OptionTagTests.java | 5 +- .../servlet/tags/form/OptionsTagTests.java | 7 +- .../tags/form/PasswordInputTagTests.java | 5 +- .../tags/form/RadioButtonTagTests.java | 5 +- .../tags/form/RadioButtonsTagTests.java | 5 +- .../web/servlet/tags/form/SelectTagTests.java | 5 +- .../tags/form/TagIdGeneratorTests.java | 3 +- .../servlet/tags/form/TextareaTagTests.java | 3 +- .../web/servlet/view/BaseViewTests.java | 7 +- .../view/DummyMacroRequestContext.java | 2 +- .../view/InternalResourceViewTests.java | 3 +- .../view/ResourceBundleViewResolverTests.java | 5 +- .../web/servlet/view/ViewResolverTests.java | 15 +- .../servlet/view/document/XlsViewTests.java | 5 +- .../servlet/view/feed/AtomFeedViewTests.java | 5 +- .../servlet/view/feed/RssFeedViewTests.java | 5 +- .../view/freemarker/FreeMarkerMacroTests.java | 12 +- .../view/freemarker/FreeMarkerViewTests.java | 15 +- .../view/groovy/GroovyMarkupViewTests.java | 3 +- .../view/script/JRubyScriptTemplateTests.java | 3 +- .../script/JythonScriptTemplateTests.java | 3 +- .../script/KotlinScriptTemplateTests.java | 3 +- .../script/NashornScriptTemplateTests.java | 3 +- .../view/tiles3/TilesConfigurerTests.java | 66 -- .../view/tiles3/TilesViewResolverTests.java | 72 -- .../servlet/view/tiles3/TilesViewTests.java | 101 --- .../view/xml/MarshallingViewTests.java | 2 +- .../web/context/WEB-INF/empty-servlet.xml | 2 +- ...ig-view-resolution-content-negotiation.xml | 5 - .../config/mvc-config-view-resolution.xml | 8 - spring-websocket/spring-websocket.gradle | 16 +- .../jetty/Jetty10WebSocketHandlerAdapter.java | 137 ---- .../jetty/JettyWebSocketHandlerAdapter.java | 6 +- .../adapter/jetty/JettyWebSocketSession.java | 160 +---- ...ebSocketToJettyExtensionConfigAdapter.java | 7 +- .../ConvertingEncoderDecoderSupport.java | 44 +- .../StandardToWebSocketExtensionAdapter.java | 4 +- .../StandardWebSocketHandlerAdapter.java | 25 +- .../standard/StandardWebSocketSession.java | 8 +- .../WebSocketToStandardExtensionAdapter.java | 4 +- .../client/jetty/JettyWebSocketClient.java | 89 +-- .../AnnotatedEndpointConnectionManager.java | 8 +- .../standard/EndpointConnectionManager.java | 18 +- .../standard/StandardWebSocketClient.java | 14 +- .../WebSocketContainerFactoryBean.java | 6 +- .../MessageBrokerBeanDefinitionParser.java | 4 +- .../jetty/Jetty10RequestUpgradeStrategy.java | 167 ----- .../jetty/JettyRequestUpgradeStrategy.java | 257 ++----- .../AbstractStandardUpgradeStrategy.java | 19 +- .../AbstractTyrusRequestUpgradeStrategy.java | 17 +- .../GlassFishRequestUpgradeStrategy.java | 7 +- .../standard/ServerEndpointExporter.java | 16 +- .../standard/ServerEndpointRegistration.java | 24 +- .../ServletServerContainerFactoryBean.java | 16 +- .../server/standard/SpringConfigurator.java | 7 +- .../TomcatRequestUpgradeStrategy.java | 15 +- .../UndertowRequestUpgradeStrategy.java | 11 +- .../WebLogicRequestUpgradeStrategy.java | 15 +- .../WebSphereRequestUpgradeStrategy.java | 12 +- .../support/AbstractHandshakeHandler.java | 10 +- .../support/DefaultHandshakeHandler.java | 2 +- .../HttpSessionHandshakeInterceptor.java | 4 +- .../support/WebSocketHandlerMapping.java | 4 +- .../support/WebSocketHttpRequestHandler.java | 9 +- .../sockjs/client/JettyXhrTransport.java | 16 +- .../sockjs/support/AbstractSockJsService.java | 3 +- .../support/SockJsHttpRequestHandler.java | 8 +- .../handler/DefaultSockJsService.java | 3 +- .../handler/WebSocketTransportHandler.java | 2 +- .../session/AbstractHttpSockJsSession.java | 2 +- .../AbstractWebSocketIntegrationTests.java | 2 +- .../web/socket/JettyWebSocketTestServer.java | 7 +- .../web/socket/TomcatWebSocketTestServer.java | 5 +- .../web/socket/UndertowTestServer.java | 11 +- .../web/socket/WebSocketTestServer.java | 4 +- .../ConvertingEncoderDecoderSupportTests.java | 9 +- .../StandardWebSocketHandlerAdapterTests.java | 9 +- .../StandardWebSocketSessionTests.java | 3 +- .../jetty/JettyWebSocketClientTests.java | 35 +- .../StandardWebSocketClientTests.java | 7 +- .../standard/ServerEndpointExporterTests.java | 17 +- .../ServerEndpointRegistrationTests.java | 7 +- .../standard/SpringConfiguratorTests.java | 3 +- .../WebSocketHttpRequestHandlerTests.java | 3 +- .../AbstractSockJsIntegrationTests.java | 17 +- .../sockjs/support/SockJsServiceTests.java | 5 +- 1291 files changed, 4988 insertions(+), 25318 deletions(-) delete mode 100644 spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheCache.java delete mode 100644 spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheCacheManager.java delete mode 100644 spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheFactoryBean.java delete mode 100644 spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheManagerFactoryBean.java delete mode 100644 spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheManagerUtils.java delete mode 100644 spring-context-support/src/main/java/org/springframework/cache/ehcache/package-info.java delete mode 100644 spring-context-support/src/main/java/org/springframework/scheduling/commonj/DelegatingTimerListener.java delete mode 100644 spring-context-support/src/main/java/org/springframework/scheduling/commonj/DelegatingWork.java delete mode 100644 spring-context-support/src/main/java/org/springframework/scheduling/commonj/ScheduledTimerListener.java delete mode 100644 spring-context-support/src/main/java/org/springframework/scheduling/commonj/TimerManagerAccessor.java delete mode 100644 spring-context-support/src/main/java/org/springframework/scheduling/commonj/TimerManagerFactoryBean.java delete mode 100644 spring-context-support/src/main/java/org/springframework/scheduling/commonj/TimerManagerTaskScheduler.java delete mode 100644 spring-context-support/src/main/java/org/springframework/scheduling/commonj/WorkManagerTaskExecutor.java delete mode 100644 spring-context-support/src/main/java/org/springframework/scheduling/commonj/package-info.java delete mode 100644 spring-context-support/src/test/java/org/springframework/cache/ehcache/EhCacheCacheManagerTests.java delete mode 100644 spring-context-support/src/test/java/org/springframework/cache/ehcache/EhCacheCacheTests.java delete mode 100644 spring-context-support/src/test/java/org/springframework/cache/ehcache/EhCacheSupportTests.java delete mode 100644 spring-context-support/src/test/java/org/springframework/cache/jcache/JCacheEhCache3AnnotationTests.java delete mode 100644 spring-context-support/src/test/java/org/springframework/cache/jcache/JCacheEhCache3ApiTests.java delete mode 100644 spring-context-support/src/test/java/org/springframework/validation/beanvalidation2/BeanValidationPostProcessorTests.java delete mode 100644 spring-context-support/src/test/java/org/springframework/validation/beanvalidation2/MethodValidationTests.java delete mode 100644 spring-context-support/src/test/java/org/springframework/validation/beanvalidation2/SpringValidatorAdapterTests.java delete mode 100644 spring-context-support/src/test/java/org/springframework/validation/beanvalidation2/ValidatorFactoryTests.java delete mode 100644 spring-context/src/main/java/org/springframework/ejb/access/AbstractRemoteSlsbInvokerInterceptor.java delete mode 100644 spring-context/src/main/java/org/springframework/ejb/access/AbstractSlsbInvokerInterceptor.java delete mode 100644 spring-context/src/main/java/org/springframework/ejb/access/EjbAccessException.java delete mode 100644 spring-context/src/main/java/org/springframework/ejb/access/LocalSlsbInvokerInterceptor.java delete mode 100644 spring-context/src/main/java/org/springframework/ejb/access/LocalStatelessSessionProxyFactoryBean.java delete mode 100644 spring-context/src/main/java/org/springframework/ejb/access/SimpleRemoteSlsbInvokerInterceptor.java delete mode 100644 spring-context/src/main/java/org/springframework/ejb/access/SimpleRemoteStatelessSessionProxyFactoryBean.java delete mode 100644 spring-context/src/main/java/org/springframework/ejb/access/package-info.java delete mode 100644 spring-context/src/main/java/org/springframework/instrument/classloading/weblogic/WebLogicClassLoaderAdapter.java delete mode 100644 spring-context/src/main/java/org/springframework/instrument/classloading/weblogic/WebLogicClassPreProcessorAdapter.java delete mode 100644 spring-context/src/main/java/org/springframework/instrument/classloading/weblogic/WebLogicLoadTimeWeaver.java delete mode 100644 spring-context/src/main/java/org/springframework/instrument/classloading/weblogic/package-info.java delete mode 100644 spring-context/src/main/java/org/springframework/instrument/classloading/websphere/WebSphereClassLoaderAdapter.java delete mode 100644 spring-context/src/main/java/org/springframework/instrument/classloading/websphere/WebSphereClassPreDefinePlugin.java delete mode 100644 spring-context/src/main/java/org/springframework/instrument/classloading/websphere/WebSphereLoadTimeWeaver.java delete mode 100644 spring-context/src/main/java/org/springframework/instrument/classloading/websphere/package-info.java delete mode 100644 spring-context/src/main/java/org/springframework/jmx/support/WebSphereMBeanServerFactoryBean.java delete mode 100644 spring-context/src/test/java/org/springframework/ejb/access/LocalSlsbInvokerInterceptorTests.java delete mode 100644 spring-context/src/test/java/org/springframework/ejb/access/LocalStatelessSessionProxyFactoryBeanTests.java delete mode 100644 spring-context/src/test/java/org/springframework/ejb/access/SimpleRemoteSlsbInvokerInterceptorTests.java delete mode 100644 spring-context/src/test/java/org/springframework/ejb/access/SimpleRemoteStatelessSessionProxyFactoryBeanTests.java delete mode 100644 spring-jdbc/src/main/java/org/springframework/jdbc/datasource/WebSphereDataSourceAdapter.java delete mode 100644 spring-jms/src/test/java/org/springframework/jms/listener/MessageListenerContainerIntegrationTests.java delete mode 100644 spring-test/src/main/java/org/springframework/mock/web/MockExpressionEvaluator.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/cci/CannotCreateRecordException.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/cci/CannotGetCciConnectionException.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/cci/CciOperationNotSupportedException.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/cci/InvalidResultSetAccessException.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/cci/RecordTypeNotSupportedException.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/cci/connection/CciLocalTransactionManager.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/cci/connection/ConnectionFactoryUtils.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/cci/connection/ConnectionHolder.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/cci/connection/ConnectionSpecConnectionFactoryAdapter.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/cci/connection/DelegatingConnectionFactory.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/cci/connection/NotSupportedRecordFactory.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/cci/connection/SingleConnectionFactory.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/cci/connection/TransactionAwareConnectionFactoryProxy.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/cci/connection/package-info.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/cci/core/CciOperations.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/cci/core/CciTemplate.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/cci/core/ConnectionCallback.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/cci/core/InteractionCallback.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/cci/core/RecordCreator.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/cci/core/RecordExtractor.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/cci/core/package-info.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/cci/core/support/CciDaoSupport.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/cci/core/support/CommAreaRecord.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/cci/core/support/package-info.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/cci/object/EisOperation.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/cci/object/MappingCommAreaOperation.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/cci/object/MappingRecordOperation.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/cci/object/SimpleRecordOperation.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/cci/object/package-info.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/cci/package-info.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/context/BootstrapContextAware.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/context/BootstrapContextAwareProcessor.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/context/ResourceAdapterApplicationContext.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/context/SpringContextResourceAdapter.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/context/package-info.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/work/DelegatingWork.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/work/SimpleTaskWorkManager.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/work/WorkManagerTaskExecutor.java delete mode 100644 spring-tx/src/main/java/org/springframework/jca/work/package-info.java delete mode 100644 spring-tx/src/main/java/org/springframework/transaction/jta/WebLogicJtaTransactionManager.java delete mode 100644 spring-tx/src/main/java/org/springframework/transaction/jta/WebSphereUowTransactionManager.java delete mode 100644 spring-tx/src/test/java/org/springframework/jca/cci/CciLocalTransactionTests.java delete mode 100644 spring-tx/src/test/java/org/springframework/jca/cci/CciTemplateTests.java delete mode 100644 spring-tx/src/test/java/org/springframework/jca/cci/EisOperationTests.java delete mode 100644 spring-tx/src/test/java/org/springframework/transaction/jta/MockUOWManager.java delete mode 100644 spring-tx/src/test/java/org/springframework/transaction/jta/WebSphereUowTransactionManagerTests.java delete mode 100644 spring-web/src/main/java/org/springframework/http/codec/multipart/SynchronossPartHttpMessageReader.java delete mode 100644 spring-web/src/main/java/org/springframework/web/multipart/commons/CommonsFileUploadSupport.java delete mode 100644 spring-web/src/main/java/org/springframework/web/multipart/commons/CommonsMultipartFile.java delete mode 100644 spring-web/src/main/java/org/springframework/web/multipart/commons/CommonsMultipartResolver.java delete mode 100644 spring-web/src/main/java/org/springframework/web/multipart/commons/package-info.java delete mode 100644 spring-web/src/test/java/org/springframework/http/codec/multipart/SynchronossPartHttpMessageReaderTests.java delete mode 100644 spring-web/src/test/java/org/springframework/web/multipart/commons/CommonsMultipartResolverTests.java delete mode 100644 spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockExpressionEvaluator.java delete mode 100644 spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/Jetty10WebSocketHandlerAdapter.java delete mode 100644 spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/Jetty10RequestUpgradeStrategy.java delete mode 100644 spring-webmvc/src/main/java/org/springframework/web/servlet/config/TilesConfigurerBeanDefinitionParser.java delete mode 100644 spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/AbstractSpringPreparerFactory.java delete mode 100644 spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/SimpleSpringPreparerFactory.java delete mode 100644 spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/SpringBeanPreparerFactory.java delete mode 100644 spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/SpringLocaleResolver.java delete mode 100644 spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/SpringWildcardServletTilesApplicationContext.java delete mode 100644 spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/TilesConfigurer.java delete mode 100644 spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/TilesView.java delete mode 100644 spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/TilesViewResolver.java delete mode 100644 spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/package-info.java delete mode 100644 spring-webmvc/src/test/java/org/springframework/web/servlet/view/tiles3/TilesConfigurerTests.java delete mode 100644 spring-webmvc/src/test/java/org/springframework/web/servlet/view/tiles3/TilesViewResolverTests.java delete mode 100644 spring-webmvc/src/test/java/org/springframework/web/servlet/view/tiles3/TilesViewTests.java delete mode 100644 spring-websocket/src/main/java/org/springframework/web/socket/adapter/jetty/Jetty10WebSocketHandlerAdapter.java delete mode 100644 spring-websocket/src/main/java/org/springframework/web/socket/server/jetty/Jetty10RequestUpgradeStrategy.java diff --git a/build.gradle b/build.gradle index 255ecde3a6d..c6cdde1364e 100644 --- a/build.gradle +++ b/build.gradle @@ -32,7 +32,7 @@ configure(allprojects) { project -> mavenBom "io.projectreactor:reactor-bom:2020.0.11" mavenBom "io.r2dbc:r2dbc-bom:Arabba-SR10" mavenBom "io.rsocket:rsocket-bom:1.1.1" - mavenBom "org.eclipse.jetty:jetty-bom:9.4.43.v20210629" + mavenBom "org.eclipse.jetty:jetty-bom:11.0.6" mavenBom "org.jetbrains.kotlin:kotlin-bom:1.5.30" mavenBom "org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.5.2" mavenBom "org.jetbrains.kotlinx:kotlinx-serialization-bom:1.2.2" @@ -83,14 +83,10 @@ configure(allprojects) { project -> exclude group: "xpp3", name: "xpp3_min" exclude group: "xmlpull", name: "xmlpull" } - dependency "org.apache.johnzon:johnzon-jsonb:1.2.10" + dependency "org.eclipse:yasson:2.0.2" dependency("org.codehaus.jettison:jettison:1.3.8") { exclude group: "stax", name: "stax-api" } - dependencySet(group: 'org.jibx', version: '1.3.3') { - entry 'jibx-bind' - entry 'jibx-run' - } dependency "org.ogce:xpp3:1.1.6" dependency "org.yaml:snakeyaml:1.29" @@ -108,7 +104,6 @@ configure(allprojects) { project -> } entry 'activemq-stomp' } - dependency "org.apache.bcel:bcel:6.0" dependency "org.apache.commons:commons-pool2:2.9.0" dependencySet(group: 'org.apache.derby', version: '10.14.2.0') { entry 'derby' @@ -119,35 +114,28 @@ configure(allprojects) { project -> dependency "org.freemarker:freemarker:2.3.31" dependency "org.hsqldb:hsqldb:2.5.2" dependency "org.quartz-scheduler:quartz:2.3.2" - dependency "org.codehaus.fabric3.api:commonj:1.1.0" - dependency "net.sf.ehcache:ehcache:2.10.6" dependency "org.ehcache:jcache:1.0.1" dependency "org.ehcache:ehcache:3.4.0" - dependency "org.hibernate:hibernate-core:5.5.7.Final" - dependency "org.hibernate:hibernate-validator:6.2.0.Final" + dependency "org.hibernate:hibernate-core-jakarta:5.5.7.Final" + dependency "org.hibernate:hibernate-validator:7.0.1.Final" dependency "org.webjars:webjars-locator-core:0.47" dependency "org.webjars:underscorejs:1.8.3" - dependencySet(group: 'org.apache.tomcat', version: '9.0.52') { + dependencySet(group: 'org.apache.tomcat', version: '10.0.11') { entry 'tomcat-util' entry('tomcat-websocket') { exclude group: "org.apache.tomcat", name: "tomcat-websocket-api" exclude group: "org.apache.tomcat", name: "tomcat-servlet-api" } } - dependencySet(group: 'org.apache.tomcat.embed', version: '9.0.52') { + dependencySet(group: 'org.apache.tomcat.embed', version: '10.0.11') { entry 'tomcat-embed-core' entry 'tomcat-embed-websocket' } dependencySet(group: 'io.undertow', version: '2.2.10.Final') { entry 'undertow-core' - entry('undertow-websockets-jsr') { - exclude group: "org.jboss.spec.javax.websocket", name: "jboss-websocket-api_1.1_spec" - } - entry('undertow-servlet') { - exclude group: "org.jboss.spec.javax.servlet", name: "jboss-servlet-api_3.1_spec" - exclude group: "org.jboss.spec.javax.annotation", name: "jboss-annotations-api_1.2_spec" - } + entry('undertow-servlet-jakartaee9') + entry('undertow-websockets-jsr-jakartaee9') } dependencySet(group: 'com.squareup.okhttp3', version: '3.14.9') { @@ -162,15 +150,12 @@ configure(allprojects) { project -> } dependency 'org.apache.httpcomponents.client5:httpclient5:5.1' dependency 'org.apache.httpcomponents.core5:httpcore5-reactive:5.1.1' - dependency "org.eclipse.jetty:jetty-reactive-httpclient:1.1.9" + dependency "org.eclipse.jetty:jetty-reactive-httpclient:3.0.4" dependency "org.jruby:jruby:9.2.19.0" dependency "org.python:jython-standalone:2.7.1" dependency "org.mozilla:rhino:1.7.11" - dependency "commons-fileupload:commons-fileupload:1.4" - dependency "org.synchronoss.cloud:nio-multipart-parser:1.1.0" - dependency("org.dom4j:dom4j:2.1.3") { exclude group: "jaxen", name: "jaxen" exclude group: "net.java.dev.msv", name: "xsdlib" @@ -218,69 +203,50 @@ configure(allprojects) { project -> dependency "org.skyscreamer:jsonassert:1.5.0" dependency "com.jayway.jsonpath:json-path:2.6.0" dependency "org.bouncycastle:bcpkix-jdk15on:1.66" - - dependencySet(group: 'org.apache.tiles', version: '3.0.8') { - entry 'tiles-api' - entry('tiles-core', withoutJclOverSlf4j) - entry('tiles-servlet', withoutJclOverSlf4j) - entry('tiles-jsp', withoutJclOverSlf4j) - entry('tiles-el', withoutJclOverSlf4j) - entry('tiles-extras') { - exclude group: "org.springframework", name: "spring-web" - exclude group: "org.slf4j", name: "jcl-over-slf4j" - } - } - dependency("org.apache.taglibs:taglibs-standard-jstlel:1.2.5") { - exclude group: "org.apache.taglibs", name: "taglibs-standard-spec" - } - - dependency "com.ibm.websphere:uow:6.0.2.17" dependency "com.jamonapi:jamon:2.82" - dependency "joda-time:joda-time:2.10.10" - dependency "org.eclipse.persistence:org.eclipse.persistence.jpa:2.7.9" - dependency "org.javamoney:moneta:1.3" - dependency "com.sun.activation:javax.activation:1.2.0" - dependency "com.sun.mail:javax.mail:1.6.2" - dependencySet(group: 'com.sun.xml.bind', version: '2.3.0.1') { + dependency "javax.cache:cache-api:1.1.1" + dependency "javax.money:money-api:1.1" + dependency "org.javamoney:moneta:1.4.2" + + dependency "jakarta.activation:jakarta.activation-api:2.0.1" + dependency "jakarta.annotation:jakarta.annotation-api:2.0.0" + dependency "jakarta.ejb:jakarta.ejb-api:4.0.0" + dependency "jakarta.el:jakarta.el-api:4.0.0" + dependency "jakarta.enterprise.concurrent:jakarta.enterprise.concurrent-api:2.0.0" + dependency "jakarta.faces:jakarta.faces-api:3.0.0" + dependency "jakarta.inject:jakarta.inject-api:2.0.0" + dependency "jakarta.inject:jakarta.inject-tck:2.0.1" + dependency "jakarta.interceptor:jakarta.interceptor-api:2.0.0" + dependency "jakarta.jms:jakarta.jms-api:3.0.0" + dependency "jakarta.json:jakarta.json-api:2.0.1" + dependency "jakarta.json.bind:jakarta.json.bind-api:2.0.0" + dependency "jakarta.mail:jakarta.mail-api:2.0.1" + dependency "jakarta.persistence:jakarta.persistence-api:3.0.0" + dependency "jakarta.resource:jakarta.resource-api:2.0.0" + dependency "jakarta.servlet:jakarta.servlet-api:5.0.0" + dependency "jakarta.servlet.jsp:jakarta.servlet.jsp-api:3.0.0" + dependency "jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api:2.0.0" + dependency "jakarta.transaction:jakarta.transaction-api:2.0.0" + dependency "jakarta.validation:jakarta.validation-api:3.0.0" + dependency "jakarta.websocket:jakarta.websocket-api:2.0.0" + dependency "jakarta.xml.bind:jakarta.xml.bind-api:3.0.1" + dependency "jakarta.xml.ws:jakarta.xml.ws-api:3.0.1" + + dependency "com.sun.activation:jakarta.activation:2.0.1" + dependency "com.sun.mail:jakarta.mail:2.0.1" + dependencySet(group: 'com.sun.xml.bind', version: '3.0.2') { entry 'jaxb-core' entry 'jaxb-impl' entry 'jaxb-xjc' } - dependency "javax.activation:javax.activation-api:1.2.0" - dependency "javax.annotation:javax.annotation-api:1.3.2" - dependency "javax.cache:cache-api:1.1.0" - dependency "javax.ejb:javax.ejb-api:3.2" - dependency "javax.el:javax.el-api:3.0.1-b04" - dependency "javax.enterprise.concurrent:javax.enterprise.concurrent-api:1.0" - dependency "javax.faces:javax.faces-api:2.2" - dependency "javax.inject:javax.inject:1" - dependency "javax.inject:javax.inject-tck:1" - dependency "javax.interceptor:javax.interceptor-api:1.2.2" - dependency "javax.jms:javax.jms-api:2.0.1" - dependency "javax.json:javax.json-api:1.1.4" - dependency "javax.json.bind:javax.json.bind-api:1.0" - dependency "javax.mail:javax.mail-api:1.6.2" - dependency "javax.money:money-api:1.0.3" - dependency "javax.resource:javax.resource-api:1.7.1" - dependency "javax.servlet:javax.servlet-api:4.0.1" - dependency "javax.servlet.jsp:javax.servlet.jsp-api:2.3.2-b02" - dependency "javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api:1.2.1" - dependency "javax.transaction:javax.transaction-api:1.3" - dependency "javax.validation:validation-api:2.0.1.Final" - dependency "javax.websocket:javax.websocket-api:1.1" - dependency "javax.xml.bind:jaxb-api:2.3.1" - dependency "javax.xml.ws:jaxws-api:2.3.1" - - dependency "org.eclipse.persistence:javax.persistence:2.2.0" - // Substitute for "javax.management:jmxremote_optional:1.0.1_04" which // is not available on Maven Central dependency "org.glassfish.external:opendmk_jmxremote_optional_jar:1.0-b01-ea" - dependency "org.glassfish:javax.el:3.0.1-b08" - dependency "org.glassfish.main:javax.jws:4.0-b33" - dependency "org.glassfish.tyrus:tyrus-container-servlet:1.13.1" + dependency "org.glassfish:jakarta.el:4.0.2" + dependency "org.glassfish.tyrus:tyrus-container-servlet:2.0.1" + dependency "org.eclipse.persistence:org.eclipse.persistence.jpa:3.0.2" } generatedPomCustomization { enabled = false diff --git a/integration-tests/integration-tests.gradle b/integration-tests/integration-tests.gradle index f7408e5c6ec..5d864c7ba05 100644 --- a/integration-tests/integration-tests.gradle +++ b/integration-tests/integration-tests.gradle @@ -15,12 +15,12 @@ dependencies { testImplementation(project(":spring-test")) testImplementation(project(":spring-tx")) testImplementation(project(":spring-web")) - testImplementation("javax.inject:javax.inject") - testImplementation("javax.resource:javax.resource-api") - testImplementation("javax.servlet:javax.servlet-api") + testImplementation("jakarta.inject:jakarta.inject-api") + testImplementation("jakarta.resource:jakarta.resource-api") + testImplementation("jakarta.servlet:jakarta.servlet-api") testImplementation("org.aspectj:aspectjweaver") testImplementation("org.hsqldb:hsqldb") - testImplementation("org.hibernate:hibernate-core") + testImplementation("org.hibernate:hibernate-core-jakarta") } normalization { diff --git a/integration-tests/src/test/java/org/springframework/aop/framework/autoproxy/AdvisorAutoProxyCreatorIntegrationTests.java b/integration-tests/src/test/java/org/springframework/aop/framework/autoproxy/AdvisorAutoProxyCreatorIntegrationTests.java index cf067e01415..48142f4c937 100644 --- a/integration-tests/src/test/java/org/springframework/aop/framework/autoproxy/AdvisorAutoProxyCreatorIntegrationTests.java +++ b/integration-tests/src/test/java/org/springframework/aop/framework/autoproxy/AdvisorAutoProxyCreatorIntegrationTests.java @@ -20,8 +20,7 @@ import java.io.IOException; import java.lang.reflect.Method; import java.util.List; -import javax.servlet.ServletException; - +import jakarta.servlet.ServletException; import org.junit.jupiter.api.Test; import org.springframework.aop.support.AopUtils; diff --git a/integration-tests/src/test/java/org/springframework/context/annotation/jsr330/ClassPathBeanDefinitionScannerJsr330ScopeIntegrationTests.java b/integration-tests/src/test/java/org/springframework/context/annotation/jsr330/ClassPathBeanDefinitionScannerJsr330ScopeIntegrationTests.java index bd86cc9041d..f2bcce460c4 100644 --- a/integration-tests/src/test/java/org/springframework/context/annotation/jsr330/ClassPathBeanDefinitionScannerJsr330ScopeIntegrationTests.java +++ b/integration-tests/src/test/java/org/springframework/context/annotation/jsr330/ClassPathBeanDefinitionScannerJsr330ScopeIntegrationTests.java @@ -21,9 +21,8 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import javax.inject.Named; -import javax.inject.Singleton; - +import jakarta.inject.Named; +import jakarta.inject.Singleton; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -314,16 +313,16 @@ class ClassPathBeanDefinitionScannerJsr330ScopeIntegrationTests { if (definition instanceof AnnotatedBeanDefinition) { AnnotatedBeanDefinition annDef = (AnnotatedBeanDefinition) definition; for (String type : annDef.getMetadata().getAnnotationTypes()) { - if (type.equals(javax.inject.Singleton.class.getName())) { + if (type.equals(jakarta.inject.Singleton.class.getName())) { metadata.setScopeName(BeanDefinition.SCOPE_SINGLETON); break; } - else if (annDef.getMetadata().getMetaAnnotationTypes(type).contains(javax.inject.Scope.class.getName())) { + else if (annDef.getMetadata().getMetaAnnotationTypes(type).contains(jakarta.inject.Scope.class.getName())) { metadata.setScopeName(type.substring(type.length() - 13, type.length() - 6).toLowerCase()); metadata.setScopedProxyMode(scopedProxyMode); break; } - else if (type.startsWith("javax.inject")) { + else if (type.startsWith("jakarta.inject")) { metadata.setScopeName(BeanDefinition.SCOPE_PROTOTYPE); } } @@ -391,14 +390,14 @@ class ClassPathBeanDefinitionScannerJsr330ScopeIntegrationTests { @Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) - @javax.inject.Scope + @jakarta.inject.Scope public @interface RequestScoped { } @Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) - @javax.inject.Scope + @jakarta.inject.Scope public @interface SessionScoped { } diff --git a/integration-tests/src/test/java/org/springframework/core/env/EnvironmentSystemIntegrationTests.java b/integration-tests/src/test/java/org/springframework/core/env/EnvironmentSystemIntegrationTests.java index 20e23ecca31..2bbc001f28e 100644 --- a/integration-tests/src/test/java/org/springframework/core/env/EnvironmentSystemIntegrationTests.java +++ b/integration-tests/src/test/java/org/springframework/core/env/EnvironmentSystemIntegrationTests.java @@ -41,9 +41,6 @@ import org.springframework.context.support.GenericApplicationContext; import org.springframework.context.support.GenericXmlApplicationContext; import org.springframework.context.support.StaticApplicationContext; import org.springframework.core.io.ClassPathResource; -import org.springframework.jca.context.ResourceAdapterApplicationContext; -import org.springframework.jca.support.SimpleBootstrapContext; -import org.springframework.jca.work.SimpleTaskWorkManager; import org.springframework.mock.env.MockEnvironment; import org.springframework.mock.env.MockPropertySource; import org.springframework.mock.web.MockServletConfig; @@ -535,22 +532,6 @@ public class EnvironmentSystemIntegrationTests { assertThat(environment.getProperty("pSysProps1")).isEqualTo("pSysProps1Value"); } - @Test - void resourceAdapterApplicationContext() { - ResourceAdapterApplicationContext ctx = new ResourceAdapterApplicationContext(new SimpleBootstrapContext(new SimpleTaskWorkManager())); - - assertHasStandardEnvironment(ctx); - - registerEnvironmentBeanDefinition(ctx); - - ctx.setEnvironment(prodEnv); - ctx.refresh(); - - assertHasEnvironment(ctx, prodEnv); - assertEnvironmentBeanRegistered(ctx); - assertEnvironmentAwareInvoked(ctx, prodEnv); - } - @Test void abstractApplicationContextValidatesRequiredPropertiesOnRefresh() { { diff --git a/integration-tests/src/test/resources/org/springframework/aop/framework/autoproxy/AdvisorAutoProxyCreatorIntegrationTests-context.xml b/integration-tests/src/test/resources/org/springframework/aop/framework/autoproxy/AdvisorAutoProxyCreatorIntegrationTests-context.xml index 90ea7dc1f66..92abf56386a 100644 --- a/integration-tests/src/test/resources/org/springframework/aop/framework/autoproxy/AdvisorAutoProxyCreatorIntegrationTests-context.xml +++ b/integration-tests/src/test/resources/org/springframework/aop/framework/autoproxy/AdvisorAutoProxyCreatorIntegrationTests-context.xml @@ -41,7 +41,7 @@ PROPAGATION_REQUIRED PROPAGATION_REQUIRED - PROPAGATION_REQUIRED,+javax.servlet.ServletException,-java.lang.Exception + PROPAGATION_REQUIRED,+jakarta.servlet.ServletException,-java.lang.Exception diff --git a/spring-aop/src/main/java/org/springframework/aop/interceptor/AsyncExecutionInterceptor.java b/spring-aop/src/main/java/org/springframework/aop/interceptor/AsyncExecutionInterceptor.java index 8d97ad311c7..a466164bcc7 100644 --- a/spring-aop/src/main/java/org/springframework/aop/interceptor/AsyncExecutionInterceptor.java +++ b/spring-aop/src/main/java/org/springframework/aop/interceptor/AsyncExecutionInterceptor.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -47,7 +47,7 @@ import org.springframework.util.ClassUtils; * target method needs to implement the same signature, it will have to return * a temporary Future handle that just passes the return value through * (like Spring's {@link org.springframework.scheduling.annotation.AsyncResult} - * or EJB 3.1's {@code javax.ejb.AsyncResult}). + * or EJB's {@code jakarta.ejb.AsyncResult}). * *

When the return type is {@code java.util.concurrent.Future}, any exception thrown * during the execution can be accessed and managed by the caller. With {@code void} diff --git a/spring-aspects/spring-aspects.gradle b/spring-aspects/spring-aspects.gradle index 85c84bfd467..ec29638bf5e 100644 --- a/spring-aspects/spring-aspects.gradle +++ b/spring-aspects/spring-aspects.gradle @@ -29,14 +29,14 @@ dependencies { optional(project(":spring-orm")) // for JPA exception translation support optional(project(":spring-tx")) // for JPA, @Transactional support optional("javax.cache:cache-api") // for JCache aspect - optional("javax.transaction:javax.transaction-api") // for @javax.transaction.Transactional support + optional("jakarta.transaction:jakarta.transaction-api") // for @javax.transaction.Transactional support testImplementation(project(":spring-core")) // for CodeStyleAspect testImplementation(project(":spring-test")) testImplementation(testFixtures(project(":spring-context"))) testImplementation(testFixtures(project(":spring-context-support"))) testImplementation(testFixtures(project(":spring-core"))) testImplementation(testFixtures(project(":spring-tx"))) - testImplementation("javax.mail:javax.mail-api") + testImplementation("jakarta.mail:jakarta.mail-api") testCompileOnly("org.aspectj:aspectjrt") } diff --git a/spring-aspects/src/main/java/org/springframework/transaction/aspectj/AspectJJtaTransactionManagementConfiguration.java b/spring-aspects/src/main/java/org/springframework/transaction/aspectj/AspectJJtaTransactionManagementConfiguration.java index ec733d3cf2b..0ed7ffb69eb 100644 --- a/spring-aspects/src/main/java/org/springframework/transaction/aspectj/AspectJJtaTransactionManagementConfiguration.java +++ b/spring-aspects/src/main/java/org/springframework/transaction/aspectj/AspectJJtaTransactionManagementConfiguration.java @@ -27,7 +27,7 @@ import org.springframework.transaction.config.TransactionManagementConfigUtils; /** * {@code @Configuration} class that registers the Spring infrastructure beans necessary * to enable AspectJ-based annotation-driven transaction management for the JTA 1.2 - * {@link javax.transaction.Transactional} annotation in addition to Spring's own + * {@link jakarta.transaction.Transactional} annotation in addition to Spring's own * {@link org.springframework.transaction.annotation.Transactional} annotation. * * @author Juergen Hoeller diff --git a/spring-aspects/src/main/java/org/springframework/transaction/aspectj/JtaAnnotationTransactionAspect.aj b/spring-aspects/src/main/java/org/springframework/transaction/aspectj/JtaAnnotationTransactionAspect.aj index 1644ce50651..8b374ea0d86 100644 --- a/spring-aspects/src/main/java/org/springframework/transaction/aspectj/JtaAnnotationTransactionAspect.aj +++ b/spring-aspects/src/main/java/org/springframework/transaction/aspectj/JtaAnnotationTransactionAspect.aj @@ -16,7 +16,7 @@ package org.springframework.transaction.aspectj; -import javax.transaction.Transactional; +import jakarta.transaction.Transactional; import org.aspectj.lang.annotation.RequiredTypes; @@ -24,7 +24,7 @@ import org.springframework.transaction.annotation.AnnotationTransactionAttribute /** * Concrete AspectJ transaction aspect using the JTA 1.2 - * {@link javax.transaction.Transactional} annotation. + * {@link jakarta.transaction.Transactional} annotation. * *

When using this aspect, you must annotate the implementation class * (and/or methods within that class), not the interface (if any) that @@ -42,10 +42,10 @@ import org.springframework.transaction.annotation.AnnotationTransactionAttribute * * @author Stephane Nicoll * @since 4.2 - * @see javax.transaction.Transactional + * @see jakarta.transaction.Transactional * @see AnnotationTransactionAspect */ -@RequiredTypes("javax.transaction.Transactional") +@RequiredTypes("jakarta.transaction.Transactional") public aspect JtaAnnotationTransactionAspect extends AbstractTransactionAspect { public JtaAnnotationTransactionAspect() { diff --git a/spring-aspects/src/test/java/org/springframework/transaction/aspectj/JtaTransactionAspectsTests.java b/spring-aspects/src/test/java/org/springframework/transaction/aspectj/JtaTransactionAspectsTests.java index e0bd918a72e..b6ef121a796 100644 --- a/spring-aspects/src/test/java/org/springframework/transaction/aspectj/JtaTransactionAspectsTests.java +++ b/spring-aspects/src/test/java/org/springframework/transaction/aspectj/JtaTransactionAspectsTests.java @@ -18,8 +18,7 @@ package org.springframework.transaction.aspectj; import java.io.IOException; -import javax.transaction.Transactional; - +import jakarta.transaction.Transactional; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-beans/spring-beans.gradle b/spring-beans/spring-beans.gradle index bf5fad779f0..9c4d0af79e1 100644 --- a/spring-beans/spring-beans.gradle +++ b/spring-beans/spring-beans.gradle @@ -5,13 +5,13 @@ apply plugin: "kotlin" dependencies { api(project(":spring-core")) - optional("javax.inject:javax.inject") + optional("jakarta.inject:jakarta.inject-api") optional("org.yaml:snakeyaml") optional("org.codehaus.groovy:groovy-xml") optional("org.jetbrains.kotlin:kotlin-reflect") optional("org.jetbrains.kotlin:kotlin-stdlib") testImplementation(testFixtures(project(":spring-core"))) - testImplementation("javax.annotation:javax.annotation-api") + testImplementation("jakarta.annotation:jakarta.annotation-api") testFixturesApi("org.junit.jupiter:junit-jupiter-api") testFixturesImplementation("org.assertj:assertj-core") } diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/annotation/Autowired.java b/spring-beans/src/main/java/org/springframework/beans/factory/annotation/Autowired.java index 242fddbad8e..fad36ac5bf0 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/annotation/Autowired.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/annotation/Autowired.java @@ -25,7 +25,7 @@ import java.lang.annotation.Target; /** * Marks a constructor, field, setter method, or config method as to be autowired by * Spring's dependency injection facilities. This is an alternative to the JSR-330 - * {@link javax.inject.Inject} annotation, adding required-vs-optional semantics. + * {@link jakarta.inject.Inject} annotation, adding required-vs-optional semantics. * *

Autowired Constructors

*

Only one constructor of any given bean class may declare this annotation with the diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/annotation/AutowiredAnnotationBeanPostProcessor.java b/spring-beans/src/main/java/org/springframework/beans/factory/annotation/AutowiredAnnotationBeanPostProcessor.java index 2065f6b6e9b..fdbf9353912 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/annotation/AutowiredAnnotationBeanPostProcessor.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/annotation/AutowiredAnnotationBeanPostProcessor.java @@ -75,7 +75,7 @@ import org.springframework.util.StringUtils; * by default, Spring's {@link Autowired @Autowired} and {@link Value @Value} * annotations. * - *

Also supports JSR-330's {@link javax.inject.Inject @Inject} annotation, + *

Also supports JSR-330's {@link jakarta.inject.Inject @Inject} annotation, * if available, as a direct alternative to Spring's own {@code @Autowired}. * *

Autowired Constructors

@@ -154,7 +154,7 @@ public class AutowiredAnnotationBeanPostProcessor implements SmartInstantiationA /** * Create a new {@code AutowiredAnnotationBeanPostProcessor} for Spring's * standard {@link Autowired @Autowired} and {@link Value @Value} annotations. - *

Also supports JSR-330's {@link javax.inject.Inject @Inject} annotation, + *

Also supports JSR-330's {@link jakarta.inject.Inject @Inject} annotation, * if available. */ @SuppressWarnings("unchecked") @@ -163,8 +163,8 @@ public class AutowiredAnnotationBeanPostProcessor implements SmartInstantiationA this.autowiredAnnotationTypes.add(Value.class); try { this.autowiredAnnotationTypes.add((Class) - ClassUtils.forName("javax.inject.Inject", AutowiredAnnotationBeanPostProcessor.class.getClassLoader())); - logger.trace("JSR-330 'javax.inject.Inject' annotation found and supported for autowiring"); + ClassUtils.forName("jakarta.inject.Inject", AutowiredAnnotationBeanPostProcessor.class.getClassLoader())); + logger.trace("JSR-330 'jakarta.inject.Inject' annotation found and supported for autowiring"); } catch (ClassNotFoundException ex) { // JSR-330 API not available - simply skip. @@ -177,7 +177,7 @@ public class AutowiredAnnotationBeanPostProcessor implements SmartInstantiationA * setter methods, and arbitrary config methods. *

The default autowired annotation types are the Spring-provided * {@link Autowired @Autowired} and {@link Value @Value} annotations as well - * as JSR-330's {@link javax.inject.Inject @Inject} annotation, if available. + * as JSR-330's {@link jakarta.inject.Inject @Inject} annotation, if available. *

This setter property exists so that developers can provide their own * (non-Spring-specific) annotation type to indicate that a member is supposed * to be autowired. @@ -193,7 +193,7 @@ public class AutowiredAnnotationBeanPostProcessor implements SmartInstantiationA * setter methods, and arbitrary config methods. *

The default autowired annotation types are the Spring-provided * {@link Autowired @Autowired} and {@link Value @Value} annotations as well - * as JSR-330's {@link javax.inject.Inject @Inject} annotation, if available. + * as JSR-330's {@link jakarta.inject.Inject @Inject} annotation, if available. *

This setter property exists so that developers can provide their own * (non-Spring-specific) annotation types to indicate that a member is supposed * to be autowired. @@ -537,9 +537,7 @@ public class AutowiredAnnotationBeanPostProcessor implements SmartInstantiationA * @param ann the Autowired annotation * @return whether the annotation indicates that a dependency is required */ - @SuppressWarnings({"deprecation", "cast"}) protected boolean determineRequiredStatus(MergedAnnotation ann) { - // The following (AnnotationAttributes) cast is required on JDK 9+. return determineRequiredStatus((AnnotationAttributes) ann.asMap(mergedAnnotation -> new AnnotationAttributes(mergedAnnotation.getType()))); } diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/annotation/InitDestroyAnnotationBeanPostProcessor.java b/spring-beans/src/main/java/org/springframework/beans/factory/annotation/InitDestroyAnnotationBeanPostProcessor.java index f76a03b8dc9..6316848a5a7 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/annotation/InitDestroyAnnotationBeanPostProcessor.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/annotation/InitDestroyAnnotationBeanPostProcessor.java @@ -66,9 +66,9 @@ import org.springframework.util.ReflectionUtils; * init method and destroy method, respectively. * *

Spring's {@link org.springframework.context.annotation.CommonAnnotationBeanPostProcessor} - * supports the JSR-250 {@link javax.annotation.PostConstruct} and {@link javax.annotation.PreDestroy} + * supports the JSR-250 {@link jakarta.annotation.PostConstruct} and {@link jakarta.annotation.PreDestroy} * annotations out of the box, as init annotation and destroy annotation, respectively. - * Furthermore, it also supports the {@link javax.annotation.Resource} annotation + * Furthermore, it also supports the {@link jakarta.annotation.Resource} annotation * for annotation-driven injection of named beans. * * @author Juergen Hoeller @@ -117,7 +117,7 @@ public class InitDestroyAnnotationBeanPostProcessor * methods to call after configuration of a bean. *

Any custom annotation can be used, since there are no required * annotation attributes. There is no default, although a typical choice - * is the JSR-250 {@link javax.annotation.PostConstruct} annotation. + * is the JSR-250 {@link jakarta.annotation.PostConstruct} annotation. */ public void setInitAnnotationType(Class initAnnotationType) { this.initAnnotationType = initAnnotationType; @@ -128,7 +128,7 @@ public class InitDestroyAnnotationBeanPostProcessor * methods to call when the context is shutting down. *

Any custom annotation can be used, since there are no required * annotation attributes. There is no default, although a typical choice - * is the JSR-250 {@link javax.annotation.PreDestroy} annotation. + * is the JSR-250 {@link jakarta.annotation.PreDestroy} annotation. */ public void setDestroyAnnotationType(Class destroyAnnotationType) { this.destroyAnnotationType = destroyAnnotationType; diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/annotation/QualifierAnnotationAutowireCandidateResolver.java b/spring-beans/src/main/java/org/springframework/beans/factory/annotation/QualifierAnnotationAutowireCandidateResolver.java index e4e104b4c8e..e38c6733864 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/annotation/QualifierAnnotationAutowireCandidateResolver.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/annotation/QualifierAnnotationAutowireCandidateResolver.java @@ -46,7 +46,7 @@ import org.springframework.util.ObjectUtils; * against {@link Qualifier qualifier annotations} on the field or parameter to be autowired. * Also supports suggested expression values through a {@link Value value} annotation. * - *

Also supports JSR-330's {@link javax.inject.Qualifier} annotation, if available. + *

Also supports JSR-330's {@link jakarta.inject.Qualifier} annotation, if available. * * @author Mark Fisher * @author Juergen Hoeller @@ -66,13 +66,13 @@ public class QualifierAnnotationAutowireCandidateResolver extends GenericTypeAwa /** * Create a new QualifierAnnotationAutowireCandidateResolver * for Spring's standard {@link Qualifier} annotation. - *

Also supports JSR-330's {@link javax.inject.Qualifier} annotation, if available. + *

Also supports JSR-330's {@link jakarta.inject.Qualifier} annotation, if available. */ @SuppressWarnings("unchecked") public QualifierAnnotationAutowireCandidateResolver() { this.qualifierTypes.add(Qualifier.class); try { - this.qualifierTypes.add((Class) ClassUtils.forName("javax.inject.Qualifier", + this.qualifierTypes.add((Class) ClassUtils.forName("jakarta.inject.Qualifier", QualifierAnnotationAutowireCandidateResolver.class.getClassLoader())); } catch (ClassNotFoundException ex) { diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/config/DependencyDescriptor.java b/spring-beans/src/main/java/org/springframework/beans/factory/config/DependencyDescriptor.java index d5fd082162b..c16db6ca73a 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/config/DependencyDescriptor.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/config/DependencyDescriptor.java @@ -182,7 +182,7 @@ public class DependencyDescriptor extends InjectionPoint implements Serializable /** * Check whether the underlying field is annotated with any variant of a - * {@code Nullable} annotation, e.g. {@code javax.annotation.Nullable} or + * {@code Nullable} annotation, e.g. {@code jakarta.annotation.Nullable} or * {@code edu.umd.cs.findbugs.annotations.Nullable}. */ private boolean hasNullableAnnotation() { diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/config/ProviderCreatingFactoryBean.java b/spring-beans/src/main/java/org/springframework/beans/factory/config/ProviderCreatingFactoryBean.java index 11933292d41..96d7bf3a603 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/config/ProviderCreatingFactoryBean.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/config/ProviderCreatingFactoryBean.java @@ -18,7 +18,7 @@ package org.springframework.beans.factory.config; import java.io.Serializable; -import javax.inject.Provider; +import jakarta.inject.Provider; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; @@ -27,18 +27,18 @@ import org.springframework.util.Assert; /** * A {@link org.springframework.beans.factory.FactoryBean} implementation that - * returns a value which is a JSR-330 {@link javax.inject.Provider} that in turn + * returns a value which is a JSR-330 {@link jakarta.inject.Provider} that in turn * returns a bean sourced from a {@link org.springframework.beans.factory.BeanFactory}. * *

This is basically a JSR-330 compliant variant of Spring's good old * {@link ObjectFactoryCreatingFactoryBean}. It can be used for traditional * external dependency injection configuration that targets a property or - * constructor argument of type {@code javax.inject.Provider}, as an + * constructor argument of type {@code jakarta.inject.Provider}, as an * alternative to JSR-330's {@code @Inject} annotation-driven approach. * * @author Juergen Hoeller * @since 3.0.2 - * @see javax.inject.Provider + * @see jakarta.inject.Provider * @see ObjectFactoryCreatingFactoryBean */ public class ProviderCreatingFactoryBean extends AbstractFactoryBean> { diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/config/Scope.java b/spring-beans/src/main/java/org/springframework/beans/factory/config/Scope.java index d2054ae059a..9606eb87264 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/config/Scope.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/config/Scope.java @@ -138,7 +138,7 @@ public interface Scope { *

The exact meaning of the conversation ID depends on the underlying * storage mechanism. In the case of session-scoped objects, the * conversation ID would typically be equal to (or derived from) the - * {@link javax.servlet.http.HttpSession#getId() session ID}; in the + * {@link jakarta.servlet.http.HttpSession#getId() session ID}; in the * case of a custom conversation that sits within the overall session, * the specific ID for the current conversation would be appropriate. *

Note: This is an optional operation. It is perfectly valid to diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java index a4f29b0ce87..7c16748e141 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java @@ -41,7 +41,7 @@ import java.util.function.Consumer; import java.util.function.Predicate; import java.util.stream.Stream; -import javax.inject.Provider; +import jakarta.inject.Provider; import org.springframework.beans.BeansException; import org.springframework.beans.TypeConverter; @@ -125,7 +125,7 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto static { try { javaxInjectProviderClass = - ClassUtils.forName("javax.inject.Provider", DefaultListableBeanFactory.class.getClassLoader()); + ClassUtils.forName("jakarta.inject.Provider", DefaultListableBeanFactory.class.getClassLoader()); } catch (ClassNotFoundException ex) { // JSR-330 API not available - Provider interface simply not supported then. @@ -1651,7 +1651,7 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto /** * Determine the candidate with the highest priority in the given set of beans. - *

Based on {@code @javax.annotation.Priority}. As defined by the related + *

Based on {@code @jakarta.annotation.Priority}. As defined by the related * {@link org.springframework.core.Ordered} interface, the lowest value has * the highest priority. * @param candidates a Map of candidate names and candidate instances @@ -1711,7 +1711,7 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto /** * Return the priority assigned for the given bean instance by - * the {@code javax.annotation.Priority} annotation. + * the {@code jakarta.annotation.Priority} annotation. *

The default implementation delegates to the specified * {@link #setDependencyComparator dependency comparator}, checking its * {@link OrderComparator#getPriority method} if it is an extension of @@ -2086,8 +2086,8 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto /** - * Separate inner class for avoiding a hard dependency on the {@code javax.inject} API. - * Actual {@code javax.inject.Provider} implementation is nested here in order to make it + * Separate inner class for avoiding a hard dependency on the {@code jakarta.inject} API. + * Actual {@code jakarta.inject.Provider} implementation is nested here in order to make it * invisible for Graal's introspection of DefaultListableBeanFactory's nested classes. */ private class Jsr330Factory implements Serializable { diff --git a/spring-beans/src/test/java/org/springframework/beans/factory/DefaultListableBeanFactoryTests.java b/spring-beans/src/test/java/org/springframework/beans/factory/DefaultListableBeanFactoryTests.java index 2cb8d8a9cd1..fce8a043b1b 100644 --- a/spring-beans/src/test/java/org/springframework/beans/factory/DefaultListableBeanFactoryTests.java +++ b/spring-beans/src/test/java/org/springframework/beans/factory/DefaultListableBeanFactoryTests.java @@ -36,8 +36,7 @@ import java.util.concurrent.Callable; import java.util.stream.Collectors; import java.util.stream.IntStream; -import javax.annotation.Priority; - +import jakarta.annotation.Priority; import org.junit.jupiter.api.Test; import org.springframework.beans.BeansException; diff --git a/spring-beans/src/test/java/org/springframework/beans/factory/annotation/InjectAnnotationBeanPostProcessorTests.java b/spring-beans/src/test/java/org/springframework/beans/factory/annotation/InjectAnnotationBeanPostProcessorTests.java index aa4c1cb20bf..d4b97bdb19c 100644 --- a/spring-beans/src/test/java/org/springframework/beans/factory/annotation/InjectAnnotationBeanPostProcessorTests.java +++ b/spring-beans/src/test/java/org/springframework/beans/factory/annotation/InjectAnnotationBeanPostProcessorTests.java @@ -23,10 +23,9 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import javax.inject.Inject; -import javax.inject.Named; -import javax.inject.Provider; - +import jakarta.inject.Inject; +import jakarta.inject.Named; +import jakarta.inject.Provider; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -51,7 +50,7 @@ import static org.assertj.core.api.Assertions.assertThatExceptionOfType; /** * Unit tests for {@link org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor} - * processing the JSR-330 {@link javax.inject.Inject} annotation. + * processing the JSR-330 {@link jakarta.inject.Inject} annotation. * * @author Juergen Hoeller * @since 3.0 diff --git a/spring-beans/src/test/java/org/springframework/beans/factory/config/ObjectFactoryCreatingFactoryBeanTests.java b/spring-beans/src/test/java/org/springframework/beans/factory/config/ObjectFactoryCreatingFactoryBeanTests.java index 7357ba9069d..d55d48bb64a 100644 --- a/spring-beans/src/test/java/org/springframework/beans/factory/config/ObjectFactoryCreatingFactoryBeanTests.java +++ b/spring-beans/src/test/java/org/springframework/beans/factory/config/ObjectFactoryCreatingFactoryBeanTests.java @@ -18,8 +18,7 @@ package org.springframework.beans.factory.config; import java.util.Date; -import javax.inject.Provider; - +import jakarta.inject.Provider; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-context-indexer/spring-context-indexer.gradle b/spring-context-indexer/spring-context-indexer.gradle index 2c1df2e91dc..40d69a22670 100644 --- a/spring-context-indexer/spring-context-indexer.gradle +++ b/spring-context-indexer/spring-context-indexer.gradle @@ -2,8 +2,8 @@ description = "Spring Context Indexer" dependencies { testImplementation(project(":spring-context")) - testImplementation("javax.inject:javax.inject") - testImplementation("javax.annotation:javax.annotation-api") - testImplementation("javax.transaction:javax.transaction-api") - testImplementation("org.eclipse.persistence:javax.persistence") + testImplementation("jakarta.inject:jakarta.inject-api") + testImplementation("jakarta.annotation:jakarta.annotation-api") + testImplementation("jakarta.persistence:jakarta.persistence-api") + testImplementation("jakarta.transaction:jakarta.transaction-api") } diff --git a/spring-context-indexer/src/main/java/org/springframework/context/index/processor/StandardStereotypesProvider.java b/spring-context-indexer/src/main/java/org/springframework/context/index/processor/StandardStereotypesProvider.java index 3a7eb01dbbc..082c2584962 100644 --- a/spring-context-indexer/src/main/java/org/springframework/context/index/processor/StandardStereotypesProvider.java +++ b/spring-context-indexer/src/main/java/org/springframework/context/index/processor/StandardStereotypesProvider.java @@ -49,7 +49,7 @@ class StandardStereotypesProvider implements StereotypesProvider { } for (AnnotationMirror annotation : this.typeHelper.getAllAnnotationMirrors(element)) { String type = this.typeHelper.getType(annotation); - if (type.startsWith("javax.")) { + if (type.startsWith("jakarta.")) { stereotypes.add(type); } } diff --git a/spring-context-indexer/src/test/java/org/springframework/context/index/processor/CandidateComponentsIndexerTests.java b/spring-context-indexer/src/test/java/org/springframework/context/index/processor/CandidateComponentsIndexerTests.java index aa1a21d7367..be3d30dc420 100644 --- a/spring-context-indexer/src/test/java/org/springframework/context/index/processor/CandidateComponentsIndexerTests.java +++ b/spring-context-indexer/src/test/java/org/springframework/context/index/processor/CandidateComponentsIndexerTests.java @@ -21,14 +21,13 @@ import java.io.FileInputStream; import java.io.IOException; import java.nio.file.Path; -import javax.annotation.ManagedBean; -import javax.inject.Named; -import javax.persistence.Converter; -import javax.persistence.Embeddable; -import javax.persistence.Entity; -import javax.persistence.MappedSuperclass; -import javax.transaction.Transactional; - +import jakarta.annotation.ManagedBean; +import jakarta.inject.Named; +import jakarta.persistence.Converter; +import jakarta.persistence.Embeddable; +import jakarta.persistence.Entity; +import jakarta.persistence.MappedSuperclass; +import jakarta.transaction.Transactional; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; diff --git a/spring-context-indexer/src/test/java/org/springframework/context/index/sample/cdi/SampleManagedBean.java b/spring-context-indexer/src/test/java/org/springframework/context/index/sample/cdi/SampleManagedBean.java index d3bf3dd8b78..fb34361664d 100644 --- a/spring-context-indexer/src/test/java/org/springframework/context/index/sample/cdi/SampleManagedBean.java +++ b/spring-context-indexer/src/test/java/org/springframework/context/index/sample/cdi/SampleManagedBean.java @@ -16,7 +16,7 @@ package org.springframework.context.index.sample.cdi; -import javax.annotation.ManagedBean; +import jakarta.annotation.ManagedBean; /** * Test candidate for a CDI {@link ManagedBean}. diff --git a/spring-context-indexer/src/test/java/org/springframework/context/index/sample/cdi/SampleNamed.java b/spring-context-indexer/src/test/java/org/springframework/context/index/sample/cdi/SampleNamed.java index 20ca0342e68..d975af6b1f3 100644 --- a/spring-context-indexer/src/test/java/org/springframework/context/index/sample/cdi/SampleNamed.java +++ b/spring-context-indexer/src/test/java/org/springframework/context/index/sample/cdi/SampleNamed.java @@ -16,7 +16,7 @@ package org.springframework.context.index.sample.cdi; -import javax.inject.Named; +import jakarta.inject.Named; /** * Test candidate for a CDI {@link Named} bean. diff --git a/spring-context-indexer/src/test/java/org/springframework/context/index/sample/cdi/SampleTransactional.java b/spring-context-indexer/src/test/java/org/springframework/context/index/sample/cdi/SampleTransactional.java index f104d5604e8..273aabcb14f 100644 --- a/spring-context-indexer/src/test/java/org/springframework/context/index/sample/cdi/SampleTransactional.java +++ b/spring-context-indexer/src/test/java/org/springframework/context/index/sample/cdi/SampleTransactional.java @@ -16,7 +16,7 @@ package org.springframework.context.index.sample.cdi; -import javax.transaction.Transactional; +import jakarta.transaction.Transactional; /** * Test candidate for {@link Transactional}. This verifies that the annotation processor diff --git a/spring-context-indexer/src/test/java/org/springframework/context/index/sample/jpa/SampleConverter.java b/spring-context-indexer/src/test/java/org/springframework/context/index/sample/jpa/SampleConverter.java index 129f090f577..474dd5c1a29 100644 --- a/spring-context-indexer/src/test/java/org/springframework/context/index/sample/jpa/SampleConverter.java +++ b/spring-context-indexer/src/test/java/org/springframework/context/index/sample/jpa/SampleConverter.java @@ -16,7 +16,7 @@ package org.springframework.context.index.sample.jpa; -import javax.persistence.Converter; +import jakarta.persistence.Converter; /** * Test candidate for {@link Converter}. diff --git a/spring-context-indexer/src/test/java/org/springframework/context/index/sample/jpa/SampleEmbeddable.java b/spring-context-indexer/src/test/java/org/springframework/context/index/sample/jpa/SampleEmbeddable.java index 79269507395..15f3356ce70 100644 --- a/spring-context-indexer/src/test/java/org/springframework/context/index/sample/jpa/SampleEmbeddable.java +++ b/spring-context-indexer/src/test/java/org/springframework/context/index/sample/jpa/SampleEmbeddable.java @@ -16,7 +16,7 @@ package org.springframework.context.index.sample.jpa; -import javax.persistence.Embeddable; +import jakarta.persistence.Embeddable; /** * Test candidate for {@link Embeddable}. diff --git a/spring-context-indexer/src/test/java/org/springframework/context/index/sample/jpa/SampleEntity.java b/spring-context-indexer/src/test/java/org/springframework/context/index/sample/jpa/SampleEntity.java index 101c3891d90..ae6e87559d2 100644 --- a/spring-context-indexer/src/test/java/org/springframework/context/index/sample/jpa/SampleEntity.java +++ b/spring-context-indexer/src/test/java/org/springframework/context/index/sample/jpa/SampleEntity.java @@ -16,7 +16,7 @@ package org.springframework.context.index.sample.jpa; -import javax.persistence.Entity; +import jakarta.persistence.Entity; /** * Test candidate for {@link Entity}. diff --git a/spring-context-indexer/src/test/java/org/springframework/context/index/sample/jpa/SampleMappedSuperClass.java b/spring-context-indexer/src/test/java/org/springframework/context/index/sample/jpa/SampleMappedSuperClass.java index 73737f4e98b..fbca3e43613 100644 --- a/spring-context-indexer/src/test/java/org/springframework/context/index/sample/jpa/SampleMappedSuperClass.java +++ b/spring-context-indexer/src/test/java/org/springframework/context/index/sample/jpa/SampleMappedSuperClass.java @@ -16,7 +16,7 @@ package org.springframework.context.index.sample.jpa; -import javax.persistence.MappedSuperclass; +import jakarta.persistence.MappedSuperclass; /** * Test candidate for {@link MappedSuperclass}. diff --git a/spring-context-support/spring-context-support.gradle b/spring-context-support/spring-context-support.gradle index 843d1920ebe..160f8028985 100644 --- a/spring-context-support/spring-context-support.gradle +++ b/spring-context-support/spring-context-support.gradle @@ -6,13 +6,11 @@ dependencies { api(project(":spring-core")) optional(project(":spring-jdbc")) // for Quartz support optional(project(":spring-tx")) // for Quartz support - optional("javax.activation:javax.activation-api") - optional("javax.mail:javax.mail-api") + optional("jakarta.activation:jakarta.activation-api") + optional("jakarta.mail:jakarta.mail-api") optional("javax.cache:cache-api") optional("com.github.ben-manes.caffeine:caffeine") - optional("net.sf.ehcache:ehcache") optional("org.quartz-scheduler:quartz") - optional("org.codehaus.fabric3.api:commonj") optional("org.freemarker:freemarker") testImplementation(project(":spring-context")) testImplementation(testFixtures(project(":spring-beans"))) @@ -20,12 +18,11 @@ dependencies { testImplementation(testFixtures(project(":spring-core"))) testImplementation(testFixtures(project(":spring-tx"))) testImplementation("org.hsqldb:hsqldb") - testImplementation("org.hibernate:hibernate-validator") - testImplementation("javax.annotation:javax.annotation-api") + testImplementation("jakarta.annotation:jakarta.annotation-api") testRuntimeOnly("org.ehcache:jcache") testRuntimeOnly("org.ehcache:ehcache") - testRuntimeOnly("org.glassfish:javax.el") - testRuntimeOnly("com.sun.mail:javax.mail") + testRuntimeOnly("org.glassfish:jakarta.el") + testRuntimeOnly("com.sun.mail:jakarta.mail") testFixturesApi("org.junit.jupiter:junit-jupiter-api") testFixturesImplementation("org.assertj:assertj-core") testFixturesImplementation("org.mockito:mockito-core") diff --git a/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheCache.java b/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheCache.java deleted file mode 100644 index 4309fa73a2c..00000000000 --- a/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheCache.java +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Copyright 2002-2020 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.cache.ehcache; - -import java.util.concurrent.Callable; - -import net.sf.ehcache.Ehcache; -import net.sf.ehcache.Element; -import net.sf.ehcache.Status; - -import org.springframework.cache.Cache; -import org.springframework.cache.support.SimpleValueWrapper; -import org.springframework.lang.Nullable; -import org.springframework.util.Assert; - -/** - * {@link Cache} implementation on top of an {@link Ehcache} instance. - * - * @author Costin Leau - * @author Juergen Hoeller - * @author Stephane Nicoll - * @since 3.1 - * @see EhCacheCacheManager - */ -public class EhCacheCache implements Cache { - - private final Ehcache cache; - - - /** - * Create an {@link EhCacheCache} instance. - * @param ehcache the backing Ehcache instance - */ - public EhCacheCache(Ehcache ehcache) { - Assert.notNull(ehcache, "Ehcache must not be null"); - Status status = ehcache.getStatus(); - if (!Status.STATUS_ALIVE.equals(status)) { - throw new IllegalArgumentException( - "An 'alive' Ehcache is required - current cache is " + status.toString()); - } - this.cache = ehcache; - } - - - @Override - public final String getName() { - return this.cache.getName(); - } - - @Override - public final Ehcache getNativeCache() { - return this.cache; - } - - @Override - @Nullable - public ValueWrapper get(Object key) { - Element element = lookup(key); - return toValueWrapper(element); - } - - @SuppressWarnings("unchecked") - @Override - @Nullable - public T get(Object key, @Nullable Class type) { - Element element = this.cache.get(key); - Object value = (element != null ? element.getObjectValue() : null); - if (value != null && type != null && !type.isInstance(value)) { - throw new IllegalStateException( - "Cached value is not of required type [" + type.getName() + "]: " + value); - } - return (T) value; - } - - @SuppressWarnings("unchecked") - @Override - @Nullable - public T get(Object key, Callable valueLoader) { - Element element = lookup(key); - if (element != null) { - return (T) element.getObjectValue(); - } - else { - this.cache.acquireWriteLockOnKey(key); - try { - element = lookup(key); // one more attempt with the write lock - if (element != null) { - return (T) element.getObjectValue(); - } - else { - return loadValue(key, valueLoader); - } - } - finally { - this.cache.releaseWriteLockOnKey(key); - } - } - } - - private T loadValue(Object key, Callable valueLoader) { - T value; - try { - value = valueLoader.call(); - } - catch (Throwable ex) { - throw new ValueRetrievalException(key, valueLoader, ex); - } - put(key, value); - return value; - } - - @Override - public void put(Object key, @Nullable Object value) { - this.cache.put(new Element(key, value)); - } - - @Override - @Nullable - public ValueWrapper putIfAbsent(Object key, @Nullable Object value) { - Element existingElement = this.cache.putIfAbsent(new Element(key, value)); - return toValueWrapper(existingElement); - } - - @Override - public void evict(Object key) { - this.cache.remove(key); - } - - @Override - public boolean evictIfPresent(Object key) { - return this.cache.remove(key); - } - - @Override - public void clear() { - this.cache.removeAll(); - } - - @Override - public boolean invalidate() { - boolean notEmpty = (this.cache.getSize() > 0); - this.cache.removeAll(); - return notEmpty; - } - - - @Nullable - private Element lookup(Object key) { - return this.cache.get(key); - } - - @Nullable - private ValueWrapper toValueWrapper(@Nullable Element element) { - return (element != null ? new SimpleValueWrapper(element.getObjectValue()) : null); - } - -} diff --git a/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheCacheManager.java b/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheCacheManager.java deleted file mode 100644 index f3e58a55b28..00000000000 --- a/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheCacheManager.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright 2002-2020 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.cache.ehcache; - -import java.util.Collection; -import java.util.LinkedHashSet; - -import net.sf.ehcache.Ehcache; -import net.sf.ehcache.Status; - -import org.springframework.cache.Cache; -import org.springframework.cache.transaction.AbstractTransactionSupportingCacheManager; -import org.springframework.lang.Nullable; -import org.springframework.util.Assert; - -/** - * CacheManager backed by an EhCache {@link net.sf.ehcache.CacheManager}. - * - * @author Costin Leau - * @author Juergen Hoeller - * @author Stephane Nicoll - * @since 3.1 - * @see EhCacheCache - */ -public class EhCacheCacheManager extends AbstractTransactionSupportingCacheManager { - - @Nullable - private net.sf.ehcache.CacheManager cacheManager; - - - /** - * Create a new EhCacheCacheManager, setting the target EhCache CacheManager - * through the {@link #setCacheManager} bean property. - */ - public EhCacheCacheManager() { - } - - /** - * Create a new EhCacheCacheManager for the given backing EhCache CacheManager. - * @param cacheManager the backing EhCache {@link net.sf.ehcache.CacheManager} - */ - public EhCacheCacheManager(net.sf.ehcache.CacheManager cacheManager) { - this.cacheManager = cacheManager; - } - - - /** - * Set the backing EhCache {@link net.sf.ehcache.CacheManager}. - */ - public void setCacheManager(@Nullable net.sf.ehcache.CacheManager cacheManager) { - this.cacheManager = cacheManager; - } - - /** - * Return the backing EhCache {@link net.sf.ehcache.CacheManager}. - */ - @Nullable - public net.sf.ehcache.CacheManager getCacheManager() { - return this.cacheManager; - } - - @Override - public void afterPropertiesSet() { - if (getCacheManager() == null) { - setCacheManager(EhCacheManagerUtils.buildCacheManager()); - } - super.afterPropertiesSet(); - } - - - @Override - protected Collection loadCaches() { - net.sf.ehcache.CacheManager cacheManager = getCacheManager(); - Assert.state(cacheManager != null, "No CacheManager set"); - - Status status = cacheManager.getStatus(); - if (!Status.STATUS_ALIVE.equals(status)) { - throw new IllegalStateException( - "An 'alive' EhCache CacheManager is required - current cache is " + status.toString()); - } - - String[] names = getCacheManager().getCacheNames(); - Collection caches = new LinkedHashSet<>(names.length); - for (String name : names) { - caches.add(new EhCacheCache(getCacheManager().getEhcache(name))); - } - return caches; - } - - @Override - protected Cache getMissingCache(String name) { - net.sf.ehcache.CacheManager cacheManager = getCacheManager(); - Assert.state(cacheManager != null, "No CacheManager set"); - - // Check the EhCache cache again (in case the cache was added at runtime) - Ehcache ehcache = cacheManager.getEhcache(name); - if (ehcache != null) { - return new EhCacheCache(ehcache); - } - return null; - } - -} diff --git a/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheFactoryBean.java b/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheFactoryBean.java deleted file mode 100644 index 3d4f839a3b9..00000000000 --- a/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheFactoryBean.java +++ /dev/null @@ -1,329 +0,0 @@ -/* - * Copyright 2002-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.cache.ehcache; - -import java.util.Set; - -import net.sf.ehcache.Cache; -import net.sf.ehcache.CacheException; -import net.sf.ehcache.CacheManager; -import net.sf.ehcache.Ehcache; -import net.sf.ehcache.bootstrap.BootstrapCacheLoader; -import net.sf.ehcache.config.CacheConfiguration; -import net.sf.ehcache.constructs.blocking.BlockingCache; -import net.sf.ehcache.constructs.blocking.CacheEntryFactory; -import net.sf.ehcache.constructs.blocking.SelfPopulatingCache; -import net.sf.ehcache.constructs.blocking.UpdatingCacheEntryFactory; -import net.sf.ehcache.constructs.blocking.UpdatingSelfPopulatingCache; -import net.sf.ehcache.event.CacheEventListener; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import org.springframework.beans.factory.BeanNameAware; -import org.springframework.beans.factory.FactoryBean; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.lang.Nullable; - -/** - * {@link FactoryBean} that creates a named EhCache {@link net.sf.ehcache.Cache} instance - * (or a decorator that implements the {@link net.sf.ehcache.Ehcache} interface), - * representing a cache region within an EhCache {@link net.sf.ehcache.CacheManager}. - * - *

If the specified named cache is not configured in the cache configuration descriptor, - * this FactoryBean will construct an instance of a Cache with the provided name and the - * specified cache properties and add it to the CacheManager for later retrieval. If some - * or all properties are not set at configuration time, this FactoryBean will use defaults. - * - *

Note: If the named Cache instance is found, the properties will be ignored and the - * Cache instance will be retrieved from the CacheManager. - * - *

Note: As of Spring 5.0, Spring's EhCache support requires EhCache 2.10 or higher. - * - * @author Juergen Hoeller - * @author Dmitriy Kopylenko - * @since 1.1.1 - * @see #setCacheManager - * @see EhCacheManagerFactoryBean - * @see net.sf.ehcache.Cache - */ -public class EhCacheFactoryBean extends CacheConfiguration implements FactoryBean, BeanNameAware, InitializingBean { - - protected final Log logger = LogFactory.getLog(getClass()); - - @Nullable - private CacheManager cacheManager; - - private boolean blocking = false; - - @Nullable - private CacheEntryFactory cacheEntryFactory; - - @Nullable - private BootstrapCacheLoader bootstrapCacheLoader; - - @Nullable - private Set cacheEventListeners; - - private boolean disabled = false; - - @Nullable - private String beanName; - - @Nullable - private Ehcache cache; - - - public EhCacheFactoryBean() { - setMaxEntriesLocalHeap(10000); - setMaxEntriesLocalDisk(10000000); - setTimeToLiveSeconds(120); - setTimeToIdleSeconds(120); - } - - - /** - * Set a CacheManager from which to retrieve a named Cache instance. - * By default, {@code CacheManager.getInstance()} will be called. - *

Note that in particular for persistent caches, it is advisable to - * properly handle the shutdown of the CacheManager: Set up a separate - * EhCacheManagerFactoryBean and pass a reference to this bean property. - *

A separate EhCacheManagerFactoryBean is also necessary for loading - * EhCache configuration from a non-default config location. - * @see EhCacheManagerFactoryBean - * @see net.sf.ehcache.CacheManager#getInstance - */ - public void setCacheManager(CacheManager cacheManager) { - this.cacheManager = cacheManager; - } - - /** - * Set a name for which to retrieve or create a cache instance. - * Default is the bean name of this EhCacheFactoryBean. - */ - public void setCacheName(String cacheName) { - setName(cacheName); - } - - /** - * Set the time to live. - * @see #setTimeToLiveSeconds(long) - */ - public void setTimeToLive(int timeToLive) { - setTimeToLiveSeconds(timeToLive); - } - - /** - * Set the time to idle. - * @see #setTimeToIdleSeconds(long) - */ - public void setTimeToIdle(int timeToIdle) { - setTimeToIdleSeconds(timeToIdle); - } - - /** - * Set the disk spool buffer size (in MB). - * @see #setDiskSpoolBufferSizeMB(int) - */ - public void setDiskSpoolBufferSize(int diskSpoolBufferSize) { - setDiskSpoolBufferSizeMB(diskSpoolBufferSize); - } - - /** - * Set whether to use a blocking cache that lets read attempts block - * until the requested element is created. - *

If you intend to build a self-populating blocking cache, - * consider specifying a {@link #setCacheEntryFactory CacheEntryFactory}. - * @see net.sf.ehcache.constructs.blocking.BlockingCache - * @see #setCacheEntryFactory - */ - public void setBlocking(boolean blocking) { - this.blocking = blocking; - } - - /** - * Set an EhCache {@link net.sf.ehcache.constructs.blocking.CacheEntryFactory} - * to use for a self-populating cache. If such a factory is specified, - * the cache will be decorated with EhCache's - * {@link net.sf.ehcache.constructs.blocking.SelfPopulatingCache}. - *

The specified factory can be of type - * {@link net.sf.ehcache.constructs.blocking.UpdatingCacheEntryFactory}, - * which will lead to the use of an - * {@link net.sf.ehcache.constructs.blocking.UpdatingSelfPopulatingCache}. - *

Note: Any such self-populating cache is automatically a blocking cache. - * @see net.sf.ehcache.constructs.blocking.SelfPopulatingCache - * @see net.sf.ehcache.constructs.blocking.UpdatingSelfPopulatingCache - * @see net.sf.ehcache.constructs.blocking.UpdatingCacheEntryFactory - */ - public void setCacheEntryFactory(CacheEntryFactory cacheEntryFactory) { - this.cacheEntryFactory = cacheEntryFactory; - } - - /** - * Set an EhCache {@link net.sf.ehcache.bootstrap.BootstrapCacheLoader} - * for this cache, if any. - */ - public void setBootstrapCacheLoader(BootstrapCacheLoader bootstrapCacheLoader) { - this.bootstrapCacheLoader = bootstrapCacheLoader; - } - - /** - * Specify EhCache {@link net.sf.ehcache.event.CacheEventListener cache event listeners} - * to registered with this cache. - */ - public void setCacheEventListeners(Set cacheEventListeners) { - this.cacheEventListeners = cacheEventListeners; - } - - /** - * Set whether this cache should be marked as disabled. - * @see net.sf.ehcache.Cache#setDisabled - */ - public void setDisabled(boolean disabled) { - this.disabled = disabled; - } - - @Override - public void setBeanName(String name) { - this.beanName = name; - } - - - @Override - public void afterPropertiesSet() throws CacheException { - // If no cache name given, use bean name as cache name. - String cacheName = getName(); - if (cacheName == null) { - cacheName = this.beanName; - if (cacheName != null) { - setName(cacheName); - } - } - - // If no CacheManager given, fetch the default. - if (this.cacheManager == null) { - if (logger.isDebugEnabled()) { - logger.debug("Using default EhCache CacheManager for cache region '" + cacheName + "'"); - } - this.cacheManager = CacheManager.getInstance(); - } - - synchronized (this.cacheManager) { - // Fetch cache region: If none with the given name exists, create one on the fly. - Ehcache rawCache; - boolean cacheExists = this.cacheManager.cacheExists(cacheName); - - if (cacheExists) { - if (logger.isDebugEnabled()) { - logger.debug("Using existing EhCache cache region '" + cacheName + "'"); - } - rawCache = this.cacheManager.getEhcache(cacheName); - } - else { - if (logger.isDebugEnabled()) { - logger.debug("Creating new EhCache cache region '" + cacheName + "'"); - } - rawCache = createCache(); - rawCache.setBootstrapCacheLoader(this.bootstrapCacheLoader); - } - - if (this.cacheEventListeners != null) { - for (CacheEventListener listener : this.cacheEventListeners) { - rawCache.getCacheEventNotificationService().registerListener(listener); - } - } - - // Needs to happen after listener registration but before setStatisticsEnabled - if (!cacheExists) { - this.cacheManager.addCache(rawCache); - } - - if (this.disabled) { - rawCache.setDisabled(true); - } - - Ehcache decoratedCache = decorateCache(rawCache); - if (decoratedCache != rawCache) { - this.cacheManager.replaceCacheWithDecoratedCache(rawCache, decoratedCache); - } - this.cache = decoratedCache; - } - } - - /** - * Create a raw Cache object based on the configuration of this FactoryBean. - */ - protected Cache createCache() { - return new Cache(this); - } - - /** - * Decorate the given Cache, if necessary. - * @param cache the raw Cache object, based on the configuration of this FactoryBean - * @return the (potentially decorated) cache object to be registered with the CacheManager - */ - protected Ehcache decorateCache(Ehcache cache) { - if (this.cacheEntryFactory != null) { - if (this.cacheEntryFactory instanceof UpdatingCacheEntryFactory) { - return new UpdatingSelfPopulatingCache(cache, (UpdatingCacheEntryFactory) this.cacheEntryFactory); - } - else { - return new SelfPopulatingCache(cache, this.cacheEntryFactory); - } - } - if (this.blocking) { - return new BlockingCache(cache); - } - return cache; - } - - - @Override - @Nullable - public Ehcache getObject() { - return this.cache; - } - - /** - * Predict the particular {@code Ehcache} implementation that will be returned from - * {@link #getObject()} based on logic in {@link #createCache()} and - * {@link #decorateCache(Ehcache)} as orchestrated by {@link #afterPropertiesSet()}. - */ - @Override - public Class getObjectType() { - if (this.cache != null) { - return this.cache.getClass(); - } - if (this.cacheEntryFactory != null) { - if (this.cacheEntryFactory instanceof UpdatingCacheEntryFactory) { - return UpdatingSelfPopulatingCache.class; - } - else { - return SelfPopulatingCache.class; - } - } - if (this.blocking) { - return BlockingCache.class; - } - return Cache.class; - } - - @Override - public boolean isSingleton() { - return true; - } - -} diff --git a/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheManagerFactoryBean.java b/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheManagerFactoryBean.java deleted file mode 100644 index 8a7137819d3..00000000000 --- a/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheManagerFactoryBean.java +++ /dev/null @@ -1,199 +0,0 @@ -/* - * Copyright 2002-2021 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.cache.ehcache; - -import net.sf.ehcache.CacheException; -import net.sf.ehcache.CacheManager; -import net.sf.ehcache.config.Configuration; -import net.sf.ehcache.config.ConfigurationFactory; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import org.springframework.beans.factory.DisposableBean; -import org.springframework.beans.factory.FactoryBean; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.core.io.Resource; -import org.springframework.lang.Nullable; - -/** - * {@link FactoryBean} that exposes an EhCache {@link net.sf.ehcache.CacheManager} - * instance (independent or shared), configured from a specified config location. - * - *

If no config location is specified, a CacheManager will be configured from - * "ehcache.xml" in the root of the class path (that is, default EhCache initialization - * - as defined in the EhCache docs - will apply). - * - *

Setting up a separate EhCacheManagerFactoryBean is also advisable when using - * EhCacheFactoryBean, as it provides a (by default) independent CacheManager instance - * and cares for proper shutdown of the CacheManager. EhCacheManagerFactoryBean is - * also necessary for loading EhCache configuration from a non-default config location. - * - *

Note: As of Spring 5.0, Spring's EhCache support requires EhCache 2.10 or higher. - * - * @author Juergen Hoeller - * @author Dmitriy Kopylenko - * @since 1.1.1 - * @see #setConfigLocation - * @see #setShared - * @see EhCacheFactoryBean - * @see net.sf.ehcache.CacheManager - */ -public class EhCacheManagerFactoryBean implements FactoryBean, InitializingBean, DisposableBean { - - protected final Log logger = LogFactory.getLog(getClass()); - - @Nullable - private Resource configLocation; - - @Nullable - private String cacheManagerName; - - private boolean acceptExisting = false; - - private boolean shared = false; - - @Nullable - private CacheManager cacheManager; - - private boolean locallyManaged = true; - - - /** - * Set the location of the EhCache config file. A typical value is "/WEB-INF/ehcache.xml". - *

Default is "ehcache.xml" in the root of the class path, or if not found, - * "ehcache-failsafe.xml" in the EhCache jar (default EhCache initialization). - * @see net.sf.ehcache.CacheManager#create(java.io.InputStream) - * @see net.sf.ehcache.CacheManager#CacheManager(java.io.InputStream) - */ - public void setConfigLocation(Resource configLocation) { - this.configLocation = configLocation; - } - - /** - * Set the name of the EhCache CacheManager (if a specific name is desired). - * @see net.sf.ehcache.config.Configuration#setName(String) - */ - public void setCacheManagerName(String cacheManagerName) { - this.cacheManagerName = cacheManagerName; - } - - /** - * Set whether an existing EhCache CacheManager of the same name will be accepted - * for this EhCacheManagerFactoryBean setup. Default is "false". - *

Typically used in combination with {@link #setCacheManagerName "cacheManagerName"} - * but will simply work with the default CacheManager name if none specified. - * All references to the same CacheManager name (or the same default) in the - * same ClassLoader space will share the specified CacheManager then. - * @see #setCacheManagerName - * #see #setShared - * @see net.sf.ehcache.CacheManager#getCacheManager(String) - * @see net.sf.ehcache.CacheManager#CacheManager() - */ - public void setAcceptExisting(boolean acceptExisting) { - this.acceptExisting = acceptExisting; - } - - /** - * Set whether the EhCache CacheManager should be shared (as a singleton at the - * ClassLoader level) or independent (typically local within the application). - * Default is "false", creating an independent local instance. - *

NOTE: This feature allows for sharing this EhCacheManagerFactoryBean's - * CacheManager with any code calling CacheManager.create() in the same - * ClassLoader space, with no need to agree on a specific CacheManager name. - * However, it only supports a single EhCacheManagerFactoryBean involved which will - * control the lifecycle of the underlying CacheManager (in particular, its shutdown). - *

This flag overrides {@link #setAcceptExisting "acceptExisting"} if both are set, - * since it indicates the 'stronger' mode of sharing. - * @see #setCacheManagerName - * @see #setAcceptExisting - * @see net.sf.ehcache.CacheManager#create() - * @see net.sf.ehcache.CacheManager#CacheManager() - */ - public void setShared(boolean shared) { - this.shared = shared; - } - - - @Override - public void afterPropertiesSet() throws CacheException { - if (logger.isDebugEnabled()) { - logger.debug("Initializing EhCache CacheManager" + - (this.cacheManagerName != null ? " '" + this.cacheManagerName + "'" : "")); - } - - Configuration configuration = (this.configLocation != null ? - EhCacheManagerUtils.parseConfiguration(this.configLocation) : ConfigurationFactory.parseConfiguration()); - if (this.cacheManagerName != null) { - configuration.setName(this.cacheManagerName); - } - - if (this.shared) { - // Old-school EhCache singleton sharing... - // No way to find out whether we actually created a new CacheManager - // or just received an existing singleton reference. - this.cacheManager = CacheManager.create(configuration); - } - else if (this.acceptExisting) { - // EhCache 2.5+: Reusing an existing CacheManager of the same name. - // Basically the same code as in CacheManager.getInstance(String), - // just storing whether we're dealing with an existing instance. - synchronized (CacheManager.class) { - this.cacheManager = CacheManager.getCacheManager(this.cacheManagerName); - if (this.cacheManager == null) { - this.cacheManager = new CacheManager(configuration); - } - else { - this.locallyManaged = false; - } - } - } - else { - // Throwing an exception if a CacheManager of the same name exists already... - this.cacheManager = new CacheManager(configuration); - } - } - - - @Override - @Nullable - public CacheManager getObject() { - return this.cacheManager; - } - - @Override - public Class getObjectType() { - return (this.cacheManager != null ? this.cacheManager.getClass() : CacheManager.class); - } - - @Override - public boolean isSingleton() { - return true; - } - - - @Override - public void destroy() { - if (this.cacheManager != null && this.locallyManaged) { - if (logger.isDebugEnabled()) { - logger.debug("Shutting down EhCache CacheManager" + - (this.cacheManagerName != null ? " '" + this.cacheManagerName + "'" : "")); - } - this.cacheManager.shutdown(); - } - } - -} diff --git a/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheManagerUtils.java b/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheManagerUtils.java deleted file mode 100644 index 7d6654a86ac..00000000000 --- a/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheManagerUtils.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright 2002-2014 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.cache.ehcache; - -import java.io.IOException; -import java.io.InputStream; - -import net.sf.ehcache.CacheException; -import net.sf.ehcache.CacheManager; -import net.sf.ehcache.config.Configuration; -import net.sf.ehcache.config.ConfigurationFactory; - -import org.springframework.core.io.Resource; - -/** - * Convenient builder methods for EhCache 2.5+ {@link CacheManager} setup, - * providing easy programmatic bootstrapping from a Spring-provided resource. - * This is primarily intended for use within {@code @Bean} methods in a - * Spring configuration class. - * - *

These methods are a simple alternative to custom {@link CacheManager} setup - * code. For any advanced purposes, consider using {@link #parseConfiguration}, - * customizing the configuration object, and then calling the - * {@link CacheManager#CacheManager(Configuration)} constructor. - * - * @author Juergen Hoeller - * @since 4.1 - */ -public abstract class EhCacheManagerUtils { - - /** - * Build an EhCache {@link CacheManager} from the default configuration. - *

The CacheManager will be configured from "ehcache.xml" in the root of the class path - * (that is, default EhCache initialization - as defined in the EhCache docs - will apply). - * If no configuration file can be found, a fail-safe fallback configuration will be used. - * @return the new EhCache CacheManager - * @throws CacheException in case of configuration parsing failure - */ - public static CacheManager buildCacheManager() throws CacheException { - return new CacheManager(ConfigurationFactory.parseConfiguration()); - } - - /** - * Build an EhCache {@link CacheManager} from the default configuration. - *

The CacheManager will be configured from "ehcache.xml" in the root of the class path - * (that is, default EhCache initialization - as defined in the EhCache docs - will apply). - * If no configuration file can be found, a fail-safe fallback configuration will be used. - * @param name the desired name of the cache manager - * @return the new EhCache CacheManager - * @throws CacheException in case of configuration parsing failure - */ - public static CacheManager buildCacheManager(String name) throws CacheException { - Configuration configuration = ConfigurationFactory.parseConfiguration(); - configuration.setName(name); - return new CacheManager(configuration); - } - - /** - * Build an EhCache {@link CacheManager} from the given configuration resource. - * @param configLocation the location of the configuration file (as a Spring resource) - * @return the new EhCache CacheManager - * @throws CacheException in case of configuration parsing failure - */ - public static CacheManager buildCacheManager(Resource configLocation) throws CacheException { - return new CacheManager(parseConfiguration(configLocation)); - } - - /** - * Build an EhCache {@link CacheManager} from the given configuration resource. - * @param name the desired name of the cache manager - * @param configLocation the location of the configuration file (as a Spring resource) - * @return the new EhCache CacheManager - * @throws CacheException in case of configuration parsing failure - */ - public static CacheManager buildCacheManager(String name, Resource configLocation) throws CacheException { - Configuration configuration = parseConfiguration(configLocation); - configuration.setName(name); - return new CacheManager(configuration); - } - - /** - * Parse EhCache configuration from the given resource, for further use with - * custom {@link CacheManager} creation. - * @param configLocation the location of the configuration file (as a Spring resource) - * @return the EhCache Configuration handle - * @throws CacheException in case of configuration parsing failure - * @see CacheManager#CacheManager(Configuration) - * @see CacheManager#create(Configuration) - */ - public static Configuration parseConfiguration(Resource configLocation) throws CacheException { - InputStream is = null; - try { - is = configLocation.getInputStream(); - return ConfigurationFactory.parseConfiguration(is); - } - catch (IOException ex) { - throw new CacheException("Failed to parse EhCache configuration resource", ex); - } - finally { - if (is != null) { - try { - is.close(); - } - catch (IOException ex) { - // ignore - } - } - } - } - -} diff --git a/spring-context-support/src/main/java/org/springframework/cache/ehcache/package-info.java b/spring-context-support/src/main/java/org/springframework/cache/ehcache/package-info.java deleted file mode 100644 index d786a802512..00000000000 --- a/spring-context-support/src/main/java/org/springframework/cache/ehcache/package-info.java +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Support classes for the open source cache - * EhCache 2.x, - * allowing to set up an EhCache CacheManager and Caches - * as beans in a Spring context. - * - *

Note: EhCache 3.x lives in a different package namespace - * and is not covered by the traditional support classes here. - * Instead, consider using it through JCache (JSR-107), with - * Spring's support in {@code org.springframework.cache.jcache}. - */ -@NonNullApi -@NonNullFields -package org.springframework.cache.ehcache; - -import org.springframework.lang.NonNullApi; -import org.springframework.lang.NonNullFields; diff --git a/spring-context-support/src/main/java/org/springframework/mail/MailSendException.java b/spring-context-support/src/main/java/org/springframework/mail/MailSendException.java index 693082c840c..af7f0417f29 100644 --- a/spring-context-support/src/main/java/org/springframework/mail/MailSendException.java +++ b/spring-context-support/src/main/java/org/springframework/mail/MailSendException.java @@ -104,7 +104,7 @@ public class MailSendException extends MailException { * be available after serialization as well. * @return the Map of failed messages as keys and thrown exceptions as values * @see SimpleMailMessage - * @see javax.mail.internet.MimeMessage + * @see jakarta.mail.internet.MimeMessage */ public final Map getFailedMessages() { return this.failedMessages; diff --git a/spring-context-support/src/main/java/org/springframework/mail/javamail/ConfigurableMimeFileTypeMap.java b/spring-context-support/src/main/java/org/springframework/mail/javamail/ConfigurableMimeFileTypeMap.java index ff6921b3718..7fe0a9aca89 100644 --- a/spring-context-support/src/main/java/org/springframework/mail/javamail/ConfigurableMimeFileTypeMap.java +++ b/spring-context-support/src/main/java/org/springframework/mail/javamail/ConfigurableMimeFileTypeMap.java @@ -20,8 +20,8 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; -import javax.activation.FileTypeMap; -import javax.activation.MimetypesFileTypeMap; +import jakarta.activation.FileTypeMap; +import jakarta.activation.MimetypesFileTypeMap; import org.springframework.beans.factory.InitializingBean; import org.springframework.core.io.ClassPathResource; @@ -58,7 +58,7 @@ import org.springframework.lang.Nullable; * @since 1.2 * @see #setMappingLocation * @see #setMappings - * @see javax.activation.MimetypesFileTypeMap + * @see jakarta.activation.MimetypesFileTypeMap */ public class ConfigurableMimeFileTypeMap extends FileTypeMap implements InitializingBean { @@ -140,8 +140,8 @@ public class ConfigurableMimeFileTypeMap extends FileTypeMap implements Initiali * @param mappings an array of MIME type mapping lines (can be {@code null}) * @return the compiled FileTypeMap * @throws IOException if resource access failed - * @see javax.activation.MimetypesFileTypeMap#MimetypesFileTypeMap(java.io.InputStream) - * @see javax.activation.MimetypesFileTypeMap#addMimeTypes(String) + * @see jakarta.activation.MimetypesFileTypeMap#MimetypesFileTypeMap(java.io.InputStream) + * @see jakarta.activation.MimetypesFileTypeMap#addMimeTypes(String) */ protected FileTypeMap createFileTypeMap(@Nullable Resource mappingLocation, @Nullable String[] mappings) throws IOException { MimetypesFileTypeMap fileTypeMap = null; diff --git a/spring-context-support/src/main/java/org/springframework/mail/javamail/InternetAddressEditor.java b/spring-context-support/src/main/java/org/springframework/mail/javamail/InternetAddressEditor.java index 7738328c563..c4981581ebd 100644 --- a/spring-context-support/src/main/java/org/springframework/mail/javamail/InternetAddressEditor.java +++ b/spring-context-support/src/main/java/org/springframework/mail/javamail/InternetAddressEditor.java @@ -18,8 +18,8 @@ package org.springframework.mail.javamail; import java.beans.PropertyEditorSupport; -import javax.mail.internet.AddressException; -import javax.mail.internet.InternetAddress; +import jakarta.mail.internet.AddressException; +import jakarta.mail.internet.InternetAddress; import org.springframework.util.StringUtils; @@ -32,7 +32,7 @@ import org.springframework.util.StringUtils; * * @author Juergen Hoeller * @since 1.2.3 - * @see javax.mail.internet.InternetAddress + * @see jakarta.mail.internet.InternetAddress */ public class InternetAddressEditor extends PropertyEditorSupport { diff --git a/spring-context-support/src/main/java/org/springframework/mail/javamail/JavaMailSender.java b/spring-context-support/src/main/java/org/springframework/mail/javamail/JavaMailSender.java index f810be606dd..61f4ecb01d7 100644 --- a/spring-context-support/src/main/java/org/springframework/mail/javamail/JavaMailSender.java +++ b/spring-context-support/src/main/java/org/springframework/mail/javamail/JavaMailSender.java @@ -18,7 +18,7 @@ package org.springframework.mail.javamail; import java.io.InputStream; -import javax.mail.internet.MimeMessage; +import jakarta.mail.internet.MimeMessage; import org.springframework.mail.MailException; import org.springframework.mail.MailSender; @@ -40,7 +40,7 @@ import org.springframework.mail.MailSender; * mechanism, possibly using a {@link MimeMessageHelper} for populating the message. * See {@link MimeMessageHelper MimeMessageHelper's javadoc} for an example. * - *

The entire JavaMail {@link javax.mail.Session} management is abstracted + *

The entire JavaMail {@link jakarta.mail.Session} management is abstracted * by the JavaMailSender. Client code should not deal with a Session in any way, * rather leave the entire JavaMail configuration and resource handling to the * JavaMailSender implementation. This also increases testability. @@ -54,8 +54,8 @@ import org.springframework.mail.MailSender; * * @author Juergen Hoeller * @since 07.10.2003 - * @see javax.mail.internet.MimeMessage - * @see javax.mail.Session + * @see jakarta.mail.internet.MimeMessage + * @see jakarta.mail.Session * @see JavaMailSenderImpl * @see MimeMessagePreparator * @see MimeMessageHelper diff --git a/spring-context-support/src/main/java/org/springframework/mail/javamail/JavaMailSenderImpl.java b/spring-context-support/src/main/java/org/springframework/mail/javamail/JavaMailSenderImpl.java index 9286d0ef665..e13f61dcf43 100644 --- a/spring-context-support/src/main/java/org/springframework/mail/javamail/JavaMailSenderImpl.java +++ b/spring-context-support/src/main/java/org/springframework/mail/javamail/JavaMailSenderImpl.java @@ -24,14 +24,14 @@ import java.util.List; import java.util.Map; import java.util.Properties; -import javax.activation.FileTypeMap; -import javax.mail.Address; -import javax.mail.AuthenticationFailedException; -import javax.mail.MessagingException; -import javax.mail.NoSuchProviderException; -import javax.mail.Session; -import javax.mail.Transport; -import javax.mail.internet.MimeMessage; +import jakarta.activation.FileTypeMap; +import jakarta.mail.Address; +import jakarta.mail.AuthenticationFailedException; +import jakarta.mail.MessagingException; +import jakarta.mail.NoSuchProviderException; +import jakarta.mail.Session; +import jakarta.mail.Transport; +import jakarta.mail.internet.MimeMessage; import org.springframework.lang.Nullable; import org.springframework.mail.MailAuthenticationException; @@ -49,7 +49,7 @@ import org.springframework.util.Assert; * plain {@link org.springframework.mail.MailSender} implementation. * *

Allows for defining all settings locally as bean properties. - * Alternatively, a pre-configured JavaMail {@link javax.mail.Session} can be + * Alternatively, a pre-configured JavaMail {@link jakarta.mail.Session} can be * specified, possibly pulled from an application server's JNDI environment. * *

Non-default properties in this object will always override the settings @@ -59,8 +59,8 @@ import org.springframework.util.Assert; * @author Dmitriy Kopylenko * @author Juergen Hoeller * @since 10.09.2003 - * @see javax.mail.internet.MimeMessage - * @see javax.mail.Session + * @see jakarta.mail.internet.MimeMessage + * @see jakarta.mail.Session * @see #setSession * @see #setJavaMailProperties * @see #setHost @@ -523,7 +523,7 @@ public class JavaMailSenderImpl implements JavaMailSender { * Obtain a Transport object from the given JavaMail Session, * using the configured protocol. *

Can be overridden in subclasses, e.g. to return a mock Transport object. - * @see javax.mail.Session#getTransport(String) + * @see jakarta.mail.Session#getTransport(String) * @see #getSession() * @see #getProtocol() */ diff --git a/spring-context-support/src/main/java/org/springframework/mail/javamail/MimeMailMessage.java b/spring-context-support/src/main/java/org/springframework/mail/javamail/MimeMailMessage.java index e62690a6d76..9161ea69d7a 100644 --- a/spring-context-support/src/main/java/org/springframework/mail/javamail/MimeMailMessage.java +++ b/spring-context-support/src/main/java/org/springframework/mail/javamail/MimeMailMessage.java @@ -18,8 +18,8 @@ package org.springframework.mail.javamail; import java.util.Date; -import javax.mail.MessagingException; -import javax.mail.internet.MimeMessage; +import jakarta.mail.MessagingException; +import jakarta.mail.internet.MimeMessage; import org.springframework.mail.MailMessage; import org.springframework.mail.MailParseException; @@ -35,7 +35,7 @@ import org.springframework.mail.MailParseException; * @author Juergen Hoeller * @since 1.1.5 * @see MimeMessageHelper - * @see javax.mail.internet.MimeMessage + * @see jakarta.mail.internet.MimeMessage */ public class MimeMailMessage implements MailMessage { diff --git a/spring-context-support/src/main/java/org/springframework/mail/javamail/MimeMessageHelper.java b/spring-context-support/src/main/java/org/springframework/mail/javamail/MimeMessageHelper.java index f795390fa24..0bf5c1bba6c 100644 --- a/spring-context-support/src/main/java/org/springframework/mail/javamail/MimeMessageHelper.java +++ b/spring-context-support/src/main/java/org/springframework/mail/javamail/MimeMessageHelper.java @@ -23,20 +23,20 @@ import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.util.Date; -import javax.activation.DataHandler; -import javax.activation.DataSource; -import javax.activation.FileDataSource; -import javax.activation.FileTypeMap; -import javax.mail.BodyPart; -import javax.mail.Message; -import javax.mail.MessagingException; -import javax.mail.internet.AddressException; -import javax.mail.internet.InternetAddress; -import javax.mail.internet.MimeBodyPart; -import javax.mail.internet.MimeMessage; -import javax.mail.internet.MimeMultipart; -import javax.mail.internet.MimePart; -import javax.mail.internet.MimeUtility; +import jakarta.activation.DataHandler; +import jakarta.activation.DataSource; +import jakarta.activation.FileDataSource; +import jakarta.activation.FileTypeMap; +import jakarta.mail.BodyPart; +import jakarta.mail.Message; +import jakarta.mail.MessagingException; +import jakarta.mail.internet.AddressException; +import jakarta.mail.internet.InternetAddress; +import jakarta.mail.internet.MimeBodyPart; +import jakarta.mail.internet.MimeMessage; +import jakarta.mail.internet.MimeMultipart; +import jakarta.mail.internet.MimePart; +import jakarta.mail.internet.MimeUtility; import org.springframework.core.io.InputStreamSource; import org.springframework.core.io.Resource; @@ -44,7 +44,7 @@ import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** - * Helper class for populating a {@link javax.mail.internet.MimeMessage}. + * Helper class for populating a {@link jakarta.mail.internet.MimeMessage}. * *

Mirrors the simple setters of {@link org.springframework.mail.SimpleMailMessage}, * directly applying the values to the underlying MimeMessage. Allows for defining @@ -186,8 +186,8 @@ public class MimeMessageHelper { * the passed-in MimeMessage object, if carried there. Else, * JavaMail's default encoding will be used. * @param mimeMessage the mime message to work on - * @see #MimeMessageHelper(javax.mail.internet.MimeMessage, boolean) - * @see #getDefaultEncoding(javax.mail.internet.MimeMessage) + * @see #MimeMessageHelper(jakarta.mail.internet.MimeMessage, boolean) + * @see #getDefaultEncoding(jakarta.mail.internet.MimeMessage) * @see JavaMailSenderImpl#setDefaultEncoding */ public MimeMessageHelper(MimeMessage mimeMessage) { @@ -200,7 +200,7 @@ public class MimeMessageHelper { * i.e. no alternative texts and no inline elements or attachments). * @param mimeMessage the mime message to work on * @param encoding the character encoding to use for the message - * @see #MimeMessageHelper(javax.mail.internet.MimeMessage, boolean) + * @see #MimeMessageHelper(jakarta.mail.internet.MimeMessage, boolean) */ public MimeMessageHelper(MimeMessage mimeMessage, @Nullable String encoding) { this.mimeMessage = mimeMessage; @@ -223,8 +223,8 @@ public class MimeMessageHelper { * supports alternative texts, inline elements and attachments * (corresponds to MULTIPART_MODE_MIXED_RELATED) * @throws MessagingException if multipart creation failed - * @see #MimeMessageHelper(javax.mail.internet.MimeMessage, int) - * @see #getDefaultEncoding(javax.mail.internet.MimeMessage) + * @see #MimeMessageHelper(jakarta.mail.internet.MimeMessage, int) + * @see #getDefaultEncoding(jakarta.mail.internet.MimeMessage) * @see JavaMailSenderImpl#setDefaultEncoding */ public MimeMessageHelper(MimeMessage mimeMessage, boolean multipart) throws MessagingException { @@ -244,7 +244,7 @@ public class MimeMessageHelper { * (corresponds to MULTIPART_MODE_MIXED_RELATED) * @param encoding the character encoding to use for the message * @throws MessagingException if multipart creation failed - * @see #MimeMessageHelper(javax.mail.internet.MimeMessage, int, String) + * @see #MimeMessageHelper(jakarta.mail.internet.MimeMessage, int, String) */ public MimeMessageHelper(MimeMessage mimeMessage, boolean multipart, @Nullable String encoding) throws MessagingException { @@ -267,7 +267,7 @@ public class MimeMessageHelper { * @see #MULTIPART_MODE_MIXED * @see #MULTIPART_MODE_RELATED * @see #MULTIPART_MODE_MIXED_RELATED - * @see #getDefaultEncoding(javax.mail.internet.MimeMessage) + * @see #getDefaultEncoding(jakarta.mail.internet.MimeMessage) * @see JavaMailSenderImpl#setDefaultEncoding */ public MimeMessageHelper(MimeMessage mimeMessage, int multipartMode) throws MessagingException { @@ -388,7 +388,7 @@ public class MimeMessageHelper { * @throws IllegalStateException if this helper is not in multipart mode * @see #isMultipart * @see #getMimeMessage - * @see javax.mail.internet.MimeMultipart#addBodyPart + * @see jakarta.mail.internet.MimeMultipart#addBodyPart */ public final MimeMultipart getRootMimeMultipart() throws IllegalStateException { if (this.rootMimeMultipart == null) { @@ -407,7 +407,7 @@ public class MimeMessageHelper { * @throws IllegalStateException if this helper is not in multipart mode * @see #isMultipart * @see #getRootMimeMultipart - * @see javax.mail.internet.MimeMultipart#addBodyPart + * @see jakarta.mail.internet.MimeMultipart#addBodyPart */ public final MimeMultipart getMimeMultipart() throws IllegalStateException { if (this.mimeMultipart == null) { @@ -469,9 +469,9 @@ public class MimeMessageHelper { * {@code FileTypeMap} instance else. * @see #addInline * @see #addAttachment - * @see #getDefaultFileTypeMap(javax.mail.internet.MimeMessage) + * @see #getDefaultFileTypeMap(jakarta.mail.internet.MimeMessage) * @see JavaMailSenderImpl#setDefaultFileTypeMap - * @see javax.activation.FileTypeMap#getDefaultFileTypeMap + * @see jakarta.activation.FileTypeMap#getDefaultFileTypeMap * @see ConfigurableMimeFileTypeMap */ public void setFileTypeMap(@Nullable FileTypeMap fileTypeMap) { @@ -538,7 +538,7 @@ public class MimeMessageHelper { * @param address the address to validate * @throws AddressException if validation failed * @see #isValidateAddresses() - * @see javax.mail.internet.InternetAddress#validate() + * @see jakarta.mail.internet.InternetAddress#validate() */ protected void validateAddress(InternetAddress address) throws AddressException { if (isValidateAddresses()) { @@ -889,7 +889,7 @@ public class MimeMessageHelper { /** * Add an inline element to the MimeMessage, taking the content from a - * {@code javax.activation.DataSource}. + * {@code jakarta.activation.DataSource}. *

Note that the InputStream returned by the DataSource implementation * needs to be a fresh one on each call, as JavaMail will invoke * {@code getInputStream()} multiple times. @@ -898,7 +898,7 @@ public class MimeMessageHelper { * @param contentId the content ID to use. Will end up as "Content-ID" header * in the body part, surrounded by angle brackets: e.g. "myId" -> "<myId>". * Can be referenced in HTML source via src="cid:myId" expressions. - * @param dataSource the {@code javax.activation.DataSource} to take + * @param dataSource the {@code jakarta.activation.DataSource} to take * the content from, determining the InputStream and the content type * @throws MessagingException in case of errors * @see #addInline(String, java.io.File) @@ -929,7 +929,7 @@ public class MimeMessageHelper { * @throws MessagingException in case of errors * @see #setText * @see #addInline(String, org.springframework.core.io.Resource) - * @see #addInline(String, javax.activation.DataSource) + * @see #addInline(String, jakarta.activation.DataSource) */ public void addInline(String contentId, File file) throws MessagingException { Assert.notNull(file, "File must not be null"); @@ -956,7 +956,7 @@ public class MimeMessageHelper { * @throws MessagingException in case of errors * @see #setText * @see #addInline(String, java.io.File) - * @see #addInline(String, javax.activation.DataSource) + * @see #addInline(String, jakarta.activation.DataSource) */ public void addInline(String contentId, Resource resource) throws MessagingException { Assert.notNull(resource, "Resource must not be null"); @@ -984,7 +984,7 @@ public class MimeMessageHelper { * @see #setText * @see #getFileTypeMap * @see #addInline(String, org.springframework.core.io.Resource) - * @see #addInline(String, javax.activation.DataSource) + * @see #addInline(String, jakarta.activation.DataSource) */ public void addInline(String contentId, InputStreamSource inputStreamSource, String contentType) throws MessagingException { @@ -1001,13 +1001,13 @@ public class MimeMessageHelper { /** * Add an attachment to the MimeMessage, taking the content from a - * {@code javax.activation.DataSource}. + * {@code jakarta.activation.DataSource}. *

Note that the InputStream returned by the DataSource implementation * needs to be a fresh one on each call, as JavaMail will invoke * {@code getInputStream()} multiple times. * @param attachmentFilename the name of the attachment as it will * appear in the mail (the content type will be determined by this) - * @param dataSource the {@code javax.activation.DataSource} to take + * @param dataSource the {@code jakarta.activation.DataSource} to take * the content from, determining the InputStream and the content type * @throws MessagingException in case of errors * @see #addAttachment(String, org.springframework.core.io.InputStreamSource) @@ -1040,7 +1040,7 @@ public class MimeMessageHelper { * @param file the File resource to take the content from * @throws MessagingException in case of errors * @see #addAttachment(String, org.springframework.core.io.InputStreamSource) - * @see #addAttachment(String, javax.activation.DataSource) + * @see #addAttachment(String, jakarta.activation.DataSource) */ public void addAttachment(String attachmentFilename, File file) throws MessagingException { Assert.notNull(file, "File must not be null"); @@ -1064,7 +1064,7 @@ public class MimeMessageHelper { * (all of Spring's Resource implementations can be passed in here) * @throws MessagingException in case of errors * @see #addAttachment(String, java.io.File) - * @see #addAttachment(String, javax.activation.DataSource) + * @see #addAttachment(String, jakarta.activation.DataSource) * @see org.springframework.core.io.Resource */ public void addAttachment(String attachmentFilename, InputStreamSource inputStreamSource) @@ -1087,7 +1087,7 @@ public class MimeMessageHelper { * @param contentType the content type to use for the element * @throws MessagingException in case of errors * @see #addAttachment(String, java.io.File) - * @see #addAttachment(String, javax.activation.DataSource) + * @see #addAttachment(String, jakarta.activation.DataSource) * @see org.springframework.core.io.Resource */ public void addAttachment( @@ -1121,7 +1121,7 @@ public class MimeMessageHelper { } @Override public OutputStream getOutputStream() { - throw new UnsupportedOperationException("Read-only javax.activation.DataSource"); + throw new UnsupportedOperationException("Read-only jakarta.activation.DataSource"); } @Override public String getContentType() { diff --git a/spring-context-support/src/main/java/org/springframework/mail/javamail/MimeMessagePreparator.java b/spring-context-support/src/main/java/org/springframework/mail/javamail/MimeMessagePreparator.java index 5973d17104b..04e6cc34cd2 100644 --- a/spring-context-support/src/main/java/org/springframework/mail/javamail/MimeMessagePreparator.java +++ b/spring-context-support/src/main/java/org/springframework/mail/javamail/MimeMessagePreparator.java @@ -16,7 +16,7 @@ package org.springframework.mail.javamail; -import javax.mail.internet.MimeMessage; +import jakarta.mail.internet.MimeMessage; /** * Callback interface for the preparation of JavaMail MIME messages. @@ -42,7 +42,7 @@ public interface MimeMessagePreparator { /** * Prepare the given new MimeMessage instance. * @param mimeMessage the message to prepare - * @throws javax.mail.MessagingException passing any exceptions thrown by MimeMessage + * @throws jakarta.mail.MessagingException passing any exceptions thrown by MimeMessage * methods through for automatic conversion to the MailException hierarchy * @throws java.io.IOException passing any exceptions thrown by MimeMessage methods * through for automatic conversion to the MailException hierarchy diff --git a/spring-context-support/src/main/java/org/springframework/mail/javamail/SmartMimeMessage.java b/spring-context-support/src/main/java/org/springframework/mail/javamail/SmartMimeMessage.java index 2fa44c910af..e41d4a22655 100644 --- a/spring-context-support/src/main/java/org/springframework/mail/javamail/SmartMimeMessage.java +++ b/spring-context-support/src/main/java/org/springframework/mail/javamail/SmartMimeMessage.java @@ -16,9 +16,9 @@ package org.springframework.mail.javamail; -import javax.activation.FileTypeMap; -import javax.mail.Session; -import javax.mail.internet.MimeMessage; +import jakarta.activation.FileTypeMap; +import jakarta.mail.Session; +import jakarta.mail.internet.MimeMessage; import org.springframework.lang.Nullable; @@ -34,8 +34,8 @@ import org.springframework.lang.Nullable; * @author Juergen Hoeller * @since 1.2 * @see JavaMailSenderImpl#createMimeMessage() - * @see MimeMessageHelper#getDefaultEncoding(javax.mail.internet.MimeMessage) - * @see MimeMessageHelper#getDefaultFileTypeMap(javax.mail.internet.MimeMessage) + * @see MimeMessageHelper#getDefaultEncoding(jakarta.mail.internet.MimeMessage) + * @see MimeMessageHelper#getDefaultFileTypeMap(jakarta.mail.internet.MimeMessage) */ class SmartMimeMessage extends MimeMessage { diff --git a/spring-context-support/src/main/java/org/springframework/scheduling/commonj/DelegatingTimerListener.java b/spring-context-support/src/main/java/org/springframework/scheduling/commonj/DelegatingTimerListener.java deleted file mode 100644 index d6d493e1cac..00000000000 --- a/spring-context-support/src/main/java/org/springframework/scheduling/commonj/DelegatingTimerListener.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.scheduling.commonj; - -import commonj.timers.Timer; -import commonj.timers.TimerListener; - -import org.springframework.util.Assert; - -/** - * Simple TimerListener adapter that delegates to a given Runnable. - * - * @author Juergen Hoeller - * @since 2.0 - * @see commonj.timers.TimerListener - * @see java.lang.Runnable - * @deprecated as of 5.1, in favor of EE 7's - * {@link org.springframework.scheduling.concurrent.DefaultManagedTaskScheduler} - */ -@Deprecated -public class DelegatingTimerListener implements TimerListener { - - private final Runnable runnable; - - - /** - * Create a new DelegatingTimerListener. - * @param runnable the Runnable implementation to delegate to - */ - public DelegatingTimerListener(Runnable runnable) { - Assert.notNull(runnable, "Runnable is required"); - this.runnable = runnable; - } - - - /** - * Delegates execution to the underlying Runnable. - */ - @Override - public void timerExpired(Timer timer) { - this.runnable.run(); - } - -} diff --git a/spring-context-support/src/main/java/org/springframework/scheduling/commonj/DelegatingWork.java b/spring-context-support/src/main/java/org/springframework/scheduling/commonj/DelegatingWork.java deleted file mode 100644 index 9f7eb9110ae..00000000000 --- a/spring-context-support/src/main/java/org/springframework/scheduling/commonj/DelegatingWork.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.scheduling.commonj; - -import commonj.work.Work; - -import org.springframework.scheduling.SchedulingAwareRunnable; -import org.springframework.util.Assert; - -/** - * Simple Work adapter that delegates to a given Runnable. - * - * @author Juergen Hoeller - * @since 2.0 - * @deprecated as of 5.1, in favor of EE 7's - * {@link org.springframework.scheduling.concurrent.DefaultManagedTaskExecutor} - */ -@Deprecated -public class DelegatingWork implements Work { - - private final Runnable delegate; - - - /** - * Create a new DelegatingWork. - * @param delegate the Runnable implementation to delegate to - * (may be a SchedulingAwareRunnable for extended support) - * @see org.springframework.scheduling.SchedulingAwareRunnable - * @see #isDaemon() - */ - public DelegatingWork(Runnable delegate) { - Assert.notNull(delegate, "Delegate must not be null"); - this.delegate = delegate; - } - - /** - * Return the wrapped Runnable implementation. - */ - public final Runnable getDelegate() { - return this.delegate; - } - - - /** - * Delegates execution to the underlying Runnable. - */ - @Override - public void run() { - this.delegate.run(); - } - - /** - * This implementation delegates to - * {@link org.springframework.scheduling.SchedulingAwareRunnable#isLongLived()}, - * if available. - */ - @Override - public boolean isDaemon() { - return (this.delegate instanceof SchedulingAwareRunnable && - ((SchedulingAwareRunnable) this.delegate).isLongLived()); - } - - /** - * This implementation is empty, since we expect the Runnable - * to terminate based on some specific shutdown signal. - */ - @Override - public void release() { - } - -} diff --git a/spring-context-support/src/main/java/org/springframework/scheduling/commonj/ScheduledTimerListener.java b/spring-context-support/src/main/java/org/springframework/scheduling/commonj/ScheduledTimerListener.java deleted file mode 100644 index 52ca0afe126..00000000000 --- a/spring-context-support/src/main/java/org/springframework/scheduling/commonj/ScheduledTimerListener.java +++ /dev/null @@ -1,229 +0,0 @@ -/* - * Copyright 2002-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.scheduling.commonj; - -import commonj.timers.TimerListener; - -import org.springframework.lang.Nullable; - -/** - * JavaBean that describes a scheduled TimerListener, consisting of - * the TimerListener itself (or a Runnable to create a TimerListener for) - * and a delay plus period. Period needs to be specified; - * there is no point in a default for it. - * - *

The CommonJ TimerManager does not offer more sophisticated scheduling - * options such as cron expressions. Consider using Quartz for such - * advanced needs. - * - *

Note that the TimerManager uses a TimerListener instance that is - * shared between repeated executions, in contrast to Quartz which - * instantiates a new Job for each execution. - * - * @author Juergen Hoeller - * @since 2.0 - * @deprecated as of 5.1, in favor of EE 7's - * {@link org.springframework.scheduling.concurrent.DefaultManagedTaskScheduler} - */ -@Deprecated -public class ScheduledTimerListener { - - @Nullable - private TimerListener timerListener; - - private long delay = 0; - - private long period = -1; - - private boolean fixedRate = false; - - - /** - * Create a new ScheduledTimerListener, - * to be populated via bean properties. - * @see #setTimerListener - * @see #setDelay - * @see #setPeriod - * @see #setFixedRate - */ - public ScheduledTimerListener() { - } - - /** - * Create a new ScheduledTimerListener, with default - * one-time execution without delay. - * @param timerListener the TimerListener to schedule - */ - public ScheduledTimerListener(TimerListener timerListener) { - this.timerListener = timerListener; - } - - /** - * Create a new ScheduledTimerListener, with default - * one-time execution with the given delay. - * @param timerListener the TimerListener to schedule - * @param delay the delay before starting the task for the first time (ms) - */ - public ScheduledTimerListener(TimerListener timerListener, long delay) { - this.timerListener = timerListener; - this.delay = delay; - } - - /** - * Create a new ScheduledTimerListener. - * @param timerListener the TimerListener to schedule - * @param delay the delay before starting the task for the first time (ms) - * @param period the period between repeated task executions (ms) - * @param fixedRate whether to schedule as fixed-rate execution - */ - public ScheduledTimerListener(TimerListener timerListener, long delay, long period, boolean fixedRate) { - this.timerListener = timerListener; - this.delay = delay; - this.period = period; - this.fixedRate = fixedRate; - } - - /** - * Create a new ScheduledTimerListener, with default - * one-time execution without delay. - * @param timerTask the Runnable to schedule as TimerListener - */ - public ScheduledTimerListener(Runnable timerTask) { - setRunnable(timerTask); - } - - /** - * Create a new ScheduledTimerListener, with default - * one-time execution with the given delay. - * @param timerTask the Runnable to schedule as TimerListener - * @param delay the delay before starting the task for the first time (ms) - */ - public ScheduledTimerListener(Runnable timerTask, long delay) { - setRunnable(timerTask); - this.delay = delay; - } - - /** - * Create a new ScheduledTimerListener. - * @param timerTask the Runnable to schedule as TimerListener - * @param delay the delay before starting the task for the first time (ms) - * @param period the period between repeated task executions (ms) - * @param fixedRate whether to schedule as fixed-rate execution - */ - public ScheduledTimerListener(Runnable timerTask, long delay, long period, boolean fixedRate) { - setRunnable(timerTask); - this.delay = delay; - this.period = period; - this.fixedRate = fixedRate; - } - - - /** - * Set the Runnable to schedule as TimerListener. - * @see DelegatingTimerListener - */ - public void setRunnable(Runnable timerTask) { - this.timerListener = new DelegatingTimerListener(timerTask); - } - - /** - * Set the TimerListener to schedule. - */ - public void setTimerListener(@Nullable TimerListener timerListener) { - this.timerListener = timerListener; - } - - /** - * Return the TimerListener to schedule. - */ - @Nullable - public TimerListener getTimerListener() { - return this.timerListener; - } - - /** - * Set the delay before starting the task for the first time, - * in milliseconds. Default is 0, immediately starting the - * task after successful scheduling. - *

If the "firstTime" property is specified, this property will be ignored. - * Specify one or the other, not both. - */ - public void setDelay(long delay) { - this.delay = delay; - } - - /** - * Return the delay before starting the job for the first time. - */ - public long getDelay() { - return this.delay; - } - - /** - * Set the period between repeated task executions, in milliseconds. - *

Default is -1, leading to one-time execution. In case of zero or a - * positive value, the task will be executed repeatedly, with the given - * interval in-between executions. - *

Note that the semantics of the period value vary between fixed-rate - * and fixed-delay execution. - *

Note: A period of 0 (for example as fixed delay) is - * supported, because the CommonJ specification defines this as a legal value. - * Hence a value of 0 will result in immediate re-execution after a job has - * finished (not in one-time execution like with {@code java.util.Timer}). - * @see #setFixedRate - * @see #isOneTimeTask() - * @see commonj.timers.TimerManager#schedule(commonj.timers.TimerListener, long, long) - */ - public void setPeriod(long period) { - this.period = period; - } - - /** - * Return the period between repeated task executions. - */ - public long getPeriod() { - return this.period; - } - - /** - * Is this task only ever going to execute once? - * @return {@code true} if this task is only ever going to execute once - * @see #getPeriod() - */ - public boolean isOneTimeTask() { - return (this.period < 0); - } - - /** - * Set whether to schedule as fixed-rate execution, rather than - * fixed-delay execution. Default is "false", i.e. fixed delay. - *

See TimerManager javadoc for details on those execution modes. - * @see commonj.timers.TimerManager#schedule(commonj.timers.TimerListener, long, long) - * @see commonj.timers.TimerManager#scheduleAtFixedRate(commonj.timers.TimerListener, long, long) - */ - public void setFixedRate(boolean fixedRate) { - this.fixedRate = fixedRate; - } - - /** - * Return whether to schedule as fixed-rate execution. - */ - public boolean isFixedRate() { - return this.fixedRate; - } - -} diff --git a/spring-context-support/src/main/java/org/springframework/scheduling/commonj/TimerManagerAccessor.java b/spring-context-support/src/main/java/org/springframework/scheduling/commonj/TimerManagerAccessor.java deleted file mode 100644 index b5c0e15a068..00000000000 --- a/spring-context-support/src/main/java/org/springframework/scheduling/commonj/TimerManagerAccessor.java +++ /dev/null @@ -1,192 +0,0 @@ -/* - * Copyright 2002-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.scheduling.commonj; - -import javax.naming.NamingException; - -import commonj.timers.TimerManager; - -import org.springframework.beans.factory.DisposableBean; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.context.Lifecycle; -import org.springframework.jndi.JndiLocatorSupport; -import org.springframework.lang.Nullable; -import org.springframework.util.Assert; - -/** - * Base class for classes that are accessing a CommonJ {@link commonj.timers.TimerManager} - * Defines common configuration settings and common lifecycle handling. - * - * @author Juergen Hoeller - * @since 3.0 - * @see commonj.timers.TimerManager - * @deprecated as of 5.1, in favor of EE 7's - * {@link org.springframework.scheduling.concurrent.DefaultManagedTaskScheduler} - */ -@Deprecated -public abstract class TimerManagerAccessor extends JndiLocatorSupport - implements InitializingBean, DisposableBean, Lifecycle { - - @Nullable - private TimerManager timerManager; - - @Nullable - private String timerManagerName; - - private boolean shared = false; - - - /** - * Specify the CommonJ TimerManager to delegate to. - *

Note that the given TimerManager's lifecycle will be managed - * by this FactoryBean. - *

Alternatively (and typically), you can specify the JNDI name - * of the target TimerManager. - * @see #setTimerManagerName - */ - public void setTimerManager(TimerManager timerManager) { - this.timerManager = timerManager; - } - - /** - * Set the JNDI name of the CommonJ TimerManager. - *

This can either be a fully qualified JNDI name, or the JNDI name relative - * to the current environment naming context if "resourceRef" is set to "true". - * @see #setTimerManager - * @see #setResourceRef - */ - public void setTimerManagerName(String timerManagerName) { - this.timerManagerName = timerManagerName; - } - - /** - * Specify whether the TimerManager obtained by this FactoryBean - * is a shared instance ("true") or an independent instance ("false"). - * The lifecycle of the former is supposed to be managed by the application - * server, while the lifecycle of the latter is up to the application. - *

Default is "false", i.e. managing an independent TimerManager instance. - * This is what the CommonJ specification suggests that application servers - * are supposed to offer via JNDI lookups, typically declared as a - * {@code resource-ref} of type {@code commonj.timers.TimerManager} - * in {@code web.xml}, with {@code res-sharing-scope} set to 'Unshareable'. - *

Switch this flag to "true" if you are obtaining a shared TimerManager, - * typically through specifying the JNDI location of a TimerManager that - * has been explicitly declared as 'Shareable'. Note that WebLogic's - * cluster-aware Job Scheduler is a shared TimerManager too. - *

The sole difference between this FactoryBean being in shared or - * non-shared mode is that it will only attempt to suspend / resume / stop - * the underlying TimerManager in case of an independent (non-shared) instance. - * This only affects the {@link org.springframework.context.Lifecycle} support - * as well as application context shutdown. - * @see #stop() - * @see #start() - * @see #destroy() - * @see commonj.timers.TimerManager - */ - public void setShared(boolean shared) { - this.shared = shared; - } - - - @Override - public void afterPropertiesSet() throws NamingException { - if (this.timerManager == null) { - if (this.timerManagerName == null) { - throw new IllegalArgumentException("Either 'timerManager' or 'timerManagerName' must be specified"); - } - this.timerManager = lookup(this.timerManagerName, TimerManager.class); - } - } - - /** - * Return the configured TimerManager, if any. - * @return the TimerManager, or {@code null} if not available - */ - @Nullable - protected final TimerManager getTimerManager() { - return this.timerManager; - } - - /** - * Obtain the TimerManager for actual use. - * @return the TimerManager (never {@code null}) - * @throws IllegalStateException in case of no TimerManager set - * @since 5.0 - */ - protected TimerManager obtainTimerManager() { - Assert.notNull(this.timerManager, "No TimerManager set"); - return this.timerManager; - } - - - //--------------------------------------------------------------------- - // Implementation of Lifecycle interface - //--------------------------------------------------------------------- - - /** - * Resumes the underlying TimerManager (if not shared). - * @see commonj.timers.TimerManager#resume() - */ - @Override - public void start() { - if (!this.shared) { - obtainTimerManager().resume(); - } - } - - /** - * Suspends the underlying TimerManager (if not shared). - * @see commonj.timers.TimerManager#suspend() - */ - @Override - public void stop() { - if (!this.shared) { - obtainTimerManager().suspend(); - } - } - - /** - * Considers the underlying TimerManager as running if it is - * neither suspending nor stopping. - * @see commonj.timers.TimerManager#isSuspending() - * @see commonj.timers.TimerManager#isStopping() - */ - @Override - public boolean isRunning() { - TimerManager tm = obtainTimerManager(); - return (!tm.isSuspending() && !tm.isStopping()); - } - - - //--------------------------------------------------------------------- - // Implementation of DisposableBean interface - //--------------------------------------------------------------------- - - /** - * Stops the underlying TimerManager (if not shared). - * @see commonj.timers.TimerManager#stop() - */ - @Override - public void destroy() { - // Stop the entire TimerManager, if necessary. - if (this.timerManager != null && !this.shared) { - // May return early, but at least we already cancelled all known Timers. - this.timerManager.stop(); - } - } - -} diff --git a/spring-context-support/src/main/java/org/springframework/scheduling/commonj/TimerManagerFactoryBean.java b/spring-context-support/src/main/java/org/springframework/scheduling/commonj/TimerManagerFactoryBean.java deleted file mode 100644 index 1d6db6c820f..00000000000 --- a/spring-context-support/src/main/java/org/springframework/scheduling/commonj/TimerManagerFactoryBean.java +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright 2002-2020 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.scheduling.commonj; - -import java.util.ArrayList; -import java.util.List; - -import javax.naming.NamingException; - -import commonj.timers.Timer; -import commonj.timers.TimerManager; - -import org.springframework.beans.factory.DisposableBean; -import org.springframework.beans.factory.FactoryBean; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.context.Lifecycle; -import org.springframework.lang.Nullable; - -/** - * {@link org.springframework.beans.factory.FactoryBean} that retrieves a - * CommonJ {@link commonj.timers.TimerManager} and exposes it for bean references. - * - *

This is the central convenience class for setting up a - * CommonJ TimerManager in a Spring context. - * - *

Allows for registration of ScheduledTimerListeners. This is the main - * purpose of this class; the TimerManager itself could also be fetched - * from JNDI via {@link org.springframework.jndi.JndiObjectFactoryBean}. - * In scenarios that just require static registration of tasks at startup, - * there is no need to access the TimerManager itself in application code. - * - *

Note that the TimerManager uses a TimerListener instance that is - * shared between repeated executions, in contrast to Quartz which - * instantiates a new Job for each execution. - * - * @author Juergen Hoeller - * @since 2.0 - * @see ScheduledTimerListener - * @see commonj.timers.TimerManager - * @see commonj.timers.TimerListener - * @deprecated as of 5.1, in favor of EE 7's - * {@link org.springframework.scheduling.concurrent.DefaultManagedTaskScheduler} - */ -@Deprecated -public class TimerManagerFactoryBean extends TimerManagerAccessor - implements FactoryBean, InitializingBean, DisposableBean, Lifecycle { - - @Nullable - private ScheduledTimerListener[] scheduledTimerListeners; - - @Nullable - private List timers; - - - /** - * Register a list of ScheduledTimerListener objects with the TimerManager - * that this FactoryBean creates. Depending on each ScheduledTimerListener's settings, - * it will be registered via one of TimerManager's schedule methods. - * @see commonj.timers.TimerManager#schedule(commonj.timers.TimerListener, long) - * @see commonj.timers.TimerManager#schedule(commonj.timers.TimerListener, long, long) - * @see commonj.timers.TimerManager#scheduleAtFixedRate(commonj.timers.TimerListener, long, long) - */ - public void setScheduledTimerListeners(ScheduledTimerListener[] scheduledTimerListeners) { - this.scheduledTimerListeners = scheduledTimerListeners; - } - - - //--------------------------------------------------------------------- - // Implementation of InitializingBean interface - //--------------------------------------------------------------------- - - @Override - public void afterPropertiesSet() throws NamingException { - super.afterPropertiesSet(); - - if (this.scheduledTimerListeners != null) { - this.timers = new ArrayList<>(this.scheduledTimerListeners.length); - TimerManager timerManager = obtainTimerManager(); - for (ScheduledTimerListener scheduledTask : this.scheduledTimerListeners) { - Timer timer; - if (scheduledTask.isOneTimeTask()) { - timer = timerManager.schedule(scheduledTask.getTimerListener(), scheduledTask.getDelay()); - } - else { - if (scheduledTask.isFixedRate()) { - timer = timerManager.scheduleAtFixedRate( - scheduledTask.getTimerListener(), scheduledTask.getDelay(), scheduledTask.getPeriod()); - } - else { - timer = timerManager.schedule( - scheduledTask.getTimerListener(), scheduledTask.getDelay(), scheduledTask.getPeriod()); - } - } - this.timers.add(timer); - } - } - } - - - //--------------------------------------------------------------------- - // Implementation of FactoryBean interface - //--------------------------------------------------------------------- - - @Override - @Nullable - public TimerManager getObject() { - return getTimerManager(); - } - - @Override - public Class getObjectType() { - TimerManager timerManager = getTimerManager(); - return (timerManager != null ? timerManager.getClass() : TimerManager.class); - } - - @Override - public boolean isSingleton() { - return true; - } - - - //--------------------------------------------------------------------- - // Implementation of DisposableBean interface - //--------------------------------------------------------------------- - - /** - * Cancels all statically registered Timers on shutdown, - * and stops the underlying TimerManager (if not shared). - * @see commonj.timers.Timer#cancel() - * @see commonj.timers.TimerManager#stop() - */ - @Override - public void destroy() { - // Cancel all registered timers. - if (this.timers != null) { - for (Timer timer : this.timers) { - try { - timer.cancel(); - } - catch (Throwable ex) { - logger.debug("Could not cancel CommonJ Timer", ex); - } - } - this.timers.clear(); - } - - // Stop the TimerManager itself. - super.destroy(); - } - -} diff --git a/spring-context-support/src/main/java/org/springframework/scheduling/commonj/TimerManagerTaskScheduler.java b/spring-context-support/src/main/java/org/springframework/scheduling/commonj/TimerManagerTaskScheduler.java deleted file mode 100644 index 97ea5b86a81..00000000000 --- a/spring-context-support/src/main/java/org/springframework/scheduling/commonj/TimerManagerTaskScheduler.java +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Copyright 2002-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.scheduling.commonj; - -import java.util.Date; -import java.util.concurrent.Delayed; -import java.util.concurrent.FutureTask; -import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.TimeUnit; - -import commonj.timers.Timer; -import commonj.timers.TimerListener; - -import org.springframework.lang.Nullable; -import org.springframework.scheduling.TaskScheduler; -import org.springframework.scheduling.Trigger; -import org.springframework.scheduling.support.SimpleTriggerContext; -import org.springframework.scheduling.support.TaskUtils; -import org.springframework.util.Assert; -import org.springframework.util.ErrorHandler; - -/** - * Implementation of Spring's {@link TaskScheduler} interface, wrapping - * a CommonJ {@link commonj.timers.TimerManager}. - * - * @author Juergen Hoeller - * @author Mark Fisher - * @since 3.0 - * @deprecated as of 5.1, in favor of EE 7's - * {@link org.springframework.scheduling.concurrent.DefaultManagedTaskScheduler} - */ -@Deprecated -public class TimerManagerTaskScheduler extends TimerManagerAccessor implements TaskScheduler { - - @Nullable - private volatile ErrorHandler errorHandler; - - - /** - * Provide an {@link ErrorHandler} strategy. - */ - public void setErrorHandler(ErrorHandler errorHandler) { - this.errorHandler = errorHandler; - } - - - @Override - @Nullable - public ScheduledFuture schedule(Runnable task, Trigger trigger) { - return new ReschedulingTimerListener(errorHandlingTask(task, true), trigger).schedule(); - } - - @Override - public ScheduledFuture schedule(Runnable task, Date startTime) { - TimerScheduledFuture futureTask = new TimerScheduledFuture(errorHandlingTask(task, false)); - Timer timer = obtainTimerManager().schedule(futureTask, startTime); - futureTask.setTimer(timer); - return futureTask; - } - - @Override - public ScheduledFuture scheduleAtFixedRate(Runnable task, Date startTime, long period) { - TimerScheduledFuture futureTask = new TimerScheduledFuture(errorHandlingTask(task, true)); - Timer timer = obtainTimerManager().scheduleAtFixedRate(futureTask, startTime, period); - futureTask.setTimer(timer); - return futureTask; - } - - @Override - public ScheduledFuture scheduleAtFixedRate(Runnable task, long period) { - TimerScheduledFuture futureTask = new TimerScheduledFuture(errorHandlingTask(task, true)); - Timer timer = obtainTimerManager().scheduleAtFixedRate(futureTask, 0, period); - futureTask.setTimer(timer); - return futureTask; - } - - @Override - public ScheduledFuture scheduleWithFixedDelay(Runnable task, Date startTime, long delay) { - TimerScheduledFuture futureTask = new TimerScheduledFuture(errorHandlingTask(task, true)); - Timer timer = obtainTimerManager().schedule(futureTask, startTime, delay); - futureTask.setTimer(timer); - return futureTask; - } - - @Override - public ScheduledFuture scheduleWithFixedDelay(Runnable task, long delay) { - TimerScheduledFuture futureTask = new TimerScheduledFuture(errorHandlingTask(task, true)); - Timer timer = obtainTimerManager().schedule(futureTask, 0, delay); - futureTask.setTimer(timer); - return futureTask; - } - - private Runnable errorHandlingTask(Runnable delegate, boolean isRepeatingTask) { - return TaskUtils.decorateTaskWithErrorHandler(delegate, this.errorHandler, isRepeatingTask); - } - - - /** - * ScheduledFuture adapter that wraps a CommonJ Timer. - */ - private static class TimerScheduledFuture extends FutureTask implements TimerListener, ScheduledFuture { - - @Nullable - protected transient Timer timer; - - protected transient boolean cancelled = false; - - public TimerScheduledFuture(Runnable runnable) { - super(runnable, null); - } - - public void setTimer(Timer timer) { - this.timer = timer; - } - - @Override - public void timerExpired(Timer timer) { - runAndReset(); - } - - @Override - public boolean cancel(boolean mayInterruptIfRunning) { - boolean result = super.cancel(mayInterruptIfRunning); - if (this.timer != null) { - this.timer.cancel(); - } - this.cancelled = true; - return result; - } - - @Override - public long getDelay(TimeUnit unit) { - Assert.state(this.timer != null, "No Timer available"); - return unit.convert(this.timer.getScheduledExecutionTime() - System.currentTimeMillis(), TimeUnit.MILLISECONDS); - } - - @Override - public int compareTo(Delayed other) { - if (this == other) { - return 0; - } - long diff = getDelay(TimeUnit.MILLISECONDS) - other.getDelay(TimeUnit.MILLISECONDS); - return (diff == 0 ? 0 : ((diff < 0) ? -1 : 1)); - } - } - - - /** - * ScheduledFuture adapter for trigger-based rescheduling. - */ - private class ReschedulingTimerListener extends TimerScheduledFuture { - - private final Trigger trigger; - - private final SimpleTriggerContext triggerContext = new SimpleTriggerContext(); - - private volatile Date scheduledExecutionTime = new Date(); - - public ReschedulingTimerListener(Runnable runnable, Trigger trigger) { - super(runnable); - this.trigger = trigger; - } - - @Nullable - public ScheduledFuture schedule() { - Date nextExecutionTime = this.trigger.nextExecutionTime(this.triggerContext); - if (nextExecutionTime == null) { - return null; - } - this.scheduledExecutionTime = nextExecutionTime; - setTimer(obtainTimerManager().schedule(this, this.scheduledExecutionTime)); - return this; - } - - @Override - public void timerExpired(Timer timer) { - Date actualExecutionTime = new Date(); - super.timerExpired(timer); - Date completionTime = new Date(); - this.triggerContext.update(this.scheduledExecutionTime, actualExecutionTime, completionTime); - if (!this.cancelled) { - schedule(); - } - } - } - -} diff --git a/spring-context-support/src/main/java/org/springframework/scheduling/commonj/WorkManagerTaskExecutor.java b/spring-context-support/src/main/java/org/springframework/scheduling/commonj/WorkManagerTaskExecutor.java deleted file mode 100644 index a9adcc823d5..00000000000 --- a/spring-context-support/src/main/java/org/springframework/scheduling/commonj/WorkManagerTaskExecutor.java +++ /dev/null @@ -1,234 +0,0 @@ -/* - * Copyright 2002-2020 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.scheduling.commonj; - -import java.util.Collection; -import java.util.concurrent.Callable; -import java.util.concurrent.Future; -import java.util.concurrent.FutureTask; - -import javax.naming.NamingException; - -import commonj.work.Work; -import commonj.work.WorkException; -import commonj.work.WorkItem; -import commonj.work.WorkListener; -import commonj.work.WorkManager; -import commonj.work.WorkRejectedException; - -import org.springframework.beans.factory.InitializingBean; -import org.springframework.core.task.AsyncListenableTaskExecutor; -import org.springframework.core.task.TaskDecorator; -import org.springframework.core.task.TaskRejectedException; -import org.springframework.jndi.JndiLocatorSupport; -import org.springframework.lang.Nullable; -import org.springframework.scheduling.SchedulingException; -import org.springframework.scheduling.SchedulingTaskExecutor; -import org.springframework.util.Assert; -import org.springframework.util.concurrent.ListenableFuture; -import org.springframework.util.concurrent.ListenableFutureTask; - -/** - * TaskExecutor implementation that delegates to a CommonJ WorkManager, - * implementing the {@link commonj.work.WorkManager} interface, - * which either needs to be specified as reference or through the JNDI name. - * - *

This is the central convenience class for setting up a - * CommonJ WorkManager in a Spring context. - * - *

Also implements the CommonJ WorkManager interface itself, delegating all - * calls to the target WorkManager. Hence, a caller can choose whether it wants - * to talk to this executor through the Spring TaskExecutor interface or the - * CommonJ WorkManager interface. - * - *

The CommonJ WorkManager will usually be retrieved from the application - * server's JNDI environment, as defined in the server's management console. - * - *

Note: On EE 7/8 compliant versions of WebLogic and WebSphere, a - * {@link org.springframework.scheduling.concurrent.DefaultManagedTaskExecutor} - * should be preferred, following JSR-236 support in Java EE 7/8. - * - * @author Juergen Hoeller - * @since 2.0 - * @deprecated as of 5.1, in favor of the EE 7/8 based - * {@link org.springframework.scheduling.concurrent.DefaultManagedTaskExecutor} - */ -@Deprecated -public class WorkManagerTaskExecutor extends JndiLocatorSupport - implements AsyncListenableTaskExecutor, SchedulingTaskExecutor, WorkManager, InitializingBean { - - @Nullable - private WorkManager workManager; - - @Nullable - private String workManagerName; - - @Nullable - private WorkListener workListener; - - @Nullable - private TaskDecorator taskDecorator; - - - /** - * Specify the CommonJ WorkManager to delegate to. - *

Alternatively, you can also specify the JNDI name of the target WorkManager. - * @see #setWorkManagerName - */ - public void setWorkManager(WorkManager workManager) { - this.workManager = workManager; - } - - /** - * Set the JNDI name of the CommonJ WorkManager. - *

This can either be a fully qualified JNDI name, or the JNDI name relative - * to the current environment naming context if "resourceRef" is set to "true". - * @see #setWorkManager - * @see #setResourceRef - */ - public void setWorkManagerName(String workManagerName) { - this.workManagerName = workManagerName; - } - - /** - * Specify a CommonJ WorkListener to apply, if any. - *

This shared WorkListener instance will be passed on to the - * WorkManager by all {@link #execute} calls on this TaskExecutor. - */ - public void setWorkListener(WorkListener workListener) { - this.workListener = workListener; - } - - /** - * Specify a custom {@link TaskDecorator} to be applied to any {@link Runnable} - * about to be executed. - *

Note that such a decorator is not necessarily being applied to the - * user-supplied {@code Runnable}/{@code Callable} but rather to the actual - * execution callback (which may be a wrapper around the user-supplied task). - *

The primary use case is to set some execution context around the task's - * invocation, or to provide some monitoring/statistics for task execution. - *

NOTE: Exception handling in {@code TaskDecorator} implementations - * is limited to plain {@code Runnable} execution via {@code execute} calls. - * In case of {@code #submit} calls, the exposed {@code Runnable} will be a - * {@code FutureTask} which does not propagate any exceptions; you might - * have to cast it and call {@code Future#get} to evaluate exceptions. - * @since 4.3 - */ - public void setTaskDecorator(TaskDecorator taskDecorator) { - this.taskDecorator = taskDecorator; - } - - @Override - public void afterPropertiesSet() throws NamingException { - if (this.workManager == null) { - if (this.workManagerName == null) { - throw new IllegalArgumentException("Either 'workManager' or 'workManagerName' must be specified"); - } - this.workManager = lookup(this.workManagerName, WorkManager.class); - } - } - - private WorkManager obtainWorkManager() { - Assert.state(this.workManager != null, "No WorkManager specified"); - return this.workManager; - } - - - //------------------------------------------------------------------------- - // Implementation of the Spring SchedulingTaskExecutor interface - //------------------------------------------------------------------------- - - @Override - public void execute(Runnable task) { - Work work = new DelegatingWork(this.taskDecorator != null ? this.taskDecorator.decorate(task) : task); - try { - if (this.workListener != null) { - obtainWorkManager().schedule(work, this.workListener); - } - else { - obtainWorkManager().schedule(work); - } - } - catch (WorkRejectedException ex) { - throw new TaskRejectedException("CommonJ WorkManager did not accept task: " + task, ex); - } - catch (WorkException ex) { - throw new SchedulingException("Could not schedule task on CommonJ WorkManager", ex); - } - } - - @Override - public void execute(Runnable task, long startTimeout) { - execute(task); - } - - @Override - public Future submit(Runnable task) { - FutureTask future = new FutureTask<>(task, null); - execute(future); - return future; - } - - @Override - public Future submit(Callable task) { - FutureTask future = new FutureTask<>(task); - execute(future); - return future; - } - - @Override - public ListenableFuture submitListenable(Runnable task) { - ListenableFutureTask future = new ListenableFutureTask<>(task, null); - execute(future); - return future; - } - - @Override - public ListenableFuture submitListenable(Callable task) { - ListenableFutureTask future = new ListenableFutureTask<>(task); - execute(future); - return future; - } - - - //------------------------------------------------------------------------- - // Implementation of the CommonJ WorkManager interface - //------------------------------------------------------------------------- - - @Override - public WorkItem schedule(Work work) throws WorkException, IllegalArgumentException { - return obtainWorkManager().schedule(work); - } - - @Override - public WorkItem schedule(Work work, WorkListener workListener) throws WorkException { - return obtainWorkManager().schedule(work, workListener); - } - - @Override - @SuppressWarnings("rawtypes") - public boolean waitForAll(Collection workItems, long timeout) throws InterruptedException { - return obtainWorkManager().waitForAll(workItems, timeout); - } - - @Override - @SuppressWarnings("rawtypes") - public Collection waitForAny(Collection workItems, long timeout) throws InterruptedException { - return obtainWorkManager().waitForAny(workItems, timeout); - } - -} diff --git a/spring-context-support/src/main/java/org/springframework/scheduling/commonj/package-info.java b/spring-context-support/src/main/java/org/springframework/scheduling/commonj/package-info.java deleted file mode 100644 index ca0fbead681..00000000000 --- a/spring-context-support/src/main/java/org/springframework/scheduling/commonj/package-info.java +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Convenience classes for scheduling based on the CommonJ WorkManager/TimerManager - * facility, as supported by IBM WebSphere 6.0+ and BEA WebLogic 9.0+. - */ -@NonNullApi -@NonNullFields -package org.springframework.scheduling.commonj; - -import org.springframework.lang.NonNullApi; -import org.springframework.lang.NonNullFields; diff --git a/spring-context-support/src/test/java/org/springframework/cache/ehcache/EhCacheCacheManagerTests.java b/spring-context-support/src/test/java/org/springframework/cache/ehcache/EhCacheCacheManagerTests.java deleted file mode 100644 index fd33777c4bb..00000000000 --- a/spring-context-support/src/test/java/org/springframework/cache/ehcache/EhCacheCacheManagerTests.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright 2002-2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.cache.ehcache; - -import net.sf.ehcache.CacheManager; -import net.sf.ehcache.config.CacheConfiguration; -import net.sf.ehcache.config.Configuration; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; - -import org.springframework.cache.transaction.AbstractTransactionSupportingCacheManagerTests; - -/** - * @author Stephane Nicoll - */ -public class EhCacheCacheManagerTests extends AbstractTransactionSupportingCacheManagerTests { - - private CacheManager nativeCacheManager; - - private EhCacheCacheManager cacheManager; - - private EhCacheCacheManager transactionalCacheManager; - - - @BeforeEach - public void setup() { - nativeCacheManager = new CacheManager(new Configuration().name("EhCacheCacheManagerTests") - .defaultCache(new CacheConfiguration("default", 100))); - addNativeCache(CACHE_NAME); - - cacheManager = new EhCacheCacheManager(nativeCacheManager); - cacheManager.setTransactionAware(false); - cacheManager.afterPropertiesSet(); - - transactionalCacheManager = new EhCacheCacheManager(nativeCacheManager); - transactionalCacheManager.setTransactionAware(true); - transactionalCacheManager.afterPropertiesSet(); - } - - @AfterEach - public void shutdown() { - nativeCacheManager.shutdown(); - } - - - @Override - protected EhCacheCacheManager getCacheManager(boolean transactionAware) { - if (transactionAware) { - return transactionalCacheManager; - } - else { - return cacheManager; - } - } - - @Override - protected Class getCacheType() { - return EhCacheCache.class; - } - - @Override - protected void addNativeCache(String cacheName) { - nativeCacheManager.addCache(cacheName); - } - - @Override - protected void removeNativeCache(String cacheName) { - nativeCacheManager.removeCache(cacheName); - } - -} diff --git a/spring-context-support/src/test/java/org/springframework/cache/ehcache/EhCacheCacheTests.java b/spring-context-support/src/test/java/org/springframework/cache/ehcache/EhCacheCacheTests.java deleted file mode 100644 index b9bb1cc8542..00000000000 --- a/spring-context-support/src/test/java/org/springframework/cache/ehcache/EhCacheCacheTests.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright 2002-2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.cache.ehcache; - -import net.sf.ehcache.CacheManager; -import net.sf.ehcache.Ehcache; -import net.sf.ehcache.Element; -import net.sf.ehcache.config.CacheConfiguration; -import net.sf.ehcache.config.Configuration; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import org.springframework.context.testfixture.cache.AbstractCacheTests; -import org.springframework.core.testfixture.EnabledForTestGroups; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.springframework.core.testfixture.TestGroup.LONG_RUNNING; - -/** - * @author Costin Leau - * @author Stephane Nicoll - * @author Juergen Hoeller - */ -public class EhCacheCacheTests extends AbstractCacheTests { - - private CacheManager cacheManager; - - private Ehcache nativeCache; - - private EhCacheCache cache; - - - @BeforeEach - public void setup() { - cacheManager = new CacheManager(new Configuration().name("EhCacheCacheTests") - .defaultCache(new CacheConfiguration("default", 100))); - nativeCache = new net.sf.ehcache.Cache(new CacheConfiguration(CACHE_NAME, 100)); - cacheManager.addCache(nativeCache); - - cache = new EhCacheCache(nativeCache); - } - - @AfterEach - public void shutdown() { - cacheManager.shutdown(); - } - - - @Override - protected EhCacheCache getCache() { - return cache; - } - - @Override - protected Ehcache getNativeCache() { - return nativeCache; - } - - - @Test - @EnabledForTestGroups(LONG_RUNNING) - public void testExpiredElements() throws Exception { - String key = "brancusi"; - String value = "constantin"; - Element brancusi = new Element(key, value); - // ttl = 10s - brancusi.setTimeToLive(3); - nativeCache.put(brancusi); - - assertThat(cache.get(key).get()).isEqualTo(value); - // wait for the entry to expire - Thread.sleep(5 * 1000); - assertThat(cache.get(key)).isNull(); - } - -} diff --git a/spring-context-support/src/test/java/org/springframework/cache/ehcache/EhCacheSupportTests.java b/spring-context-support/src/test/java/org/springframework/cache/ehcache/EhCacheSupportTests.java deleted file mode 100644 index c663b0fba33..00000000000 --- a/spring-context-support/src/test/java/org/springframework/cache/ehcache/EhCacheSupportTests.java +++ /dev/null @@ -1,287 +0,0 @@ -/* - * Copyright 2002-2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.cache.ehcache; - -import net.sf.ehcache.Cache; -import net.sf.ehcache.CacheException; -import net.sf.ehcache.CacheManager; -import net.sf.ehcache.Ehcache; -import net.sf.ehcache.config.CacheConfiguration; -import net.sf.ehcache.constructs.blocking.BlockingCache; -import net.sf.ehcache.constructs.blocking.SelfPopulatingCache; -import net.sf.ehcache.constructs.blocking.UpdatingCacheEntryFactory; -import net.sf.ehcache.constructs.blocking.UpdatingSelfPopulatingCache; -import org.junit.jupiter.api.Test; - -import org.springframework.core.io.ClassPathResource; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatExceptionOfType; - -/** - * @author Juergen Hoeller - * @author Dmitriy Kopylenko - * @since 27.09.2004 - */ -public class EhCacheSupportTests { - - @Test - public void testBlankCacheManager() { - EhCacheManagerFactoryBean cacheManagerFb = new EhCacheManagerFactoryBean(); - cacheManagerFb.setCacheManagerName("myCacheManager"); - assertThat(cacheManagerFb.getObjectType()).isEqualTo(CacheManager.class); - assertThat(cacheManagerFb.isSingleton()).as("Singleton property").isTrue(); - cacheManagerFb.afterPropertiesSet(); - try { - CacheManager cm = cacheManagerFb.getObject(); - assertThat(cm.getCacheNames().length == 0).as("Loaded CacheManager with no caches").isTrue(); - Cache myCache1 = cm.getCache("myCache1"); - assertThat(myCache1 == null).as("No myCache1 defined").isTrue(); - } - finally { - cacheManagerFb.destroy(); - } - } - - @Test - public void testCacheManagerConflict() { - EhCacheManagerFactoryBean cacheManagerFb = new EhCacheManagerFactoryBean(); - try { - cacheManagerFb.setCacheManagerName("myCacheManager"); - assertThat(cacheManagerFb.getObjectType()).isEqualTo(CacheManager.class); - assertThat(cacheManagerFb.isSingleton()).as("Singleton property").isTrue(); - cacheManagerFb.afterPropertiesSet(); - CacheManager cm = cacheManagerFb.getObject(); - assertThat(cm.getCacheNames().length == 0).as("Loaded CacheManager with no caches").isTrue(); - Cache myCache1 = cm.getCache("myCache1"); - assertThat(myCache1 == null).as("No myCache1 defined").isTrue(); - - EhCacheManagerFactoryBean cacheManagerFb2 = new EhCacheManagerFactoryBean(); - cacheManagerFb2.setCacheManagerName("myCacheManager"); - assertThatExceptionOfType(CacheException.class).as("because of naming conflict").isThrownBy( - cacheManagerFb2::afterPropertiesSet); - } - finally { - cacheManagerFb.destroy(); - } - } - - @Test - public void testAcceptExistingCacheManager() { - EhCacheManagerFactoryBean cacheManagerFb = new EhCacheManagerFactoryBean(); - cacheManagerFb.setCacheManagerName("myCacheManager"); - assertThat(cacheManagerFb.getObjectType()).isEqualTo(CacheManager.class); - assertThat(cacheManagerFb.isSingleton()).as("Singleton property").isTrue(); - cacheManagerFb.afterPropertiesSet(); - try { - CacheManager cm = cacheManagerFb.getObject(); - assertThat(cm.getCacheNames().length == 0).as("Loaded CacheManager with no caches").isTrue(); - Cache myCache1 = cm.getCache("myCache1"); - assertThat(myCache1 == null).as("No myCache1 defined").isTrue(); - - EhCacheManagerFactoryBean cacheManagerFb2 = new EhCacheManagerFactoryBean(); - cacheManagerFb2.setCacheManagerName("myCacheManager"); - cacheManagerFb2.setAcceptExisting(true); - cacheManagerFb2.afterPropertiesSet(); - CacheManager cm2 = cacheManagerFb2.getObject(); - assertThat(cm2).isSameAs(cm); - cacheManagerFb2.destroy(); - } - finally { - cacheManagerFb.destroy(); - } - } - - public void testCacheManagerFromConfigFile() { - EhCacheManagerFactoryBean cacheManagerFb = new EhCacheManagerFactoryBean(); - cacheManagerFb.setConfigLocation(new ClassPathResource("testEhcache.xml", getClass())); - cacheManagerFb.setCacheManagerName("myCacheManager"); - cacheManagerFb.afterPropertiesSet(); - try { - CacheManager cm = cacheManagerFb.getObject(); - assertThat(cm.getCacheNames().length == 1).as("Correct number of caches loaded").isTrue(); - Cache myCache1 = cm.getCache("myCache1"); - assertThat(myCache1.getCacheConfiguration().isEternal()).as("myCache1 is not eternal").isFalse(); - assertThat(myCache1.getCacheConfiguration().getMaxEntriesLocalHeap() == 300).as("myCache1.maxElements == 300").isTrue(); - } - finally { - cacheManagerFb.destroy(); - } - } - - @Test - public void testEhCacheFactoryBeanWithDefaultCacheManager() { - doTestEhCacheFactoryBean(false); - } - - @Test - public void testEhCacheFactoryBeanWithExplicitCacheManager() { - doTestEhCacheFactoryBean(true); - } - - private void doTestEhCacheFactoryBean(boolean useCacheManagerFb) { - Cache cache; - EhCacheManagerFactoryBean cacheManagerFb = null; - boolean cacheManagerFbInitialized = false; - try { - EhCacheFactoryBean cacheFb = new EhCacheFactoryBean(); - Class objectType = cacheFb.getObjectType(); - assertThat(Ehcache.class.isAssignableFrom(objectType)).isTrue(); - assertThat(cacheFb.isSingleton()).as("Singleton property").isTrue(); - if (useCacheManagerFb) { - cacheManagerFb = new EhCacheManagerFactoryBean(); - cacheManagerFb.setConfigLocation(new ClassPathResource("testEhcache.xml", getClass())); - cacheManagerFb.setCacheManagerName("cache"); - cacheManagerFb.afterPropertiesSet(); - cacheManagerFbInitialized = true; - cacheFb.setCacheManager(cacheManagerFb.getObject()); - } - - cacheFb.setCacheName("myCache1"); - cacheFb.afterPropertiesSet(); - cache = (Cache) cacheFb.getObject(); - Class objectType2 = cacheFb.getObjectType(); - assertThat(objectType2).isSameAs(objectType); - CacheConfiguration config = cache.getCacheConfiguration(); - assertThat(cache.getName()).isEqualTo("myCache1"); - if (useCacheManagerFb){ - assertThat(config.getMaxEntriesLocalHeap()).as("myCache1.maxElements").isEqualTo(300); - } - else { - assertThat(config.getMaxEntriesLocalHeap()).as("myCache1.maxElements").isEqualTo(10000); - } - - // Cache region is not defined. Should create one with default properties. - cacheFb = new EhCacheFactoryBean(); - if (useCacheManagerFb) { - cacheFb.setCacheManager(cacheManagerFb.getObject()); - } - cacheFb.setCacheName("undefinedCache"); - cacheFb.afterPropertiesSet(); - cache = (Cache) cacheFb.getObject(); - config = cache.getCacheConfiguration(); - assertThat(cache.getName()).isEqualTo("undefinedCache"); - assertThat(config.getMaxEntriesLocalHeap() == 10000).as("default maxElements is correct").isTrue(); - assertThat(config.isEternal()).as("default eternal is correct").isFalse(); - assertThat(config.getTimeToLiveSeconds() == 120).as("default timeToLive is correct").isTrue(); - assertThat(config.getTimeToIdleSeconds() == 120).as("default timeToIdle is correct").isTrue(); - assertThat(config.getDiskExpiryThreadIntervalSeconds() == 120).as("default diskExpiryThreadIntervalSeconds is correct").isTrue(); - - // overriding the default properties - cacheFb = new EhCacheFactoryBean(); - if (useCacheManagerFb) { - cacheFb.setCacheManager(cacheManagerFb.getObject()); - } - cacheFb.setBeanName("undefinedCache2"); - cacheFb.setMaxEntriesLocalHeap(5); - cacheFb.setTimeToLive(8); - cacheFb.setTimeToIdle(7); - cacheFb.setDiskExpiryThreadIntervalSeconds(10); - cacheFb.afterPropertiesSet(); - cache = (Cache) cacheFb.getObject(); - config = cache.getCacheConfiguration(); - - assertThat(cache.getName()).isEqualTo("undefinedCache2"); - assertThat(config.getMaxEntriesLocalHeap() == 5).as("overridden maxElements is correct").isTrue(); - assertThat(config.getTimeToLiveSeconds() == 8).as("default timeToLive is correct").isTrue(); - assertThat(config.getTimeToIdleSeconds() == 7).as("default timeToIdle is correct").isTrue(); - assertThat(config.getDiskExpiryThreadIntervalSeconds() == 10).as("overridden diskExpiryThreadIntervalSeconds is correct").isTrue(); - } - finally { - if (cacheManagerFbInitialized) { - cacheManagerFb.destroy(); - } - else { - CacheManager.getInstance().shutdown(); - } - } - } - - @Test - public void testEhCacheFactoryBeanWithBlockingCache() { - EhCacheManagerFactoryBean cacheManagerFb = new EhCacheManagerFactoryBean(); - cacheManagerFb.afterPropertiesSet(); - try { - CacheManager cm = cacheManagerFb.getObject(); - EhCacheFactoryBean cacheFb = new EhCacheFactoryBean(); - cacheFb.setCacheManager(cm); - cacheFb.setCacheName("myCache1"); - cacheFb.setBlocking(true); - assertThat(BlockingCache.class).isEqualTo(cacheFb.getObjectType()); - cacheFb.afterPropertiesSet(); - Ehcache myCache1 = cm.getEhcache("myCache1"); - boolean condition = myCache1 instanceof BlockingCache; - assertThat(condition).isTrue(); - } - finally { - cacheManagerFb.destroy(); - } - } - - @Test - public void testEhCacheFactoryBeanWithSelfPopulatingCache() { - EhCacheManagerFactoryBean cacheManagerFb = new EhCacheManagerFactoryBean(); - cacheManagerFb.afterPropertiesSet(); - try { - CacheManager cm = cacheManagerFb.getObject(); - EhCacheFactoryBean cacheFb = new EhCacheFactoryBean(); - cacheFb.setCacheManager(cm); - cacheFb.setCacheName("myCache1"); - cacheFb.setCacheEntryFactory(key -> key); - assertThat(SelfPopulatingCache.class).isEqualTo(cacheFb.getObjectType()); - cacheFb.afterPropertiesSet(); - Ehcache myCache1 = cm.getEhcache("myCache1"); - boolean condition = myCache1 instanceof SelfPopulatingCache; - assertThat(condition).isTrue(); - assertThat(myCache1.get("myKey1").getObjectValue()).isEqualTo("myKey1"); - } - finally { - cacheManagerFb.destroy(); - } - } - - @Test - public void testEhCacheFactoryBeanWithUpdatingSelfPopulatingCache() { - EhCacheManagerFactoryBean cacheManagerFb = new EhCacheManagerFactoryBean(); - cacheManagerFb.afterPropertiesSet(); - try { - CacheManager cm = cacheManagerFb.getObject(); - EhCacheFactoryBean cacheFb = new EhCacheFactoryBean(); - cacheFb.setCacheManager(cm); - cacheFb.setCacheName("myCache1"); - cacheFb.setCacheEntryFactory(new UpdatingCacheEntryFactory() { - @Override - public Object createEntry(Object key) { - return key; - } - @Override - public void updateEntryValue(Object key, Object value) { - } - }); - assertThat(UpdatingSelfPopulatingCache.class).isEqualTo(cacheFb.getObjectType()); - cacheFb.afterPropertiesSet(); - Ehcache myCache1 = cm.getEhcache("myCache1"); - boolean condition = myCache1 instanceof UpdatingSelfPopulatingCache; - assertThat(condition).isTrue(); - assertThat(myCache1.get("myKey1").getObjectValue()).isEqualTo("myKey1"); - } - finally { - cacheManagerFb.destroy(); - } - } - -} diff --git a/spring-context-support/src/test/java/org/springframework/cache/jcache/JCacheEhCache3AnnotationTests.java b/spring-context-support/src/test/java/org/springframework/cache/jcache/JCacheEhCache3AnnotationTests.java deleted file mode 100644 index 105e4e62099..00000000000 --- a/spring-context-support/src/test/java/org/springframework/cache/jcache/JCacheEhCache3AnnotationTests.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2002-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.cache.jcache; - -import javax.cache.Caching; -import javax.cache.spi.CachingProvider; - -/** - * Just here to be run against EHCache 3, whereas the original JCacheEhCacheAnnotationTests - * runs against EhCache 2.x with the EhCache-JCache add-on. - * - * @author Juergen Hoeller - */ -public class JCacheEhCache3AnnotationTests extends JCacheEhCacheAnnotationTests { - - @Override - protected CachingProvider getCachingProvider() { - return Caching.getCachingProvider("org.ehcache.jsr107.EhcacheCachingProvider"); - } - -} diff --git a/spring-context-support/src/test/java/org/springframework/cache/jcache/JCacheEhCache3ApiTests.java b/spring-context-support/src/test/java/org/springframework/cache/jcache/JCacheEhCache3ApiTests.java deleted file mode 100644 index 32a2585c9f8..00000000000 --- a/spring-context-support/src/test/java/org/springframework/cache/jcache/JCacheEhCache3ApiTests.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2002-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.cache.jcache; - -import javax.cache.Caching; -import javax.cache.spi.CachingProvider; - -/** - * Just here to be run against EHCache 3, whereas the original JCacheEhCacheAnnotationTests - * runs against EhCache 2.x with the EhCache-JCache add-on. - * - * @author Stephane Nicoll - */ -public class JCacheEhCache3ApiTests extends JCacheEhCacheApiTests { - - @Override - protected CachingProvider getCachingProvider() { - return Caching.getCachingProvider("org.ehcache.jsr107.EhcacheCachingProvider"); - } - -} diff --git a/spring-context-support/src/test/java/org/springframework/cache/jcache/JCacheEhCacheAnnotationTests.java b/spring-context-support/src/test/java/org/springframework/cache/jcache/JCacheEhCacheAnnotationTests.java index 188cc293c97..88a6ba2cf48 100644 --- a/spring-context-support/src/test/java/org/springframework/cache/jcache/JCacheEhCacheAnnotationTests.java +++ b/spring-context-support/src/test/java/org/springframework/cache/jcache/JCacheEhCacheAnnotationTests.java @@ -64,7 +64,7 @@ public class JCacheEhCacheAnnotationTests extends AbstractCacheAnnotationTests { } protected CachingProvider getCachingProvider() { - return Caching.getCachingProvider("org.ehcache.jcache.JCacheCachingProvider"); + return Caching.getCachingProvider("org.ehcache.jsr107.EhcacheCachingProvider"); } @AfterEach diff --git a/spring-context-support/src/test/java/org/springframework/cache/jcache/JCacheEhCacheApiTests.java b/spring-context-support/src/test/java/org/springframework/cache/jcache/JCacheEhCacheApiTests.java index b826e2a3fb3..3f56f2e06c5 100644 --- a/spring-context-support/src/test/java/org/springframework/cache/jcache/JCacheEhCacheApiTests.java +++ b/spring-context-support/src/test/java/org/springframework/cache/jcache/JCacheEhCacheApiTests.java @@ -54,7 +54,7 @@ public class JCacheEhCacheApiTests extends AbstractValueAdaptingCacheTests) proxyFactory.getProxy()); - } - - @Test - @SuppressWarnings("unchecked") - public void testMethodValidationPostProcessor() { - StaticApplicationContext ac = new StaticApplicationContext(); - ac.registerSingleton("mvpp", MethodValidationPostProcessor.class); - MutablePropertyValues pvs = new MutablePropertyValues(); - pvs.add("beforeExistingAdvisors", false); - ac.registerSingleton("aapp", AsyncAnnotationBeanPostProcessor.class, pvs); - ac.registerSingleton("bean", MyValidBean.class); - ac.refresh(); - doTestProxyValidation(ac.getBean("bean", MyValidInterface.class)); - ac.close(); - } - - private void doTestProxyValidation(MyValidInterface proxy) { - assertThat(proxy.myValidMethod("value", 5)).isNotNull(); - assertThatExceptionOfType(ValidationException.class).isThrownBy(() -> - proxy.myValidMethod("value", 15)); - assertThatExceptionOfType(ValidationException.class).isThrownBy(() -> - proxy.myValidMethod(null, 5)); - assertThatExceptionOfType(ValidationException.class).isThrownBy(() -> - proxy.myValidMethod("value", 0)); - proxy.myValidAsyncMethod("value", 5); - assertThatExceptionOfType(ValidationException.class).isThrownBy(() -> - proxy.myValidAsyncMethod("value", 15)); - assertThatExceptionOfType(ValidationException.class).isThrownBy(() -> - proxy.myValidAsyncMethod(null, 5)); - assertThat(proxy.myGenericMethod("myValue")).isEqualTo("myValue"); - assertThatExceptionOfType(ValidationException.class).isThrownBy(() -> - proxy.myGenericMethod(null)); - } - - @Test - public void testLazyValidatorForMethodValidation() { - @SuppressWarnings("resource") - AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext( - LazyMethodValidationConfig.class, CustomValidatorBean.class, - MyValidBean.class, MyValidFactoryBean.class); - ctx.getBeansOfType(MyValidInterface.class).values().forEach(bean -> bean.myValidMethod("value", 5)); - } - - @Test - public void testLazyValidatorForMethodValidationWithProxyTargetClass() { - @SuppressWarnings("resource") - AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext( - LazyMethodValidationConfigWithProxyTargetClass.class, CustomValidatorBean.class, - MyValidBean.class, MyValidFactoryBean.class); - ctx.getBeansOfType(MyValidInterface.class).values().forEach(bean -> bean.myValidMethod("value", 5)); - } - - - @MyStereotype - public static class MyValidBean implements MyValidInterface { - - @Override - public Object myValidMethod(String arg1, int arg2) { - return (arg2 == 0 ? null : "value"); - } - - @Override - public void myValidAsyncMethod(String arg1, int arg2) { - } - - @Override - public String myGenericMethod(String value) { - return value; - } - } - - - @MyStereotype - public static class MyValidFactoryBean implements FactoryBean, MyValidInterface { - - @Override - public String getObject() { - return null; - } - - @Override - public Class getObjectType() { - return String.class; - } - - @Override - public Object myValidMethod(String arg1, int arg2) { - return (arg2 == 0 ? null : "value"); - } - - @Override - public void myValidAsyncMethod(String arg1, int arg2) { - } - - @Override - public String myGenericMethod(String value) { - return value; - } - } - - - public interface MyValidInterface { - - @NotNull Object myValidMethod(@NotNull(groups = MyGroup.class) String arg1, @Max(10) int arg2); - - @MyValid - @Async void myValidAsyncMethod(@NotNull(groups = OtherGroup.class) String arg1, @Max(10) int arg2); - - T myGenericMethod(@NotNull T value); - } - - - public interface MyGroup { - } - - - public interface OtherGroup { - } - - - @Validated({MyGroup.class, Default.class}) - @Retention(RetentionPolicy.RUNTIME) - public @interface MyStereotype { - } - - - @Validated({OtherGroup.class, Default.class}) - @Retention(RetentionPolicy.RUNTIME) - public @interface MyValid { - } - - - @Configuration - public static class LazyMethodValidationConfig { - - @Bean - public static MethodValidationPostProcessor methodValidationPostProcessor(@Lazy Validator validator) { - MethodValidationPostProcessor postProcessor = new MethodValidationPostProcessor(); - postProcessor.setValidator(validator); - return postProcessor; - } - } - - - @Configuration - public static class LazyMethodValidationConfigWithProxyTargetClass { - - @Bean - public static MethodValidationPostProcessor methodValidationPostProcessor(@Lazy Validator validator) { - MethodValidationPostProcessor postProcessor = new MethodValidationPostProcessor(); - postProcessor.setValidator(validator); - postProcessor.setProxyTargetClass(true); - return postProcessor; - } - } - -} diff --git a/spring-context-support/src/test/java/org/springframework/validation/beanvalidation2/SpringValidatorAdapterTests.java b/spring-context-support/src/test/java/org/springframework/validation/beanvalidation2/SpringValidatorAdapterTests.java deleted file mode 100644 index 813111adb05..00000000000 --- a/spring-context-support/src/test/java/org/springframework/validation/beanvalidation2/SpringValidatorAdapterTests.java +++ /dev/null @@ -1,563 +0,0 @@ -/* - * Copyright 2002-2020 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.validation.beanvalidation2; - -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Inherited; -import java.lang.annotation.Repeatable; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Set; - -import javax.validation.Constraint; -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorContext; -import javax.validation.ConstraintViolation; -import javax.validation.Payload; -import javax.validation.Valid; -import javax.validation.Validation; -import javax.validation.Validator; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Pattern; -import javax.validation.constraints.Size; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import org.springframework.beans.BeanWrapper; -import org.springframework.beans.BeanWrapperImpl; -import org.springframework.context.support.StaticMessageSource; -import org.springframework.core.testfixture.io.SerializationTestUtils; -import org.springframework.util.ObjectUtils; -import org.springframework.validation.BeanPropertyBindingResult; -import org.springframework.validation.FieldError; -import org.springframework.validation.beanvalidation.SpringValidatorAdapter; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * @author Kazuki Shimizu - * @author Juergen Hoeller - */ -public class SpringValidatorAdapterTests { - - private final Validator nativeValidator = Validation.buildDefaultValidatorFactory().getValidator(); - - private final SpringValidatorAdapter validatorAdapter = new SpringValidatorAdapter(nativeValidator); - - private final StaticMessageSource messageSource = new StaticMessageSource(); - - - @BeforeEach - public void setupSpringValidatorAdapter() { - messageSource.addMessage("Size", Locale.ENGLISH, "Size of {0} must be between {2} and {1}"); - messageSource.addMessage("Same", Locale.ENGLISH, "{2} must be same value as {1}"); - messageSource.addMessage("password", Locale.ENGLISH, "Password"); - messageSource.addMessage("confirmPassword", Locale.ENGLISH, "Password(Confirm)"); - } - - - @Test - public void testUnwrap() { - Validator nativeValidator = validatorAdapter.unwrap(Validator.class); - assertThat(nativeValidator).isSameAs(this.nativeValidator); - } - - @Test // SPR-13406 - public void testNoStringArgumentValue() throws Exception { - TestBean testBean = new TestBean(); - testBean.setPassword("pass"); - testBean.setConfirmPassword("pass"); - - BeanPropertyBindingResult errors = new BeanPropertyBindingResult(testBean, "testBean"); - validatorAdapter.validate(testBean, errors); - - assertThat(errors.getFieldErrorCount("password")).isEqualTo(1); - assertThat(errors.getFieldValue("password")).isEqualTo("pass"); - FieldError error = errors.getFieldError("password"); - assertThat(error).isNotNull(); - assertThat(messageSource.getMessage(error, Locale.ENGLISH)).isEqualTo("Size of Password must be between 8 and 128"); - assertThat(error.contains(ConstraintViolation.class)).isTrue(); - assertThat(error.unwrap(ConstraintViolation.class).getPropertyPath().toString()).isEqualTo("password"); - assertThat(SerializationTestUtils.serializeAndDeserialize(error.toString())).isEqualTo(error.toString()); - } - - @Test // SPR-13406 - public void testApplyMessageSourceResolvableToStringArgumentValueWithResolvedLogicalFieldName() throws Exception { - TestBean testBean = new TestBean(); - testBean.setPassword("password"); - testBean.setConfirmPassword("PASSWORD"); - - BeanPropertyBindingResult errors = new BeanPropertyBindingResult(testBean, "testBean"); - validatorAdapter.validate(testBean, errors); - - assertThat(errors.getFieldErrorCount("password")).isEqualTo(1); - assertThat(errors.getFieldValue("password")).isEqualTo("password"); - FieldError error = errors.getFieldError("password"); - assertThat(error).isNotNull(); - assertThat(messageSource.getMessage(error, Locale.ENGLISH)).isEqualTo("Password must be same value as Password(Confirm)"); - assertThat(error.contains(ConstraintViolation.class)).isTrue(); - assertThat(error.unwrap(ConstraintViolation.class).getPropertyPath().toString()).isEqualTo("password"); - assertThat(SerializationTestUtils.serializeAndDeserialize(error.toString())).isEqualTo(error.toString()); - } - - @Test // SPR-13406 - public void testApplyMessageSourceResolvableToStringArgumentValueWithUnresolvedLogicalFieldName() { - TestBean testBean = new TestBean(); - testBean.setEmail("test@example.com"); - testBean.setConfirmEmail("TEST@EXAMPLE.IO"); - - BeanPropertyBindingResult errors = new BeanPropertyBindingResult(testBean, "testBean"); - validatorAdapter.validate(testBean, errors); - - assertThat(errors.getFieldErrorCount("email")).isEqualTo(1); - assertThat(errors.getFieldValue("email")).isEqualTo("test@example.com"); - assertThat(errors.getFieldErrorCount("confirmEmail")).isEqualTo(1); - FieldError error1 = errors.getFieldError("email"); - FieldError error2 = errors.getFieldError("confirmEmail"); - assertThat(error1).isNotNull(); - assertThat(error2).isNotNull(); - assertThat(messageSource.getMessage(error1, Locale.ENGLISH)).isEqualTo("email must be same value as confirmEmail"); - assertThat(messageSource.getMessage(error2, Locale.ENGLISH)).isEqualTo("Email required"); - assertThat(error1.contains(ConstraintViolation.class)).isTrue(); - assertThat(error1.unwrap(ConstraintViolation.class).getPropertyPath().toString()).isEqualTo("email"); - assertThat(error2.contains(ConstraintViolation.class)).isTrue(); - assertThat(error2.unwrap(ConstraintViolation.class).getPropertyPath().toString()).isEqualTo("confirmEmail"); - } - - @Test // SPR-15123 - public void testApplyMessageSourceResolvableToStringArgumentValueWithAlwaysUseMessageFormat() { - messageSource.setAlwaysUseMessageFormat(true); - - TestBean testBean = new TestBean(); - testBean.setEmail("test@example.com"); - testBean.setConfirmEmail("TEST@EXAMPLE.IO"); - - BeanPropertyBindingResult errors = new BeanPropertyBindingResult(testBean, "testBean"); - validatorAdapter.validate(testBean, errors); - - assertThat(errors.getFieldErrorCount("email")).isEqualTo(1); - assertThat(errors.getFieldValue("email")).isEqualTo("test@example.com"); - assertThat(errors.getFieldErrorCount("confirmEmail")).isEqualTo(1); - FieldError error1 = errors.getFieldError("email"); - FieldError error2 = errors.getFieldError("confirmEmail"); - assertThat(error1).isNotNull(); - assertThat(error2).isNotNull(); - assertThat(messageSource.getMessage(error1, Locale.ENGLISH)).isEqualTo("email must be same value as confirmEmail"); - assertThat(messageSource.getMessage(error2, Locale.ENGLISH)).isEqualTo("Email required"); - assertThat(error1.contains(ConstraintViolation.class)).isTrue(); - assertThat(error1.unwrap(ConstraintViolation.class).getPropertyPath().toString()).isEqualTo("email"); - assertThat(error2.contains(ConstraintViolation.class)).isTrue(); - assertThat(error2.unwrap(ConstraintViolation.class).getPropertyPath().toString()).isEqualTo("confirmEmail"); - } - - @Test - public void testPatternMessage() { - TestBean testBean = new TestBean(); - testBean.setEmail("X"); - testBean.setConfirmEmail("X"); - - BeanPropertyBindingResult errors = new BeanPropertyBindingResult(testBean, "testBean"); - validatorAdapter.validate(testBean, errors); - - assertThat(errors.getFieldErrorCount("email")).isEqualTo(1); - assertThat(errors.getFieldValue("email")).isEqualTo("X"); - FieldError error = errors.getFieldError("email"); - assertThat(error).isNotNull(); - assertThat(messageSource.getMessage(error, Locale.ENGLISH)).contains("[\\w.'-]{1,}@[\\w.'-]{1,}"); - assertThat(error.contains(ConstraintViolation.class)).isTrue(); - assertThat(error.unwrap(ConstraintViolation.class).getPropertyPath().toString()).isEqualTo("email"); - } - - @Test // SPR-16177 - public void testWithList() { - Parent parent = new Parent(); - parent.setName("Parent whit list"); - parent.getChildList().addAll(createChildren(parent)); - - BeanPropertyBindingResult errors = new BeanPropertyBindingResult(parent, "parent"); - validatorAdapter.validate(parent, errors); - - assertThat(errors.getErrorCount() > 0).isTrue(); - } - - @Test // SPR-16177 - public void testWithSet() { - Parent parent = new Parent(); - parent.setName("Parent with set"); - parent.getChildSet().addAll(createChildren(parent)); - - BeanPropertyBindingResult errors = new BeanPropertyBindingResult(parent, "parent"); - validatorAdapter.validate(parent, errors); - - assertThat(errors.getErrorCount() > 0).isTrue(); - } - - private List createChildren(Parent parent) { - Child child1 = new Child(); - child1.setName("Child1"); - child1.setAge(null); - child1.setParent(parent); - - Child child2 = new Child(); - child2.setName(null); - child2.setAge(17); - child2.setParent(parent); - - return Arrays.asList(child1, child2); - } - - @Test // SPR-15839 - public void testListElementConstraint() { - BeanWithListElementConstraint bean = new BeanWithListElementConstraint(); - bean.setProperty(Arrays.asList("no", "element", "can", "be", null)); - - BeanPropertyBindingResult errors = new BeanPropertyBindingResult(bean, "bean"); - validatorAdapter.validate(bean, errors); - - assertThat(errors.getFieldErrorCount("property[4]")).isEqualTo(1); - assertThat(errors.getFieldValue("property[4]")).isNull(); - } - - @Test // SPR-15839 - public void testMapValueConstraint() { - Map property = new HashMap<>(); - property.put("no value can be", null); - - BeanWithMapEntryConstraint bean = new BeanWithMapEntryConstraint(); - bean.setProperty(property); - - BeanPropertyBindingResult errors = new BeanPropertyBindingResult(bean, "bean"); - validatorAdapter.validate(bean, errors); - - assertThat(errors.getFieldErrorCount("property[no value can be]")).isEqualTo(1); - assertThat(errors.getFieldValue("property[no value can be]")).isNull(); - } - - @Test // SPR-15839 - public void testMapEntryConstraint() { - Map property = new HashMap<>(); - property.put(null, null); - - BeanWithMapEntryConstraint bean = new BeanWithMapEntryConstraint(); - bean.setProperty(property); - - BeanPropertyBindingResult errors = new BeanPropertyBindingResult(bean, "bean"); - validatorAdapter.validate(bean, errors); - - assertThat(errors.hasFieldErrors("property[]")).isTrue(); - assertThat(errors.getFieldValue("property[]")).isNull(); - } - - - @Same(field = "password", comparingField = "confirmPassword") - @Same(field = "email", comparingField = "confirmEmail") - static class TestBean { - - @Size(min = 8, max = 128) - private String password; - - private String confirmPassword; - - @Pattern(regexp = "[\\w.'-]{1,}@[\\w.'-]{1,}") - private String email; - - @Pattern(regexp = "[\\p{L} -]*", message = "Email required") - private String confirmEmail; - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - public String getConfirmPassword() { - return confirmPassword; - } - - public void setConfirmPassword(String confirmPassword) { - this.confirmPassword = confirmPassword; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public String getConfirmEmail() { - return confirmEmail; - } - - public void setConfirmEmail(String confirmEmail) { - this.confirmEmail = confirmEmail; - } - } - - - @Documented - @Constraint(validatedBy = {SameValidator.class}) - @Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE}) - @Retention(RetentionPolicy.RUNTIME) - @Repeatable(SameGroup.class) - @interface Same { - - String message() default "{org.springframework.validation.beanvalidation.Same.message}"; - - Class[] groups() default {}; - - Class[] payload() default {}; - - String field(); - - String comparingField(); - - @Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE}) - @Retention(RetentionPolicy.RUNTIME) - @Documented - @interface List { - Same[] value(); - } - } - - - @Documented - @Inherited - @Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE}) - @Retention(RetentionPolicy.RUNTIME) - @interface SameGroup { - - Same[] value(); - } - - - public static class SameValidator implements ConstraintValidator { - - private String field; - - private String comparingField; - - private String message; - - @Override - public void initialize(Same constraintAnnotation) { - field = constraintAnnotation.field(); - comparingField = constraintAnnotation.comparingField(); - message = constraintAnnotation.message(); - } - - @Override - public boolean isValid(Object value, ConstraintValidatorContext context) { - BeanWrapper beanWrapper = new BeanWrapperImpl(value); - Object fieldValue = beanWrapper.getPropertyValue(field); - Object comparingFieldValue = beanWrapper.getPropertyValue(comparingField); - boolean matched = ObjectUtils.nullSafeEquals(fieldValue, comparingFieldValue); - if (matched) { - return true; - } - else { - context.disableDefaultConstraintViolation(); - context.buildConstraintViolationWithTemplate(message) - .addPropertyNode(field) - .addConstraintViolation(); - return false; - } - } - } - - - public static class Parent { - - private Integer id; - - @NotNull - private String name; - - @Valid - private Set childSet = new LinkedHashSet<>(); - - @Valid - private List childList = new ArrayList<>(); - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Set getChildSet() { - return childSet; - } - - public void setChildSet(Set childSet) { - this.childSet = childSet; - } - - public List getChildList() { - return childList; - } - - public void setChildList(List childList) { - this.childList = childList; - } - } - - - @AnythingValid - public static class Child { - - private Integer id; - - @NotNull - private String name; - - @NotNull - private Integer age; - - @NotNull - private Parent parent; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Integer getAge() { - return age; - } - - public void setAge(Integer age) { - this.age = age; - } - - public Parent getParent() { - return parent; - } - - public void setParent(Parent parent) { - this.parent = parent; - } - } - - - @Constraint(validatedBy = AnythingValidator.class) - @Retention(RetentionPolicy.RUNTIME) - public @interface AnythingValid { - - String message() default "{AnythingValid.message}"; - - Class[] groups() default {}; - - Class[] payload() default {}; - } - - - public static class AnythingValidator implements ConstraintValidator { - - private static final String ID = "id"; - - @Override - public void initialize(AnythingValid constraintAnnotation) { - } - - @Override - public boolean isValid(Object value, ConstraintValidatorContext context) { - List fieldsErrors = new ArrayList<>(); - Arrays.asList(value.getClass().getDeclaredFields()).forEach(field -> { - field.setAccessible(true); - try { - if (!field.getName().equals(ID) && field.get(value) == null) { - fieldsErrors.add(field); - context.buildConstraintViolationWithTemplate(context.getDefaultConstraintMessageTemplate()) - .addPropertyNode(field.getName()) - .addConstraintViolation(); - } - } - catch (IllegalAccessException ex) { - throw new IllegalStateException(ex); - } - }); - return fieldsErrors.isEmpty(); - } - } - - - public class BeanWithListElementConstraint { - - @Valid - private List<@NotNull String> property; - - public List getProperty() { - return property; - } - - public void setProperty(List property) { - this.property = property; - } - } - - - public class BeanWithMapEntryConstraint { - - @Valid - private Map<@NotNull String, @NotNull String> property; - - public Map getProperty() { - return property; - } - - public void setProperty(Map property) { - this.property = property; - } - } - -} diff --git a/spring-context-support/src/test/java/org/springframework/validation/beanvalidation2/ValidatorFactoryTests.java b/spring-context-support/src/test/java/org/springframework/validation/beanvalidation2/ValidatorFactoryTests.java deleted file mode 100644 index a383ae5f8bf..00000000000 --- a/spring-context-support/src/test/java/org/springframework/validation/beanvalidation2/ValidatorFactoryTests.java +++ /dev/null @@ -1,505 +0,0 @@ -/* - * Copyright 2002-2020 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.validation.beanvalidation2; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Iterator; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Optional; -import java.util.Set; - -import javax.validation.Constraint; -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorContext; -import javax.validation.ConstraintViolation; -import javax.validation.Payload; -import javax.validation.Valid; -import javax.validation.Validator; -import javax.validation.ValidatorFactory; -import javax.validation.constraints.NotNull; - -import org.hibernate.validator.HibernateValidator; -import org.hibernate.validator.HibernateValidatorFactory; -import org.junit.jupiter.api.Test; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; -import org.springframework.core.convert.support.DefaultConversionService; -import org.springframework.core.env.Environment; -import org.springframework.validation.BeanPropertyBindingResult; -import org.springframework.validation.Errors; -import org.springframework.validation.FieldError; -import org.springframework.validation.ObjectError; -import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * @author Juergen Hoeller - */ -@SuppressWarnings("resource") -public class ValidatorFactoryTests { - - @Test - @SuppressWarnings("cast") - public void testSimpleValidation() { - LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); - validator.afterPropertiesSet(); - - ValidPerson person = new ValidPerson(); - Set> result = validator.validate(person); - assertThat(result.size()).isEqualTo(2); - for (ConstraintViolation cv : result) { - String path = cv.getPropertyPath().toString(); - assertThat(path).matches(actual -> "name".equals(actual) || "address.street".equals(actual)); - assertThat(cv.getConstraintDescriptor().getAnnotation()).isInstanceOf(NotNull.class); - } - - Validator nativeValidator = validator.unwrap(Validator.class); - assertThat(nativeValidator.getClass().getName().startsWith("org.hibernate")).isTrue(); - assertThat(validator.unwrap(ValidatorFactory.class) instanceof HibernateValidatorFactory).isTrue(); - assertThat(validator.unwrap(HibernateValidatorFactory.class) instanceof HibernateValidatorFactory).isTrue(); - - validator.destroy(); - } - - @Test - @SuppressWarnings("cast") - public void testSimpleValidationWithCustomProvider() { - LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); - validator.setProviderClass(HibernateValidator.class); - validator.afterPropertiesSet(); - - ValidPerson person = new ValidPerson(); - Set> result = validator.validate(person); - assertThat(result.size()).isEqualTo(2); - for (ConstraintViolation cv : result) { - String path = cv.getPropertyPath().toString(); - assertThat(path).matches(actual -> "name".equals(actual) || "address.street".equals(actual)); - assertThat(cv.getConstraintDescriptor().getAnnotation()).isInstanceOf(NotNull.class); - } - - Validator nativeValidator = validator.unwrap(Validator.class); - assertThat(nativeValidator.getClass().getName().startsWith("org.hibernate")).isTrue(); - assertThat(validator.unwrap(ValidatorFactory.class) instanceof HibernateValidatorFactory).isTrue(); - assertThat(validator.unwrap(HibernateValidatorFactory.class) instanceof HibernateValidatorFactory).isTrue(); - - validator.destroy(); - } - - @Test - public void testSimpleValidationWithClassLevel() { - LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); - validator.afterPropertiesSet(); - - ValidPerson person = new ValidPerson(); - person.setName("Juergen"); - person.getAddress().setStreet("Juergen's Street"); - Set> result = validator.validate(person); - assertThat(result.size()).isEqualTo(1); - Iterator> iterator = result.iterator(); - ConstraintViolation cv = iterator.next(); - assertThat(cv.getPropertyPath().toString()).isEqualTo(""); - assertThat(cv.getConstraintDescriptor().getAnnotation() instanceof NameAddressValid).isTrue(); - } - - @Test - public void testSpringValidationFieldType() { - LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); - validator.afterPropertiesSet(); - - ValidPerson person = new ValidPerson(); - person.setName("Phil"); - person.getAddress().setStreet("Phil's Street"); - BeanPropertyBindingResult errors = new BeanPropertyBindingResult(person, "person"); - validator.validate(person, errors); - assertThat(errors.getErrorCount()).isEqualTo(1); - assertThat(errors.getFieldError("address").getRejectedValue()).isInstanceOf(ValidAddress.class); - } - - @Test - public void testSpringValidation() { - LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); - validator.afterPropertiesSet(); - - ValidPerson person = new ValidPerson(); - BeanPropertyBindingResult result = new BeanPropertyBindingResult(person, "person"); - validator.validate(person, result); - assertThat(result.getErrorCount()).isEqualTo(2); - FieldError fieldError = result.getFieldError("name"); - assertThat(fieldError.getField()).isEqualTo("name"); - List errorCodes = Arrays.asList(fieldError.getCodes()); - assertThat(errorCodes.size()).isEqualTo(4); - assertThat(errorCodes.contains("NotNull.person.name")).isTrue(); - assertThat(errorCodes.contains("NotNull.name")).isTrue(); - assertThat(errorCodes.contains("NotNull.java.lang.String")).isTrue(); - assertThat(errorCodes.contains("NotNull")).isTrue(); - fieldError = result.getFieldError("address.street"); - assertThat(fieldError.getField()).isEqualTo("address.street"); - errorCodes = Arrays.asList(fieldError.getCodes()); - assertThat(errorCodes.size()).isEqualTo(5); - assertThat(errorCodes.contains("NotNull.person.address.street")).isTrue(); - assertThat(errorCodes.contains("NotNull.address.street")).isTrue(); - assertThat(errorCodes.contains("NotNull.street")).isTrue(); - assertThat(errorCodes.contains("NotNull.java.lang.String")).isTrue(); - assertThat(errorCodes.contains("NotNull")).isTrue(); - } - - @Test - public void testSpringValidationWithClassLevel() { - LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); - validator.afterPropertiesSet(); - - ValidPerson person = new ValidPerson(); - person.setName("Juergen"); - person.getAddress().setStreet("Juergen's Street"); - BeanPropertyBindingResult result = new BeanPropertyBindingResult(person, "person"); - validator.validate(person, result); - assertThat(result.getErrorCount()).isEqualTo(1); - ObjectError globalError = result.getGlobalError(); - List errorCodes = Arrays.asList(globalError.getCodes()); - assertThat(errorCodes.size()).isEqualTo(2); - assertThat(errorCodes.contains("NameAddressValid.person")).isTrue(); - assertThat(errorCodes.contains("NameAddressValid")).isTrue(); - } - - @Test - public void testSpringValidationWithAutowiredValidator() { - ConfigurableApplicationContext ctx = new AnnotationConfigApplicationContext( - LocalValidatorFactoryBean.class); - LocalValidatorFactoryBean validator = ctx.getBean(LocalValidatorFactoryBean.class); - - ValidPerson person = new ValidPerson(); - person.expectsAutowiredValidator = true; - person.setName("Juergen"); - person.getAddress().setStreet("Juergen's Street"); - BeanPropertyBindingResult result = new BeanPropertyBindingResult(person, "person"); - validator.validate(person, result); - assertThat(result.getErrorCount()).isEqualTo(1); - ObjectError globalError = result.getGlobalError(); - List errorCodes = Arrays.asList(globalError.getCodes()); - assertThat(errorCodes.size()).isEqualTo(2); - assertThat(errorCodes.contains("NameAddressValid.person")).isTrue(); - assertThat(errorCodes.contains("NameAddressValid")).isTrue(); - ctx.close(); - } - - @Test - public void testSpringValidationWithErrorInListElement() { - LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); - validator.afterPropertiesSet(); - - ValidPerson person = new ValidPerson(); - person.getAddressList().add(new ValidAddress()); - BeanPropertyBindingResult result = new BeanPropertyBindingResult(person, "person"); - validator.validate(person, result); - assertThat(result.getErrorCount()).isEqualTo(3); - FieldError fieldError = result.getFieldError("name"); - assertThat(fieldError.getField()).isEqualTo("name"); - fieldError = result.getFieldError("address.street"); - assertThat(fieldError.getField()).isEqualTo("address.street"); - fieldError = result.getFieldError("addressList[0].street"); - assertThat(fieldError.getField()).isEqualTo("addressList[0].street"); - } - - @Test - public void testSpringValidationWithErrorInSetElement() { - LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); - validator.afterPropertiesSet(); - - ValidPerson person = new ValidPerson(); - person.getAddressSet().add(new ValidAddress()); - BeanPropertyBindingResult result = new BeanPropertyBindingResult(person, "person"); - validator.validate(person, result); - assertThat(result.getErrorCount()).isEqualTo(3); - FieldError fieldError = result.getFieldError("name"); - assertThat(fieldError.getField()).isEqualTo("name"); - fieldError = result.getFieldError("address.street"); - assertThat(fieldError.getField()).isEqualTo("address.street"); - fieldError = result.getFieldError("addressSet[].street"); - assertThat(fieldError.getField()).isEqualTo("addressSet[].street"); - } - - @Test - public void testInnerBeanValidation() { - LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); - validator.afterPropertiesSet(); - - MainBean mainBean = new MainBean(); - Errors errors = new BeanPropertyBindingResult(mainBean, "mainBean"); - validator.validate(mainBean, errors); - Object rejected = errors.getFieldValue("inner.value"); - assertThat(rejected).isNull(); - } - - @Test - public void testValidationWithOptionalField() { - LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); - validator.afterPropertiesSet(); - - MainBeanWithOptional mainBean = new MainBeanWithOptional(); - Errors errors = new BeanPropertyBindingResult(mainBean, "mainBean"); - validator.validate(mainBean, errors); - Object rejected = errors.getFieldValue("inner.value"); - assertThat(rejected).isNull(); - } - - @Test - public void testListValidation() { - LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); - validator.afterPropertiesSet(); - - ListContainer listContainer = new ListContainer(); - listContainer.addString("A"); - listContainer.addString("X"); - - BeanPropertyBindingResult errors = new BeanPropertyBindingResult(listContainer, "listContainer"); - errors.initConversion(new DefaultConversionService()); - validator.validate(listContainer, errors); - - FieldError fieldError = errors.getFieldError("list[1]"); - assertThat(fieldError).isNotNull(); - assertThat(fieldError.getRejectedValue()).isEqualTo("X"); - assertThat(errors.getFieldValue("list[1]")).isEqualTo("X"); - } - - - @NameAddressValid - public static class ValidPerson { - - @NotNull - private String name; - - @Valid - private ValidAddress address = new ValidAddress(); - - @Valid - private List addressList = new ArrayList<>(); - - @Valid - private Set addressSet = new LinkedHashSet<>(); - - public boolean expectsAutowiredValidator = false; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public ValidAddress getAddress() { - return address; - } - - public void setAddress(ValidAddress address) { - this.address = address; - } - - public List getAddressList() { - return addressList; - } - - public void setAddressList(List addressList) { - this.addressList = addressList; - } - - public Set getAddressSet() { - return addressSet; - } - - public void setAddressSet(Set addressSet) { - this.addressSet = addressSet; - } - } - - - public static class ValidAddress { - - @NotNull - private String street; - - public String getStreet() { - return street; - } - - public void setStreet(String street) { - this.street = street; - } - } - - - @Target(ElementType.TYPE) - @Retention(RetentionPolicy.RUNTIME) - @Constraint(validatedBy = NameAddressValidator.class) - public @interface NameAddressValid { - - String message() default "Street must not contain name"; - - Class[] groups() default {}; - - Class[] payload() default {}; - } - - - public static class NameAddressValidator implements ConstraintValidator { - - @Autowired - private Environment environment; - - @Override - public void initialize(NameAddressValid constraintAnnotation) { - } - - @Override - public boolean isValid(ValidPerson value, ConstraintValidatorContext context) { - if (value.expectsAutowiredValidator) { - assertThat(this.environment).isNotNull(); - } - boolean valid = (value.name == null || !value.address.street.contains(value.name)); - if (!valid && "Phil".equals(value.name)) { - context.buildConstraintViolationWithTemplate( - context.getDefaultConstraintMessageTemplate()).addPropertyNode("address").addConstraintViolation().disableDefaultConstraintViolation(); - } - return valid; - } - } - - - public static class MainBean { - - @InnerValid - private InnerBean inner = new InnerBean(); - - public InnerBean getInner() { - return inner; - } - } - - - public static class MainBeanWithOptional { - - @InnerValid - private InnerBean inner = new InnerBean(); - - public Optional getInner() { - return Optional.ofNullable(inner); - } - } - - - public static class InnerBean { - - private String value; - - public String getValue() { - return value; - } - public void setValue(String value) { - this.value = value; - } - } - - - @Retention(RetentionPolicy.RUNTIME) - @Target(ElementType.FIELD) - @Constraint(validatedBy=InnerValidator.class) - public static @interface InnerValid { - - String message() default "NOT VALID"; - - Class[] groups() default { }; - - Class[] payload() default {}; - } - - - public static class InnerValidator implements ConstraintValidator { - - @Override - public void initialize(InnerValid constraintAnnotation) { - } - - @Override - public boolean isValid(InnerBean bean, ConstraintValidatorContext context) { - context.disableDefaultConstraintViolation(); - if (bean.getValue() == null) { - context.buildConstraintViolationWithTemplate("NULL").addPropertyNode("value").addConstraintViolation(); - return false; - } - return true; - } - } - - - public static class ListContainer { - - @NotXList - private List list = new ArrayList<>(); - - public void addString(String value) { - list.add(value); - } - - public List getList() { - return list; - } - } - - - @Retention(RetentionPolicy.RUNTIME) - @Target(ElementType.FIELD) - @Constraint(validatedBy = NotXListValidator.class) - public @interface NotXList { - - String message() default "Should not be X"; - - Class[] groups() default {}; - - Class[] payload() default {}; - } - - - public static class NotXListValidator implements ConstraintValidator> { - - @Override - public void initialize(NotXList constraintAnnotation) { - } - - @Override - public boolean isValid(List list, ConstraintValidatorContext context) { - context.disableDefaultConstraintViolation(); - boolean valid = true; - for (int i = 0; i < list.size(); i++) { - if ("X".equals(list.get(i))) { - context.buildConstraintViolationWithTemplate(context.getDefaultConstraintMessageTemplate()).addBeanNode().inIterable().atIndex(i).addConstraintViolation(); - valid = false; - } - } - return valid; - } - } - -} diff --git a/spring-context/spring-context.gradle b/spring-context/spring-context.gradle index 221e0f12fe1..9e4cf72ca95 100644 --- a/spring-context/spring-context.gradle +++ b/spring-context/spring-context.gradle @@ -9,20 +9,18 @@ dependencies { api(project(":spring-core")) api(project(":spring-expression")) optional(project(":spring-instrument")) - optional("javax.annotation:javax.annotation-api") - optional("javax.ejb:javax.ejb-api") - optional("javax.enterprise.concurrent:javax.enterprise.concurrent-api") - optional("javax.inject:javax.inject") - optional("javax.interceptor:javax.interceptor-api") + optional("jakarta.annotation:jakarta.annotation-api") + optional("jakarta.ejb:jakarta.ejb-api") + optional("jakarta.enterprise.concurrent:jakarta.enterprise.concurrent-api") + optional("jakarta.inject:jakarta.inject-api") + optional("jakarta.interceptor:jakarta.interceptor-api") optional("javax.money:money-api") - // Overriding 2.0.1.Final due to Bean Validation 1.1 compatibility in LocalValidatorFactoryBean - optional("javax.validation:validation-api:1.1.0.Final") - optional("javax.xml.ws:jaxws-api") + optional("jakarta.validation:jakarta.validation-api") + optional("jakarta.xml.ws:jakarta.xml.ws-api") optional("org.aspectj:aspectjweaver") optional("org.codehaus.groovy:groovy") optional("org.apache-extras.beanshell:bsh") - optional("joda-time:joda-time") - optional("org.hibernate:hibernate-validator:5.4.3.Final") + optional("org.hibernate:hibernate-validator") optional("org.jetbrains.kotlin:kotlin-reflect") optional("org.jetbrains.kotlin:kotlin-stdlib") optional("org.reactivestreams:reactive-streams") @@ -34,10 +32,10 @@ dependencies { testImplementation("org.codehaus.groovy:groovy-test") testImplementation("org.codehaus.groovy:groovy-xml") testImplementation("org.apache.commons:commons-pool2") - testImplementation("javax.inject:javax.inject-tck") + testImplementation("jakarta.inject:jakarta.inject-tck") testImplementation("org.awaitility:awaitility") - testRuntimeOnly("javax.xml.bind:jaxb-api") - testRuntimeOnly("org.glassfish:javax.el") + testRuntimeOnly("jakarta.xml.bind:jakarta.xml.bind-api") + testRuntimeOnly("org.glassfish:jakarta.el") // Substitute for javax.management:jmxremote_optional:1.0.1_04 (not available on Maven Central) testRuntimeOnly("org.glassfish.external:opendmk_jmxremote_optional_jar") testRuntimeOnly("org.javamoney:moneta") diff --git a/spring-context/src/jmh/java/org/springframework/context/annotation/AnnotationProcessorBenchmark.java b/spring-context/src/jmh/java/org/springframework/context/annotation/AnnotationProcessorBenchmark.java index c00cf0ddfae..3e19ca7e978 100644 --- a/spring-context/src/jmh/java/org/springframework/context/annotation/AnnotationProcessorBenchmark.java +++ b/spring-context/src/jmh/java/org/springframework/context/annotation/AnnotationProcessorBenchmark.java @@ -16,8 +16,7 @@ package org.springframework.context.annotation; -import javax.annotation.Resource; - +import jakarta.annotation.Resource; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.BenchmarkMode; import org.openjdk.jmh.annotations.Mode; diff --git a/spring-context/src/main/java/org/springframework/context/annotation/AnnotationBeanNameGenerator.java b/spring-context/src/main/java/org/springframework/context/annotation/AnnotationBeanNameGenerator.java index a589a92335a..c12647a3ca6 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/AnnotationBeanNameGenerator.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/AnnotationBeanNameGenerator.java @@ -41,8 +41,8 @@ import org.springframework.util.StringUtils; * {@link org.springframework.stereotype.Repository @Repository}) are * themselves annotated with {@code @Component}. * - *

Also supports Java EE 6's {@link javax.annotation.ManagedBean} and - * JSR-330's {@link javax.inject.Named} annotations, if available. Note that + *

Also supports Jakarta EE's {@link jakarta.annotation.ManagedBean} and + * JSR-330's {@link jakarta.inject.Named} annotations, if available. Note that * Spring component annotations always override such standard annotations. * *

If the annotation's value doesn't indicate a bean name, an appropriate @@ -58,7 +58,7 @@ import org.springframework.util.StringUtils; * @see org.springframework.stereotype.Repository#value() * @see org.springframework.stereotype.Service#value() * @see org.springframework.stereotype.Controller#value() - * @see javax.inject.Named#value() + * @see jakarta.inject.Named#value() * @see FullyQualifiedAnnotationBeanNameGenerator */ public class AnnotationBeanNameGenerator implements BeanNameGenerator { @@ -136,8 +136,8 @@ public class AnnotationBeanNameGenerator implements BeanNameGenerator { boolean isStereotype = annotationType.equals(COMPONENT_ANNOTATION_CLASSNAME) || metaAnnotationTypes.contains(COMPONENT_ANNOTATION_CLASSNAME) || - annotationType.equals("javax.annotation.ManagedBean") || - annotationType.equals("javax.inject.Named"); + annotationType.equals("jakarta.annotation.ManagedBean") || + annotationType.equals("jakarta.inject.Named"); return (isStereotype && attributes != null && attributes.containsKey("value")); } diff --git a/spring-context/src/main/java/org/springframework/context/annotation/AnnotationConfigApplicationContext.java b/spring-context/src/main/java/org/springframework/context/annotation/AnnotationConfigApplicationContext.java index 86ea5feb733..b2d29bca559 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/AnnotationConfigApplicationContext.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/AnnotationConfigApplicationContext.java @@ -32,7 +32,7 @@ import org.springframework.util.Assert; * Standalone application context, accepting component classes as input — * in particular {@link Configuration @Configuration}-annotated classes, but also plain * {@link org.springframework.stereotype.Component @Component} types and JSR-330 compliant - * classes using {@code javax.inject} annotations. + * classes using {@code jakarta.inject} annotations. * *

Allows for registering classes one by one using {@link #register(Class...)} * as well as for classpath scanning using {@link #scan(String...)}. diff --git a/spring-context/src/main/java/org/springframework/context/annotation/AnnotationConfigUtils.java b/spring-context/src/main/java/org/springframework/context/annotation/AnnotationConfigUtils.java index 91b1719b708..9c253124eea 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/AnnotationConfigUtils.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/AnnotationConfigUtils.java @@ -123,8 +123,8 @@ public abstract class AnnotationConfigUtils { static { ClassLoader classLoader = AnnotationConfigUtils.class.getClassLoader(); - jsr250Present = ClassUtils.isPresent("javax.annotation.Resource", classLoader); - jpaPresent = ClassUtils.isPresent("javax.persistence.EntityManagerFactory", classLoader) && + jsr250Present = ClassUtils.isPresent("jakarta.annotation.Resource", classLoader); + jpaPresent = ClassUtils.isPresent("jakarta.persistence.EntityManagerFactory", classLoader) && ClassUtils.isPresent(PERSISTENCE_ANNOTATION_PROCESSOR_CLASS_NAME, classLoader); } diff --git a/spring-context/src/main/java/org/springframework/context/annotation/Bean.java b/spring-context/src/main/java/org/springframework/context/annotation/Bean.java index a723b02c350..2f254d5a711 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/Bean.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/Bean.java @@ -99,7 +99,7 @@ import org.springframework.core.annotation.AliasFor; *

NOTE: {@code @Order} values may influence priorities at injection points, * but please be aware that they do not influence singleton startup order which is an * orthogonal concern determined by dependency relationships and {@code @DependsOn} - * declarations as mentioned above. Also, {@link javax.annotation.Priority} is not + * declarations as mentioned above. Also, {@link jakarta.annotation.Priority} is not * available at this level since it cannot be declared on methods; its semantics can * be modeled through {@code @Order} values in combination with {@code @Primary} on * a single bean per type. diff --git a/spring-context/src/main/java/org/springframework/context/annotation/ClassPathBeanDefinitionScanner.java b/spring-context/src/main/java/org/springframework/context/annotation/ClassPathBeanDefinitionScanner.java index 65cbb9bdb9f..bafdd032f00 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/ClassPathBeanDefinitionScanner.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/ClassPathBeanDefinitionScanner.java @@ -47,8 +47,8 @@ import org.springframework.util.PatternMatchUtils; * {@link org.springframework.stereotype.Service @Service}, or * {@link org.springframework.stereotype.Controller @Controller} stereotype. * - *

Also supports Java EE 6's {@link javax.annotation.ManagedBean} and - * JSR-330's {@link javax.inject.Named} annotations, if available. + *

Also supports Jakarta EE's {@link jakarta.annotation.ManagedBean} and + * JSR-330's {@link jakarta.inject.Named} annotations, if available. * * @author Mark Fisher * @author Juergen Hoeller diff --git a/spring-context/src/main/java/org/springframework/context/annotation/ClassPathScanningCandidateComponentProvider.java b/spring-context/src/main/java/org/springframework/context/annotation/ClassPathScanningCandidateComponentProvider.java index 05ea7a5159a..5be6cb914b4 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/ClassPathScanningCandidateComponentProvider.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/ClassPathScanningCandidateComponentProvider.java @@ -197,8 +197,8 @@ public class ClassPathScanningCandidateComponentProvider implements EnvironmentC * {@link Component @Component} meta-annotation including the * {@link Repository @Repository}, {@link Service @Service}, and * {@link Controller @Controller} stereotype annotations. - *

Also supports Java EE 6's {@link javax.annotation.ManagedBean} and - * JSR-330's {@link javax.inject.Named} annotations, if available. + *

Also supports Jakarta EE's {@link jakarta.annotation.ManagedBean} and + * JSR-330's {@link jakarta.inject.Named} annotations, if available. * */ @SuppressWarnings("unchecked") @@ -207,16 +207,16 @@ public class ClassPathScanningCandidateComponentProvider implements EnvironmentC ClassLoader cl = ClassPathScanningCandidateComponentProvider.class.getClassLoader(); try { this.includeFilters.add(new AnnotationTypeFilter( - ((Class) ClassUtils.forName("javax.annotation.ManagedBean", cl)), false)); - logger.trace("JSR-250 'javax.annotation.ManagedBean' found and supported for component scanning"); + ((Class) ClassUtils.forName("jakarta.annotation.ManagedBean", cl)), false)); + logger.trace("JSR-250 'jakarta.annotation.ManagedBean' found and supported for component scanning"); } catch (ClassNotFoundException ex) { - // JSR-250 1.1 API (as included in Java EE 6) not available - simply skip. + // JSR-250 1.1 API (as included in Jakarta EE) not available - simply skip. } try { this.includeFilters.add(new AnnotationTypeFilter( - ((Class) ClassUtils.forName("javax.inject.Named", cl)), false)); - logger.trace("JSR-330 'javax.inject.Named' annotation found and supported for component scanning"); + ((Class) ClassUtils.forName("jakarta.inject.Named", cl)), false)); + logger.trace("JSR-330 'jakarta.inject.Named' annotation found and supported for component scanning"); } catch (ClassNotFoundException ex) { // JSR-330 API not available - simply skip. diff --git a/spring-context/src/main/java/org/springframework/context/annotation/CommonAnnotationBeanPostProcessor.java b/spring-context/src/main/java/org/springframework/context/annotation/CommonAnnotationBeanPostProcessor.java index d9acb722b08..75b7d08afec 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/CommonAnnotationBeanPostProcessor.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/CommonAnnotationBeanPostProcessor.java @@ -37,14 +37,15 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; -import javax.annotation.Resource; -import javax.ejb.EJB; import javax.xml.namespace.QName; -import javax.xml.ws.Service; -import javax.xml.ws.WebServiceClient; -import javax.xml.ws.WebServiceRef; + +import jakarta.annotation.PostConstruct; +import jakarta.annotation.PreDestroy; +import jakarta.annotation.Resource; +import jakarta.ejb.EJB; +import jakarta.xml.ws.Service; +import jakarta.xml.ws.WebServiceClient; +import jakarta.xml.ws.WebServiceRef; import org.springframework.aop.TargetSource; import org.springframework.aop.framework.ProxyFactory; @@ -77,36 +78,32 @@ import org.springframework.util.StringValueResolver; /** * {@link org.springframework.beans.factory.config.BeanPostProcessor} implementation * that supports common Java annotations out of the box, in particular the JSR-250 - * annotations in the {@code javax.annotation} package. These common Java - * annotations are supported in many Java EE 5 technologies (e.g. JSF 1.2), + * annotations in the {@code jakarta.annotation} package. These common Java + * annotations are supported in many Jakarta EE technologies (e.g. JSF 1.2), * as well as in Java 6's JAX-WS. * - *

This post-processor includes support for the {@link javax.annotation.PostConstruct} - * and {@link javax.annotation.PreDestroy} annotations - as init annotation + *

This post-processor includes support for the {@link jakarta.annotation.PostConstruct} + * and {@link jakarta.annotation.PreDestroy} annotations - as init annotation * and destroy annotation, respectively - through inheriting from * {@link InitDestroyAnnotationBeanPostProcessor} with pre-configured annotation types. * - *

The central element is the {@link javax.annotation.Resource} annotation + *

The central element is the {@link jakarta.annotation.Resource} annotation * for annotation-driven injection of named beans, by default from the containing * Spring BeanFactory, with only {@code mappedName} references resolved in JNDI. * The {@link #setAlwaysUseJndiLookup "alwaysUseJndiLookup" flag} enforces JNDI lookups - * equivalent to standard Java EE 5 resource injection for {@code name} references + * equivalent to standard Jakarta EE resource injection for {@code name} references * and default names as well. The target beans can be simple POJOs, with no special * requirements other than the type having to match. * *

The JAX-WS {@link javax.xml.ws.WebServiceRef} annotation is supported too, - * analogous to {@link javax.annotation.Resource} but with the capability of creating + * analogous to {@link jakarta.annotation.Resource} but with the capability of creating * specific JAX-WS service endpoints. This may either point to an explicitly defined * resource by name or operate on a locally specified JAX-WS service class. Finally, - * this post-processor also supports the EJB 3 {@link javax.ejb.EJB} annotation, - * analogous to {@link javax.annotation.Resource} as well, with the capability to + * this post-processor also supports the EJB 3 {@link jakarta.ejb.EJB} annotation, + * analogous to {@link jakarta.annotation.Resource} as well, with the capability to * specify both a local bean name and a global JNDI name for fallback retrieval. * The target beans can be plain POJOs as well as EJB 3 Session Beans in this case. * - *

The common annotations supported by this post-processor are available in - * Java 6 (JDK 1.6) as well as in Java EE 5/6 (which provides a standalone jar for - * its common annotations as well, allowing for use in any Java 5 based application). - * *

For default usage, resolving resource names as Spring bean names, * simply define the following in your application context: * @@ -114,7 +111,7 @@ import org.springframework.util.StringValueResolver; * <bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"/> * * For direct JNDI access, resolving resource names as JNDI resource references - * within the Java EE application's "java:comp/env/" namespace, use the following: + * within the Jakarta EE application's "java:comp/env/" namespace, use the following: * *

  * <bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor">
@@ -156,7 +153,7 @@ public class CommonAnnotationBeanPostProcessor extends InitDestroyAnnotationBean
 
 	static {
 		webServiceRefClass = loadAnnotationType("javax.xml.ws.WebServiceRef");
-		ejbClass = loadAnnotationType("javax.ejb.EJB");
+		ejbClass = loadAnnotationType("jakarta.ejb.EJB");
 
 		resourceAnnotationTypes.add(Resource.class);
 		if (webServiceRefClass != null) {
@@ -191,7 +188,7 @@ public class CommonAnnotationBeanPostProcessor extends InitDestroyAnnotationBean
 	/**
 	 * Create a new CommonAnnotationBeanPostProcessor,
 	 * with the init and destroy annotation types set to
-	 * {@link javax.annotation.PostConstruct} and {@link javax.annotation.PreDestroy},
+	 * {@link jakarta.annotation.PostConstruct} and {@link jakarta.annotation.PreDestroy},
 	 * respectively.
 	 */
 	public CommonAnnotationBeanPostProcessor() {
@@ -229,11 +226,11 @@ public class CommonAnnotationBeanPostProcessor extends InitDestroyAnnotationBean
 	}
 
 	/**
-	 * Set whether to always use JNDI lookups equivalent to standard Java EE 5 resource
+	 * Set whether to always use JNDI lookups equivalent to standard Jakarta EE resource
 	 * injection, even for {@code name} attributes and default names.
 	 * 

Default is "false": Resource names are used for Spring bean lookups in the * containing BeanFactory; only {@code mappedName} attributes point directly - * into JNDI. Switch this flag to "true" for enforcing Java EE style JNDI lookups + * into JNDI. Switch this flag to "true" for enforcing Jakarta EE style JNDI lookups * in any case, even for {@code name} attributes and default names. * @see #setJndiFactory * @see #setResourceFactory @@ -249,7 +246,7 @@ public class CommonAnnotationBeanPostProcessor extends InitDestroyAnnotationBean * This factory will also be used if "alwaysUseJndiLookup" is set to "true" in order * to enforce JNDI lookups even for {@code name} attributes and default names. *

The default is a {@link org.springframework.jndi.support.SimpleJndiBeanFactory} - * for JNDI lookup behavior equivalent to standard Java EE 5 resource injection. + * for JNDI lookup behavior equivalent to standard Jakarta EE resource injection. * @see #setResourceFactory * @see #setAlwaysUseJndiLookup */ @@ -266,7 +263,7 @@ public class CommonAnnotationBeanPostProcessor extends InitDestroyAnnotationBean * if any, looking up resource names as Spring bean names. Specify the resource * factory explicitly for programmatic usage of this post-processor. *

Specifying Spring's {@link org.springframework.jndi.support.SimpleJndiBeanFactory} - * leads to JNDI lookup behavior equivalent to standard Java EE 5 resource injection, + * leads to JNDI lookup behavior equivalent to standard Jakarta EE resource injection, * even for {@code name} attributes and default names. This is the same behavior * that the "alwaysUseJndiLookup" flag enables. * @see #setAlwaysUseJndiLookup diff --git a/spring-context/src/main/java/org/springframework/context/annotation/Configuration.java b/spring-context/src/main/java/org/springframework/context/annotation/Configuration.java index 725999d89c8..0826d1904a8 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/Configuration.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/Configuration.java @@ -86,7 +86,7 @@ import org.springframework.stereotype.Component; *

{@code @Configuration} is meta-annotated with {@link Component @Component}, therefore * {@code @Configuration} classes are candidates for component scanning (typically using * Spring XML's {@code } element) and therefore may also take - * advantage of {@link Autowired @Autowired}/{@link javax.inject.Inject @Inject} + * advantage of {@link Autowired @Autowired}/{@link jakarta.inject.Inject @Inject} * like any regular {@code @Component}. In particular, if a single constructor is present * autowiring semantics will be applied transparently for that constructor: * diff --git a/spring-context/src/main/java/org/springframework/context/annotation/Jsr330ScopeMetadataResolver.java b/spring-context/src/main/java/org/springframework/context/annotation/Jsr330ScopeMetadataResolver.java index d9e033a8338..7dc65574f4c 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/Jsr330ScopeMetadataResolver.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/Jsr330ScopeMetadataResolver.java @@ -26,7 +26,7 @@ import org.springframework.lang.Nullable; /** * Simple {@link ScopeMetadataResolver} implementation that follows JSR-330 scoping rules: - * defaulting to prototype scope unless {@link javax.inject.Singleton} is present. + * defaulting to prototype scope unless {@link jakarta.inject.Singleton} is present. * *

This scope resolver can be used with {@link ClassPathBeanDefinitionScanner} and * {@link AnnotatedBeanDefinitionReader} for standard JSR-330 compliance. However, @@ -46,7 +46,7 @@ public class Jsr330ScopeMetadataResolver implements ScopeMetadataResolver { public Jsr330ScopeMetadataResolver() { - registerScope("javax.inject.Singleton", BeanDefinition.SCOPE_SINGLETON); + registerScope("jakarta.inject.Singleton", BeanDefinition.SCOPE_SINGLETON); } @@ -93,7 +93,7 @@ public class Jsr330ScopeMetadataResolver implements ScopeMetadataResolver { String found = null; for (String annType : annTypes) { Set metaAnns = annDef.getMetadata().getMetaAnnotationTypes(annType); - if (metaAnns.contains("javax.inject.Scope")) { + if (metaAnns.contains("jakarta.inject.Scope")) { if (found != null) { throw new IllegalStateException("Found ambiguous scope annotations on bean class [" + definition.getBeanClassName() + "]: " + found + ", " + annType); diff --git a/spring-context/src/main/java/org/springframework/context/annotation/Lazy.java b/spring-context/src/main/java/org/springframework/context/annotation/Lazy.java index 9d04a9df26e..e708f36b31f 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/Lazy.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/Lazy.java @@ -44,9 +44,9 @@ import java.lang.annotation.Target; * *

In addition to its role for component initialization, this annotation may also be placed * on injection points marked with {@link org.springframework.beans.factory.annotation.Autowired} - * or {@link javax.inject.Inject}: In that context, it leads to the creation of a + * or {@link jakarta.inject.Inject}: In that context, it leads to the creation of a * lazy-resolution proxy for all affected dependencies, as an alternative to using - * {@link org.springframework.beans.factory.ObjectFactory} or {@link javax.inject.Provider}. + * {@link org.springframework.beans.factory.ObjectFactory} or {@link jakarta.inject.Provider}. * * @author Chris Beams * @author Juergen Hoeller diff --git a/spring-context/src/main/java/org/springframework/context/annotation/MBeanExportConfiguration.java b/spring-context/src/main/java/org/springframework/context/annotation/MBeanExportConfiguration.java index ea4f5b64a67..25715f82cad 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/MBeanExportConfiguration.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/MBeanExportConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2020 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,7 +19,6 @@ package org.springframework.context.annotation; import java.util.Map; import javax.management.MBeanServer; -import javax.naming.NamingException; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; @@ -28,14 +27,10 @@ import org.springframework.context.EnvironmentAware; import org.springframework.core.annotation.AnnotationAttributes; import org.springframework.core.env.Environment; import org.springframework.core.type.AnnotationMetadata; -import org.springframework.jmx.MBeanServerNotFoundException; import org.springframework.jmx.export.annotation.AnnotationMBeanExporter; import org.springframework.jmx.support.RegistrationPolicy; -import org.springframework.jmx.support.WebSphereMBeanServerFactoryBean; -import org.springframework.jndi.JndiLocatorDelegate; import org.springframework.lang.Nullable; import org.springframework.util.Assert; -import org.springframework.util.ClassUtils; import org.springframework.util.StringUtils; /** @@ -116,15 +111,6 @@ public class MBeanExportConfiguration implements ImportAware, EnvironmentAware, Assert.state(this.beanFactory != null, "No BeanFactory set"); exporter.setServer(this.beanFactory.getBean(server, MBeanServer.class)); } - else { - SpecificPlatform specificPlatform = SpecificPlatform.get(); - if (specificPlatform != null) { - MBeanServer mbeanServer = specificPlatform.getMBeanServer(); - if (mbeanServer != null) { - exporter.setServer(mbeanServer); - } - } - } } private void setupRegistrationPolicy(AnnotationMBeanExporter exporter, AnnotationAttributes enableMBeanExport) { @@ -132,58 +118,4 @@ public class MBeanExportConfiguration implements ImportAware, EnvironmentAware, exporter.setRegistrationPolicy(registrationPolicy); } - - /** - * Specific platforms that might need custom MBean handling. - */ - public enum SpecificPlatform { - - /** - * Weblogic. - */ - WEBLOGIC("weblogic.management.Helper") { - @Override - public MBeanServer getMBeanServer() { - try { - return new JndiLocatorDelegate().lookup("java:comp/env/jmx/runtime", MBeanServer.class); - } - catch (NamingException ex) { - throw new MBeanServerNotFoundException("Failed to retrieve WebLogic MBeanServer from JNDI", ex); - } - } - }, - - /** - * Websphere. - */ - WEBSPHERE("com.ibm.websphere.management.AdminServiceFactory") { - @Override - public MBeanServer getMBeanServer() { - WebSphereMBeanServerFactoryBean fb = new WebSphereMBeanServerFactoryBean(); - fb.afterPropertiesSet(); - return fb.getObject(); - } - }; - - private final String identifyingClass; - - SpecificPlatform(String identifyingClass) { - this.identifyingClass = identifyingClass; - } - - @Nullable - public abstract MBeanServer getMBeanServer(); - - @Nullable - public static SpecificPlatform get() { - ClassLoader classLoader = MBeanExportConfiguration.class.getClassLoader(); - for (SpecificPlatform environment : values()) { - if (ClassUtils.isPresent(environment.identifyingClass, classLoader)) { - return environment; - } - } - return null; - } - } - } diff --git a/spring-context/src/main/java/org/springframework/context/config/MBeanExportBeanDefinitionParser.java b/spring-context/src/main/java/org/springframework/context/config/MBeanExportBeanDefinitionParser.java index e1bba29d330..14caba9b4a2 100644 --- a/spring-context/src/main/java/org/springframework/context/config/MBeanExportBeanDefinitionParser.java +++ b/spring-context/src/main/java/org/springframework/context/config/MBeanExportBeanDefinitionParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2017 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -76,12 +76,6 @@ class MBeanExportBeanDefinitionParser extends AbstractBeanDefinitionParser { if (StringUtils.hasText(serverBeanName)) { builder.addPropertyReference("server", serverBeanName); } - else { - AbstractBeanDefinition specialServer = MBeanServerBeanDefinitionParser.findServerForSpecialEnvironment(); - if (specialServer != null) { - builder.addPropertyValue("server", specialServer); - } - } String registration = element.getAttribute(REGISTRATION_ATTRIBUTE); RegistrationPolicy registrationPolicy = RegistrationPolicy.FAIL_ON_EXISTING; diff --git a/spring-context/src/main/java/org/springframework/context/config/MBeanServerBeanDefinitionParser.java b/spring-context/src/main/java/org/springframework/context/config/MBeanServerBeanDefinitionParser.java index 78062b65835..89114cf2362 100644 --- a/spring-context/src/main/java/org/springframework/context/config/MBeanServerBeanDefinitionParser.java +++ b/spring-context/src/main/java/org/springframework/context/config/MBeanServerBeanDefinitionParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,10 +24,6 @@ import org.springframework.beans.factory.support.RootBeanDefinition; import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; import org.springframework.jmx.support.MBeanServerFactoryBean; -import org.springframework.jmx.support.WebSphereMBeanServerFactoryBean; -import org.springframework.jndi.JndiObjectFactoryBean; -import org.springframework.lang.Nullable; -import org.springframework.util.ClassUtils; import org.springframework.util.StringUtils; /** @@ -49,17 +45,6 @@ class MBeanServerBeanDefinitionParser extends AbstractBeanDefinitionParser { private static final String AGENT_ID_ATTRIBUTE = "agent-id"; - private static final boolean weblogicPresent; - - private static final boolean webspherePresent; - - static { - ClassLoader classLoader = MBeanServerBeanDefinitionParser.class.getClassLoader(); - weblogicPresent = ClassUtils.isPresent("weblogic.management.Helper", classLoader); - webspherePresent = ClassUtils.isPresent("com.ibm.websphere.management.AdminServiceFactory", classLoader); - } - - @Override protected String resolveId(Element element, AbstractBeanDefinition definition, ParserContext parserContext) { String id = element.getAttribute(ID_ATTRIBUTE); @@ -74,10 +59,7 @@ class MBeanServerBeanDefinitionParser extends AbstractBeanDefinitionParser { bd.getPropertyValues().add("agentId", agentId); return bd; } - AbstractBeanDefinition specialServer = findServerForSpecialEnvironment(); - if (specialServer != null) { - return specialServer; - } + RootBeanDefinition bd = new RootBeanDefinition(MBeanServerFactoryBean.class); bd.getPropertyValues().add("locateExistingServerIfPossible", Boolean.TRUE); @@ -87,19 +69,4 @@ class MBeanServerBeanDefinitionParser extends AbstractBeanDefinitionParser { return bd; } - @Nullable - static AbstractBeanDefinition findServerForSpecialEnvironment() { - if (weblogicPresent) { - RootBeanDefinition bd = new RootBeanDefinition(JndiObjectFactoryBean.class); - bd.getPropertyValues().add("jndiName", "java:comp/env/jmx/runtime"); - return bd; - } - else if (webspherePresent) { - return new RootBeanDefinition(WebSphereMBeanServerFactoryBean.class); - } - else { - return null; - } - } - } diff --git a/spring-context/src/main/java/org/springframework/context/weaving/DefaultContextLoadTimeWeaver.java b/spring-context/src/main/java/org/springframework/context/weaving/DefaultContextLoadTimeWeaver.java index 5820735ce04..11072d21a09 100644 --- a/spring-context/src/main/java/org/springframework/context/weaving/DefaultContextLoadTimeWeaver.java +++ b/spring-context/src/main/java/org/springframework/context/weaving/DefaultContextLoadTimeWeaver.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -30,8 +30,6 @@ import org.springframework.instrument.classloading.ReflectiveLoadTimeWeaver; import org.springframework.instrument.classloading.glassfish.GlassFishLoadTimeWeaver; import org.springframework.instrument.classloading.jboss.JBossLoadTimeWeaver; import org.springframework.instrument.classloading.tomcat.TomcatLoadTimeWeaver; -import org.springframework.instrument.classloading.weblogic.WebLogicLoadTimeWeaver; -import org.springframework.instrument.classloading.websphere.WebSphereLoadTimeWeaver; import org.springframework.lang.Nullable; import org.springframework.util.Assert; @@ -45,10 +43,9 @@ import org.springframework.util.Assert; * on a {@code @Configuration} class. * *

This class implements a runtime environment check for obtaining the - * appropriate weaver implementation. As of Spring Framework 5.0, it detects - * Oracle WebLogic 10+, GlassFish 4+, Tomcat 8+, WildFly 8+, IBM WebSphere 8.5+, - * {@link InstrumentationSavingAgent Spring's VM agent}, and any {@link ClassLoader} - * supported by Spring's {@link ReflectiveLoadTimeWeaver} (such as Liberty's). + * appropriate weaver implementation, including + * {@link InstrumentationSavingAgent Spring's VM agent} and any {@link ClassLoader} + * supported by Spring's {@link ReflectiveLoadTimeWeaver}. * * @author Juergen Hoeller * @author Ramnivas Laddad @@ -120,12 +117,6 @@ public class DefaultContextLoadTimeWeaver implements LoadTimeWeaver, BeanClassLo else if (name.startsWith("org.jboss.modules")) { return new JBossLoadTimeWeaver(classLoader); } - else if (name.startsWith("com.ibm.ws.classloader")) { - return new WebSphereLoadTimeWeaver(classLoader); - } - else if (name.startsWith("weblogic")) { - return new WebLogicLoadTimeWeaver(classLoader); - } } catch (Exception ex) { if (logger.isInfoEnabled()) { diff --git a/spring-context/src/main/java/org/springframework/ejb/access/AbstractRemoteSlsbInvokerInterceptor.java b/spring-context/src/main/java/org/springframework/ejb/access/AbstractRemoteSlsbInvokerInterceptor.java deleted file mode 100644 index 1a294ffc9ae..00000000000 --- a/spring-context/src/main/java/org/springframework/ejb/access/AbstractRemoteSlsbInvokerInterceptor.java +++ /dev/null @@ -1,213 +0,0 @@ -/* - * Copyright 2002-2020 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.ejb.access; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.rmi.RemoteException; - -import javax.ejb.EJBHome; -import javax.ejb.EJBObject; -import javax.naming.NamingException; - -import org.aopalliance.intercept.MethodInvocation; - -import org.springframework.lang.Nullable; -import org.springframework.remoting.RemoteConnectFailureException; -import org.springframework.remoting.RemoteLookupFailureException; - -/** - * Base class for interceptors proxying remote Stateless Session Beans. - * Designed for EJB 2.x, but works for EJB 3 Session Beans as well. - * - *

Such an interceptor must be the last interceptor in the advice chain. - * In this case, there is no target object. - * - * @author Rod Johnson - * @author Juergen Hoeller - */ -public abstract class AbstractRemoteSlsbInvokerInterceptor extends AbstractSlsbInvokerInterceptor { - - private boolean refreshHomeOnConnectFailure = false; - - private volatile boolean homeAsComponent; - - - - /** - * Set whether to refresh the EJB home on connect failure. - * Default is "false". - *

Can be turned on to allow for hot restart of the EJB server. - * If a cached EJB home throws an RMI exception that indicates a - * remote connect failure, a fresh home will be fetched and the - * invocation will be retried. - * @see java.rmi.ConnectException - * @see java.rmi.ConnectIOException - * @see java.rmi.NoSuchObjectException - */ - public void setRefreshHomeOnConnectFailure(boolean refreshHomeOnConnectFailure) { - this.refreshHomeOnConnectFailure = refreshHomeOnConnectFailure; - } - - @Override - protected boolean isHomeRefreshable() { - return this.refreshHomeOnConnectFailure; - } - - - /** - * Check for EJB3-style home object that serves as EJB component directly. - */ - @Override - protected Method getCreateMethod(Object home) throws EjbAccessException { - if (this.homeAsComponent) { - return null; - } - if (!(home instanceof EJBHome)) { - // An EJB3 Session Bean... - this.homeAsComponent = true; - return null; - } - return super.getCreateMethod(home); - } - - - /** - * Fetches an EJB home object and delegates to {@code doInvoke}. - *

If configured to refresh on connect failure, it will call - * {@link #refreshAndRetry} on corresponding RMI exceptions. - * @see #getHome - * @see #doInvoke - * @see #refreshAndRetry - */ - @Override - @Nullable - public Object invokeInContext(MethodInvocation invocation) throws Throwable { - try { - return doInvoke(invocation); - } - catch (RemoteConnectFailureException ex) { - return handleRemoteConnectFailure(invocation, ex); - } - catch (RemoteException ex) { - if (isConnectFailure(ex)) { - return handleRemoteConnectFailure(invocation, ex); - } - else { - throw ex; - } - } - } - - /** - * Determine whether the given RMI exception indicates a connect failure. - *

The default implementation delegates to RmiClientInterceptorUtils. - * @param ex the RMI exception to check - * @return whether the exception should be treated as connect failure - * @see org.springframework.remoting.rmi.RmiClientInterceptorUtils#isConnectFailure - */ - @SuppressWarnings("deprecation") - protected boolean isConnectFailure(RemoteException ex) { - return org.springframework.remoting.rmi.RmiClientInterceptorUtils.isConnectFailure(ex); - } - - @Nullable - private Object handleRemoteConnectFailure(MethodInvocation invocation, Exception ex) throws Throwable { - if (this.refreshHomeOnConnectFailure) { - if (logger.isDebugEnabled()) { - logger.debug("Could not connect to remote EJB [" + getJndiName() + "] - retrying", ex); - } - else if (logger.isWarnEnabled()) { - logger.warn("Could not connect to remote EJB [" + getJndiName() + "] - retrying"); - } - return refreshAndRetry(invocation); - } - else { - throw ex; - } - } - - /** - * Refresh the EJB home object and retry the given invocation. - * Called by invoke on connect failure. - * @param invocation the AOP method invocation - * @return the invocation result, if any - * @throws Throwable in case of invocation failure - * @see #invoke - */ - @Nullable - protected Object refreshAndRetry(MethodInvocation invocation) throws Throwable { - try { - refreshHome(); - } - catch (NamingException ex) { - throw new RemoteLookupFailureException("Failed to locate remote EJB [" + getJndiName() + "]", ex); - } - return doInvoke(invocation); - } - - - /** - * Perform the given invocation on the current EJB home. - * Template method to be implemented by subclasses. - * @param invocation the AOP method invocation - * @return the invocation result, if any - * @throws Throwable in case of invocation failure - * @see #getHome - * @see #newSessionBeanInstance - */ - @Nullable - protected abstract Object doInvoke(MethodInvocation invocation) throws Throwable; - - - /** - * Return a new instance of the stateless session bean. - * To be invoked by concrete remote SLSB invoker subclasses. - *

Can be overridden to change the algorithm. - * @throws NamingException if thrown by JNDI - * @throws InvocationTargetException if thrown by the create method - * @see #create - */ - protected Object newSessionBeanInstance() throws NamingException, InvocationTargetException { - if (logger.isDebugEnabled()) { - logger.debug("Trying to create reference to remote EJB"); - } - Object ejbInstance = create(); - if (logger.isDebugEnabled()) { - logger.debug("Obtained reference to remote EJB: " + ejbInstance); - } - return ejbInstance; - } - - /** - * Remove the given EJB instance. - * To be invoked by concrete remote SLSB invoker subclasses. - * @param ejb the EJB instance to remove - * @see javax.ejb.EJBObject#remove - */ - protected void removeSessionBeanInstance(@Nullable EJBObject ejb) { - if (ejb != null && !this.homeAsComponent) { - try { - ejb.remove(); - } - catch (Throwable ex) { - logger.warn("Could not invoke 'remove' on remote EJB proxy", ex); - } - } - } - -} diff --git a/spring-context/src/main/java/org/springframework/ejb/access/AbstractSlsbInvokerInterceptor.java b/spring-context/src/main/java/org/springframework/ejb/access/AbstractSlsbInvokerInterceptor.java deleted file mode 100644 index 06657499d6e..00000000000 --- a/spring-context/src/main/java/org/springframework/ejb/access/AbstractSlsbInvokerInterceptor.java +++ /dev/null @@ -1,238 +0,0 @@ -/* - * Copyright 2002-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.ejb.access; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - -import javax.naming.Context; -import javax.naming.NamingException; - -import org.aopalliance.intercept.MethodInterceptor; -import org.aopalliance.intercept.MethodInvocation; - -import org.springframework.jndi.JndiObjectLocator; -import org.springframework.lang.Nullable; - -/** - * Base class for AOP interceptors invoking local or remote Stateless Session Beans. - * Designed for EJB 2.x, but works for EJB 3 Session Beans as well. - * - *

Such an interceptor must be the last interceptor in the advice chain. - * In this case, there is no direct target object: The call is handled in a - * special way, getting executed on an EJB instance retrieved via an EJB home. - * - * @author Rod Johnson - * @author Juergen Hoeller - */ -public abstract class AbstractSlsbInvokerInterceptor extends JndiObjectLocator - implements MethodInterceptor { - - private boolean lookupHomeOnStartup = true; - - private boolean cacheHome = true; - - private boolean exposeAccessContext = false; - - /** - * The EJB's home object, potentially cached. - * The type must be Object as it could be either EJBHome or EJBLocalHome. - */ - @Nullable - private Object cachedHome; - - /** - * The no-arg create() method required on EJB homes, potentially cached. - */ - @Nullable - private Method createMethod; - - private final Object homeMonitor = new Object(); - - - /** - * Set whether to look up the EJB home object on startup. - * Default is "true". - *

Can be turned off to allow for late start of the EJB server. - * In this case, the EJB home object will be fetched on first access. - * @see #setCacheHome - */ - public void setLookupHomeOnStartup(boolean lookupHomeOnStartup) { - this.lookupHomeOnStartup = lookupHomeOnStartup; - } - - /** - * Set whether to cache the EJB home object once it has been located. - * Default is "true". - *

Can be turned off to allow for hot restart of the EJB server. - * In this case, the EJB home object will be fetched for each invocation. - * @see #setLookupHomeOnStartup - */ - public void setCacheHome(boolean cacheHome) { - this.cacheHome = cacheHome; - } - - /** - * Set whether to expose the JNDI environment context for all access to the target - * EJB, i.e. for all method invocations on the exposed object reference. - *

Default is "false", i.e. to only expose the JNDI context for object lookup. - * Switch this flag to "true" in order to expose the JNDI environment (including - * the authorization context) for each EJB invocation, as needed by WebLogic - * for EJBs with authorization requirements. - */ - public void setExposeAccessContext(boolean exposeAccessContext) { - this.exposeAccessContext = exposeAccessContext; - } - - - /** - * Fetches EJB home on startup, if necessary. - * @see #setLookupHomeOnStartup - * @see #refreshHome - */ - @Override - public void afterPropertiesSet() throws NamingException { - super.afterPropertiesSet(); - if (this.lookupHomeOnStartup) { - // look up EJB home and create method - refreshHome(); - } - } - - /** - * Refresh the cached home object, if applicable. - * Also caches the create method on the home object. - * @throws NamingException if thrown by the JNDI lookup - * @see #lookup - * @see #getCreateMethod - */ - protected void refreshHome() throws NamingException { - synchronized (this.homeMonitor) { - Object home = lookup(); - if (this.cacheHome) { - this.cachedHome = home; - this.createMethod = getCreateMethod(home); - } - } - } - - /** - * Determine the create method of the given EJB home object. - * @param home the EJB home object - * @return the create method - * @throws EjbAccessException if the method couldn't be retrieved - */ - @Nullable - protected Method getCreateMethod(Object home) throws EjbAccessException { - try { - // Cache the EJB create() method that must be declared on the home interface. - return home.getClass().getMethod("create"); - } - catch (NoSuchMethodException ex) { - throw new EjbAccessException("EJB home [" + home + "] has no no-arg create() method"); - } - } - - /** - * Return the EJB home object to use. Called for each invocation. - *

Default implementation returns the home created on initialization, - * if any; else, it invokes lookup to get a new proxy for each invocation. - *

Can be overridden in subclasses, for example to cache a home object - * for a given amount of time before recreating it, or to test the home - * object whether it is still alive. - * @return the EJB home object to use for an invocation - * @throws NamingException if proxy creation failed - * @see #lookup - * @see #getCreateMethod - */ - protected Object getHome() throws NamingException { - if (!this.cacheHome || (this.lookupHomeOnStartup && !isHomeRefreshable())) { - return (this.cachedHome != null ? this.cachedHome : lookup()); - } - else { - synchronized (this.homeMonitor) { - if (this.cachedHome == null) { - this.cachedHome = lookup(); - this.createMethod = getCreateMethod(this.cachedHome); - } - return this.cachedHome; - } - } - } - - /** - * Return whether the cached EJB home object is potentially - * subject to on-demand refreshing. Default is "false". - */ - protected boolean isHomeRefreshable() { - return false; - } - - - /** - * Prepares the thread context if necessary, and delegates to - * {@link #invokeInContext}. - */ - @Override - @Nullable - public Object invoke(MethodInvocation invocation) throws Throwable { - Context ctx = (this.exposeAccessContext ? getJndiTemplate().getContext() : null); - try { - return invokeInContext(invocation); - } - finally { - getJndiTemplate().releaseContext(ctx); - } - } - - /** - * Perform the given invocation on the current EJB home, - * within the thread context being prepared accordingly. - * Template method to be implemented by subclasses. - * @param invocation the AOP method invocation - * @return the invocation result, if any - * @throws Throwable in case of invocation failure - */ - @Nullable - protected abstract Object invokeInContext(MethodInvocation invocation) throws Throwable; - - - /** - * Invokes the {@code create()} method on the cached EJB home object. - * @return a new EJBObject or EJBLocalObject - * @throws NamingException if thrown by JNDI - * @throws InvocationTargetException if thrown by the create method - */ - protected Object create() throws NamingException, InvocationTargetException { - try { - Object home = getHome(); - Method createMethodToUse = this.createMethod; - if (createMethodToUse == null) { - createMethodToUse = getCreateMethod(home); - } - if (createMethodToUse == null) { - return home; - } - // Invoke create() method on EJB home object. - return createMethodToUse.invoke(home, (Object[]) null); - } - catch (IllegalAccessException ex) { - throw new EjbAccessException("Could not access EJB home create() method", ex); - } - } - -} diff --git a/spring-context/src/main/java/org/springframework/ejb/access/EjbAccessException.java b/spring-context/src/main/java/org/springframework/ejb/access/EjbAccessException.java deleted file mode 100644 index 50f18064c71..00000000000 --- a/spring-context/src/main/java/org/springframework/ejb/access/EjbAccessException.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.ejb.access; - -import org.springframework.core.NestedRuntimeException; - -/** - * Exception that gets thrown when an EJB stub cannot be accessed properly. - * - * @author Juergen Hoeller - * @since 2.0 - */ -@SuppressWarnings("serial") -public class EjbAccessException extends NestedRuntimeException { - - /** - * Constructor for EjbAccessException. - * @param msg the detail message - */ - public EjbAccessException(String msg) { - super(msg); - } - - /** - * Constructor for EjbAccessException. - * @param msg the detail message - * @param cause the root cause - */ - public EjbAccessException(String msg, Throwable cause) { - super(msg, cause); - } - -} diff --git a/spring-context/src/main/java/org/springframework/ejb/access/LocalSlsbInvokerInterceptor.java b/spring-context/src/main/java/org/springframework/ejb/access/LocalSlsbInvokerInterceptor.java deleted file mode 100644 index 027b7ef8736..00000000000 --- a/spring-context/src/main/java/org/springframework/ejb/access/LocalSlsbInvokerInterceptor.java +++ /dev/null @@ -1,179 +0,0 @@ -/* - * Copyright 2002-2020 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.ejb.access; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - -import javax.ejb.CreateException; -import javax.ejb.EJBLocalHome; -import javax.ejb.EJBLocalObject; -import javax.naming.NamingException; - -import org.aopalliance.intercept.MethodInvocation; - -import org.springframework.lang.Nullable; - -/** - * Invoker for a local Stateless Session Bean. - * Designed for EJB 2.x, but works for EJB 3 Session Beans as well. - * - *

Caches the home object, since a local EJB home can never go stale. - * See {@link org.springframework.jndi.JndiObjectLocator} for info on - * how to specify the JNDI location of the target EJB. - * - *

In a bean container, this class is normally best used as a singleton. However, - * if that bean container pre-instantiates singletons (as do the XML ApplicationContext - * variants) you may have a problem if the bean container is loaded before the EJB - * container loads the target EJB. That is because by default the JNDI lookup will be - * performed in the init method of this class and cached, but the EJB will not have been - * bound at the target location yet. The best solution is to set the lookupHomeOnStartup - * property to false, in which case the home will be fetched on first access to the EJB. - * (This flag is only true by default for backwards compatibility reasons). - * - * @author Rod Johnson - * @author Juergen Hoeller - * @see AbstractSlsbInvokerInterceptor#setLookupHomeOnStartup - * @see AbstractSlsbInvokerInterceptor#setCacheHome - */ -public class LocalSlsbInvokerInterceptor extends AbstractSlsbInvokerInterceptor { - - private volatile boolean homeAsComponent; - - - /** - * This implementation "creates" a new EJB instance for each invocation. - * Can be overridden for custom invocation strategies. - *

Alternatively, override {@link #getSessionBeanInstance} and - * {@link #releaseSessionBeanInstance} to change EJB instance creation, - * for example to hold a single shared EJB instance. - */ - @Override - @Nullable - public Object invokeInContext(MethodInvocation invocation) throws Throwable { - Object ejb = null; - try { - ejb = getSessionBeanInstance(); - Method method = invocation.getMethod(); - if (method.getDeclaringClass().isInstance(ejb)) { - // directly implemented - return method.invoke(ejb, invocation.getArguments()); - } - else { - // not directly implemented - Method ejbMethod = ejb.getClass().getMethod(method.getName(), method.getParameterTypes()); - return ejbMethod.invoke(ejb, invocation.getArguments()); - } - } - catch (InvocationTargetException ex) { - Throwable targetEx = ex.getTargetException(); - if (logger.isDebugEnabled()) { - logger.debug("Method of local EJB [" + getJndiName() + "] threw exception", targetEx); - } - if (targetEx instanceof CreateException) { - throw new EjbAccessException("Could not create local EJB [" + getJndiName() + "]", targetEx); - } - else { - throw targetEx; - } - } - catch (NamingException ex) { - throw new EjbAccessException("Failed to locate local EJB [" + getJndiName() + "]", ex); - } - catch (IllegalAccessException ex) { - throw new EjbAccessException("Could not access method [" + invocation.getMethod().getName() + - "] of local EJB [" + getJndiName() + "]", ex); - } - finally { - if (ejb instanceof EJBLocalObject) { - releaseSessionBeanInstance((EJBLocalObject) ejb); - } - } - } - - /** - * Check for EJB3-style home object that serves as EJB component directly. - */ - @Override - protected Method getCreateMethod(Object home) throws EjbAccessException { - if (this.homeAsComponent) { - return null; - } - if (!(home instanceof EJBLocalHome)) { - // An EJB3 Session Bean... - this.homeAsComponent = true; - return null; - } - return super.getCreateMethod(home); - } - - /** - * Return an EJB instance to delegate the call to. - * Default implementation delegates to newSessionBeanInstance. - * @throws NamingException if thrown by JNDI - * @throws InvocationTargetException if thrown by the create method - * @see #newSessionBeanInstance - */ - protected Object getSessionBeanInstance() throws NamingException, InvocationTargetException { - return newSessionBeanInstance(); - } - - /** - * Release the given EJB instance. - * Default implementation delegates to removeSessionBeanInstance. - * @param ejb the EJB instance to release - * @see #removeSessionBeanInstance - */ - protected void releaseSessionBeanInstance(EJBLocalObject ejb) { - removeSessionBeanInstance(ejb); - } - - /** - * Return a new instance of the stateless session bean. - * Can be overridden to change the algorithm. - * @throws NamingException if thrown by JNDI - * @throws InvocationTargetException if thrown by the create method - * @see #create - */ - protected Object newSessionBeanInstance() throws NamingException, InvocationTargetException { - if (logger.isDebugEnabled()) { - logger.debug("Trying to create reference to local EJB"); - } - Object ejbInstance = create(); - if (logger.isDebugEnabled()) { - logger.debug("Obtained reference to local EJB: " + ejbInstance); - } - return ejbInstance; - } - - /** - * Remove the given EJB instance. - * @param ejb the EJB instance to remove - * @see javax.ejb.EJBLocalObject#remove() - */ - protected void removeSessionBeanInstance(@Nullable EJBLocalObject ejb) { - if (ejb != null && !this.homeAsComponent) { - try { - ejb.remove(); - } - catch (Throwable ex) { - logger.warn("Could not invoke 'remove' on local EJB proxy", ex); - } - } - } - -} diff --git a/spring-context/src/main/java/org/springframework/ejb/access/LocalStatelessSessionProxyFactoryBean.java b/spring-context/src/main/java/org/springframework/ejb/access/LocalStatelessSessionProxyFactoryBean.java deleted file mode 100644 index 1b780af7258..00000000000 --- a/spring-context/src/main/java/org/springframework/ejb/access/LocalStatelessSessionProxyFactoryBean.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright 2002-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.ejb.access; - -import javax.naming.NamingException; - -import org.springframework.aop.framework.ProxyFactory; -import org.springframework.beans.factory.BeanClassLoaderAware; -import org.springframework.beans.factory.FactoryBean; -import org.springframework.lang.Nullable; -import org.springframework.util.ClassUtils; - -/** - * Convenient {@link FactoryBean} for local Stateless Session Bean (SLSB) proxies. - * Designed for EJB 2.x, but works for EJB 3 Session Beans as well. - * - *

See {@link org.springframework.jndi.JndiObjectLocator} for info on - * how to specify the JNDI location of the target EJB. - * - *

If you want control over interceptor chaining, use an AOP ProxyFactoryBean - * with LocalSlsbInvokerInterceptor rather than rely on this class. - * - *

In a bean container, this class is normally best used as a singleton. However, - * if that bean container pre-instantiates singletons (as do the XML ApplicationContext - * variants) you may have a problem if the bean container is loaded before the EJB - * container loads the target EJB. That is because by default the JNDI lookup will be - * performed in the init method of this class and cached, but the EJB will not have been - * bound at the target location yet. The best solution is to set the "lookupHomeOnStartup" - * property to "false", in which case the home will be fetched on first access to the EJB. - * (This flag is only true by default for backwards compatibility reasons). - * - * @author Rod Johnson - * @author Colin Sampaleanu - * @since 09.05.2003 - * @see AbstractSlsbInvokerInterceptor#setLookupHomeOnStartup - * @see AbstractSlsbInvokerInterceptor#setCacheHome - */ -public class LocalStatelessSessionProxyFactoryBean extends LocalSlsbInvokerInterceptor - implements FactoryBean, BeanClassLoaderAware { - - /** The business interface of the EJB we're proxying. */ - @Nullable - private Class businessInterface; - - @Nullable - private ClassLoader beanClassLoader = ClassUtils.getDefaultClassLoader(); - - /** EJBLocalObject. */ - @Nullable - private Object proxy; - - - /** - * Set the business interface of the EJB we're proxying. - * This will normally be a super-interface of the EJB local component interface. - * Using a business methods interface is a best practice when implementing EJBs. - * @param businessInterface set the business interface of the EJB - */ - public void setBusinessInterface(@Nullable Class businessInterface) { - this.businessInterface = businessInterface; - } - - /** - * Return the business interface of the EJB we're proxying. - */ - @Nullable - public Class getBusinessInterface() { - return this.businessInterface; - } - - @Override - public void setBeanClassLoader(ClassLoader classLoader) { - this.beanClassLoader = classLoader; - } - - @Override - public void afterPropertiesSet() throws NamingException { - super.afterPropertiesSet(); - if (this.businessInterface == null) { - throw new IllegalArgumentException("businessInterface is required"); - } - this.proxy = new ProxyFactory(this.businessInterface, this).getProxy(this.beanClassLoader); - } - - - @Override - @Nullable - public Object getObject() { - return this.proxy; - } - - @Override - public Class getObjectType() { - return this.businessInterface; - } - - @Override - public boolean isSingleton() { - return true; - } - -} diff --git a/spring-context/src/main/java/org/springframework/ejb/access/SimpleRemoteSlsbInvokerInterceptor.java b/spring-context/src/main/java/org/springframework/ejb/access/SimpleRemoteSlsbInvokerInterceptor.java deleted file mode 100644 index 292ddb64093..00000000000 --- a/spring-context/src/main/java/org/springframework/ejb/access/SimpleRemoteSlsbInvokerInterceptor.java +++ /dev/null @@ -1,188 +0,0 @@ -/* - * Copyright 2002-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.ejb.access; - -import java.lang.reflect.InvocationTargetException; -import java.rmi.RemoteException; - -import javax.ejb.CreateException; -import javax.ejb.EJBObject; -import javax.naming.NamingException; - -import org.aopalliance.intercept.MethodInvocation; - -import org.springframework.beans.factory.DisposableBean; -import org.springframework.lang.Nullable; -import org.springframework.remoting.RemoteLookupFailureException; - -/** - * Basic invoker for a remote Stateless Session Bean. - * Designed for EJB 2.x, but works for EJB 3 Session Beans as well. - * - *

"Creates" a new EJB instance for each invocation, or caches the session - * bean instance for all invocations (see {@link #setCacheSessionBean}). - * See {@link org.springframework.jndi.JndiObjectLocator} for info on - * how to specify the JNDI location of the target EJB. - * - *

In a bean container, this class is normally best used as a singleton. However, - * if that bean container pre-instantiates singletons (as do the XML ApplicationContext - * variants) you may have a problem if the bean container is loaded before the EJB - * container loads the target EJB. That is because by default the JNDI lookup will be - * performed in the init method of this class and cached, but the EJB will not have been - * bound at the target location yet. The best solution is to set the "lookupHomeOnStartup" - * property to "false", in which case the home will be fetched on first access to the EJB. - * (This flag is only true by default for backwards compatibility reasons). - * - *

This invoker is typically used with an RMI business interface, which serves - * as super-interface of the EJB component interface. Alternatively, this invoker - * can also proxy a remote SLSB with a matching non-RMI business interface, i.e. an - * interface that mirrors the EJB business methods but does not declare RemoteExceptions. - * In the latter case, RemoteExceptions thrown by the EJB stub will automatically get - * converted to Spring's unchecked RemoteAccessException. - * - * @author Rod Johnson - * @author Juergen Hoeller - * @since 09.05.2003 - * @see org.springframework.remoting.RemoteAccessException - * @see AbstractSlsbInvokerInterceptor#setLookupHomeOnStartup - * @see AbstractSlsbInvokerInterceptor#setCacheHome - * @see AbstractRemoteSlsbInvokerInterceptor#setRefreshHomeOnConnectFailure - */ -public class SimpleRemoteSlsbInvokerInterceptor extends AbstractRemoteSlsbInvokerInterceptor - implements DisposableBean { - - private boolean cacheSessionBean = false; - - @Nullable - private Object beanInstance; - - private final Object beanInstanceMonitor = new Object(); - - - /** - * Set whether to cache the actual session bean object. - *

Off by default for standard EJB compliance. Turn this flag - * on to optimize session bean access for servers that are - * known to allow for caching the actual session bean object. - * @see #setCacheHome - */ - public void setCacheSessionBean(boolean cacheSessionBean) { - this.cacheSessionBean = cacheSessionBean; - } - - - /** - * This implementation "creates" a new EJB instance for each invocation. - * Can be overridden for custom invocation strategies. - *

Alternatively, override {@link #getSessionBeanInstance} and - * {@link #releaseSessionBeanInstance} to change EJB instance creation, - * for example to hold a single shared EJB component instance. - */ - @Override - @Nullable - @SuppressWarnings("deprecation") - protected Object doInvoke(MethodInvocation invocation) throws Throwable { - Object ejb = null; - try { - ejb = getSessionBeanInstance(); - return org.springframework.remoting.rmi.RmiClientInterceptorUtils.invokeRemoteMethod(invocation, ejb); - } - catch (NamingException ex) { - throw new RemoteLookupFailureException("Failed to locate remote EJB [" + getJndiName() + "]", ex); - } - catch (InvocationTargetException ex) { - Throwable targetEx = ex.getTargetException(); - if (targetEx instanceof RemoteException) { - RemoteException rex = (RemoteException) targetEx; - throw org.springframework.remoting.rmi.RmiClientInterceptorUtils.convertRmiAccessException( - invocation.getMethod(), rex, isConnectFailure(rex), getJndiName()); - } - else if (targetEx instanceof CreateException) { - throw org.springframework.remoting.rmi.RmiClientInterceptorUtils.convertRmiAccessException( - invocation.getMethod(), targetEx, "Could not create remote EJB [" + getJndiName() + "]"); - } - throw targetEx; - } - finally { - if (ejb instanceof EJBObject) { - releaseSessionBeanInstance((EJBObject) ejb); - } - } - } - - /** - * Return an EJB component instance to delegate the call to. - *

The default implementation delegates to {@link #newSessionBeanInstance}. - * @return the EJB component instance - * @throws NamingException if thrown by JNDI - * @throws InvocationTargetException if thrown by the create method - * @see #newSessionBeanInstance - */ - protected Object getSessionBeanInstance() throws NamingException, InvocationTargetException { - if (this.cacheSessionBean) { - synchronized (this.beanInstanceMonitor) { - if (this.beanInstance == null) { - this.beanInstance = newSessionBeanInstance(); - } - return this.beanInstance; - } - } - else { - return newSessionBeanInstance(); - } - } - - /** - * Release the given EJB instance. - *

The default implementation delegates to {@link #removeSessionBeanInstance}. - * @param ejb the EJB component instance to release - * @see #removeSessionBeanInstance - */ - protected void releaseSessionBeanInstance(EJBObject ejb) { - if (!this.cacheSessionBean) { - removeSessionBeanInstance(ejb); - } - } - - /** - * Reset the cached session bean instance, if necessary. - */ - @Override - protected void refreshHome() throws NamingException { - super.refreshHome(); - if (this.cacheSessionBean) { - synchronized (this.beanInstanceMonitor) { - this.beanInstance = null; - } - } - } - - /** - * Remove the cached session bean instance, if necessary. - */ - @Override - public void destroy() { - if (this.cacheSessionBean) { - synchronized (this.beanInstanceMonitor) { - if (this.beanInstance instanceof EJBObject) { - removeSessionBeanInstance((EJBObject) this.beanInstance); - } - } - } - } - -} diff --git a/spring-context/src/main/java/org/springframework/ejb/access/SimpleRemoteStatelessSessionProxyFactoryBean.java b/spring-context/src/main/java/org/springframework/ejb/access/SimpleRemoteStatelessSessionProxyFactoryBean.java deleted file mode 100644 index 2cf93ad81fa..00000000000 --- a/spring-context/src/main/java/org/springframework/ejb/access/SimpleRemoteStatelessSessionProxyFactoryBean.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright 2002-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.ejb.access; - -import javax.naming.NamingException; - -import org.springframework.aop.framework.ProxyFactory; -import org.springframework.beans.factory.BeanClassLoaderAware; -import org.springframework.beans.factory.FactoryBean; -import org.springframework.lang.Nullable; -import org.springframework.util.ClassUtils; - -/** - * Convenient {@link FactoryBean} for remote SLSB proxies. - * Designed for EJB 2.x, but works for EJB 3 Session Beans as well. - * - *

See {@link org.springframework.jndi.JndiObjectLocator} for info on - * how to specify the JNDI location of the target EJB. - * - *

If you want control over interceptor chaining, use an AOP ProxyFactoryBean - * with SimpleRemoteSlsbInvokerInterceptor rather than rely on this class. - * - *

In a bean container, this class is normally best used as a singleton. However, - * if that bean container pre-instantiates singletons (as do the XML ApplicationContext - * variants) you may have a problem if the bean container is loaded before the EJB - * container loads the target EJB. That is because by default the JNDI lookup will be - * performed in the init method of this class and cached, but the EJB will not have been - * bound at the target location yet. The best solution is to set the lookupHomeOnStartup - * property to false, in which case the home will be fetched on first access to the EJB. - * (This flag is only true by default for backwards compatibility reasons). - * - *

This proxy factory is typically used with an RMI business interface, which serves - * as super-interface of the EJB component interface. Alternatively, this factory - * can also proxy a remote SLSB with a matching non-RMI business interface, i.e. an - * interface that mirrors the EJB business methods but does not declare RemoteExceptions. - * In the latter case, RemoteExceptions thrown by the EJB stub will automatically get - * converted to Spring's unchecked RemoteAccessException. - * - * @author Rod Johnson - * @author Colin Sampaleanu - * @author Juergen Hoeller - * @since 09.05.2003 - * @see org.springframework.remoting.RemoteAccessException - * @see AbstractSlsbInvokerInterceptor#setLookupHomeOnStartup - * @see AbstractSlsbInvokerInterceptor#setCacheHome - * @see AbstractRemoteSlsbInvokerInterceptor#setRefreshHomeOnConnectFailure - */ -public class SimpleRemoteStatelessSessionProxyFactoryBean extends SimpleRemoteSlsbInvokerInterceptor - implements FactoryBean, BeanClassLoaderAware { - - /** The business interface of the EJB we're proxying. */ - @Nullable - private Class businessInterface; - - @Nullable - private ClassLoader beanClassLoader = ClassUtils.getDefaultClassLoader(); - - /** EJBObject. */ - @Nullable - private Object proxy; - - - /** - * Set the business interface of the EJB we're proxying. - * This will normally be a super-interface of the EJB remote component interface. - * Using a business methods interface is a best practice when implementing EJBs. - *

You can also specify a matching non-RMI business interface, i.e. an interface - * that mirrors the EJB business methods but does not declare RemoteExceptions. - * In this case, RemoteExceptions thrown by the EJB stub will automatically get - * converted to Spring's generic RemoteAccessException. - * @param businessInterface the business interface of the EJB - */ - public void setBusinessInterface(@Nullable Class businessInterface) { - this.businessInterface = businessInterface; - } - - /** - * Return the business interface of the EJB we're proxying. - */ - @Nullable - public Class getBusinessInterface() { - return this.businessInterface; - } - - @Override - public void setBeanClassLoader(ClassLoader classLoader) { - this.beanClassLoader = classLoader; - } - - @Override - public void afterPropertiesSet() throws NamingException { - super.afterPropertiesSet(); - if (this.businessInterface == null) { - throw new IllegalArgumentException("businessInterface is required"); - } - this.proxy = new ProxyFactory(this.businessInterface, this).getProxy(this.beanClassLoader); - } - - - @Override - @Nullable - public Object getObject() { - return this.proxy; - } - - @Override - public Class getObjectType() { - return this.businessInterface; - } - - @Override - public boolean isSingleton() { - return true; - } - -} diff --git a/spring-context/src/main/java/org/springframework/ejb/access/package-info.java b/spring-context/src/main/java/org/springframework/ejb/access/package-info.java deleted file mode 100644 index 54011fa2ecc..00000000000 --- a/spring-context/src/main/java/org/springframework/ejb/access/package-info.java +++ /dev/null @@ -1,27 +0,0 @@ -/** - * This package contains classes that allow easy access to EJBs. - * The basis are AOP interceptors run before and after the EJB invocation. - * In particular, the classes in this package allow transparent access - * to stateless session beans (SLSBs) with local interfaces, avoiding - * the need for application code using them to use EJB-specific APIs - * and JNDI lookups, and work with business interfaces that could be - * implemented without using EJB. This provides a valuable decoupling - * of client (such as web components) and business objects (which may - * or may not be EJBs). This gives us the choice of introducing EJB - * into an application (or removing EJB from an application) without - * affecting code using business objects. - * - *

The motivation for the classes in this package is discussed in Chapter 11 of - * Expert One-On-One J2EE Design and Development - * by Rod Johnson (Wrox, 2002). - * - *

However, the implementation and naming of classes in this package has changed. - * It now uses FactoryBeans and AOP, rather than the custom bean definitions described in - * Expert One-on-One J2EE. - */ -@NonNullApi -@NonNullFields -package org.springframework.ejb.access; - -import org.springframework.lang.NonNullApi; -import org.springframework.lang.NonNullFields; diff --git a/spring-context/src/main/java/org/springframework/ejb/config/LocalStatelessSessionBeanDefinitionParser.java b/spring-context/src/main/java/org/springframework/ejb/config/LocalStatelessSessionBeanDefinitionParser.java index 5027c4aa287..035fad6581f 100644 --- a/spring-context/src/main/java/org/springframework/ejb/config/LocalStatelessSessionBeanDefinitionParser.java +++ b/spring-context/src/main/java/org/springframework/ejb/config/LocalStatelessSessionBeanDefinitionParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,12 +18,12 @@ package org.springframework.ejb.config; import org.w3c.dom.Element; -import org.springframework.ejb.access.LocalStatelessSessionProxyFactoryBean; +import org.springframework.jndi.JndiObjectFactoryBean; /** * {@link org.springframework.beans.factory.xml.BeanDefinitionParser} * implementation for parsing '{@code local-slsb}' tags and - * creating {@link LocalStatelessSessionProxyFactoryBean} definitions. + * creating plain {@link JndiObjectFactoryBean} definitions. * * @author Rob Harrop * @author Juergen Hoeller @@ -32,8 +32,8 @@ import org.springframework.ejb.access.LocalStatelessSessionProxyFactoryBean; class LocalStatelessSessionBeanDefinitionParser extends AbstractJndiLocatingBeanDefinitionParser { @Override - protected String getBeanClassName(Element element) { - return "org.springframework.ejb.access.LocalStatelessSessionProxyFactoryBean"; + protected Class getBeanClass(Element element) { + return JndiObjectFactoryBean.class; } } diff --git a/spring-context/src/main/java/org/springframework/ejb/config/RemoteStatelessSessionBeanDefinitionParser.java b/spring-context/src/main/java/org/springframework/ejb/config/RemoteStatelessSessionBeanDefinitionParser.java index 15883bdb14c..a88c5f64618 100644 --- a/spring-context/src/main/java/org/springframework/ejb/config/RemoteStatelessSessionBeanDefinitionParser.java +++ b/spring-context/src/main/java/org/springframework/ejb/config/RemoteStatelessSessionBeanDefinitionParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,12 +18,12 @@ package org.springframework.ejb.config; import org.w3c.dom.Element; -import org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBean; +import org.springframework.jndi.JndiObjectFactoryBean; /** * {@link org.springframework.beans.factory.xml.BeanDefinitionParser} * implementation for parsing '{@code remote-slsb}' tags and - * creating {@link SimpleRemoteStatelessSessionProxyFactoryBean} definitions. + * creating plain {@link JndiObjectFactoryBean} definitions. * * @author Rob Harrop * @author Juergen Hoeller @@ -32,8 +32,8 @@ import org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBe class RemoteStatelessSessionBeanDefinitionParser extends AbstractJndiLocatingBeanDefinitionParser { @Override - protected String getBeanClassName(Element element) { - return "org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBean"; + protected Class getBeanClass(Element element) { + return JndiObjectFactoryBean.class; } } diff --git a/spring-context/src/main/java/org/springframework/ejb/config/package-info.java b/spring-context/src/main/java/org/springframework/ejb/config/package-info.java index a5442d93e90..501900852b5 100644 --- a/spring-context/src/main/java/org/springframework/ejb/config/package-info.java +++ b/spring-context/src/main/java/org/springframework/ejb/config/package-info.java @@ -1,5 +1,5 @@ /** - * Support package for EJB/Java EE-related configuration, + * Support package for EJB/Jakarta EE-related configuration, * with XML schema being the primary configuration format. */ @NonNullApi diff --git a/spring-context/src/main/java/org/springframework/instrument/classloading/weblogic/WebLogicClassLoaderAdapter.java b/spring-context/src/main/java/org/springframework/instrument/classloading/weblogic/WebLogicClassLoaderAdapter.java deleted file mode 100644 index 1e4e0cd05bb..00000000000 --- a/spring-context/src/main/java/org/springframework/instrument/classloading/weblogic/WebLogicClassLoaderAdapter.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright 2002-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.instrument.classloading.weblogic; - -import java.lang.instrument.ClassFileTransformer; -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.Proxy; - -import org.springframework.util.Assert; - -/** - * Reflective wrapper around a WebLogic 10 class loader. Used to - * encapsulate the classloader-specific methods (discovered and - * called through reflection) from the load-time weaver. - * - * @author Costin Leau - * @author Juergen Hoeller - * @since 2.5 - */ -class WebLogicClassLoaderAdapter { - - private static final String GENERIC_CLASS_LOADER_NAME = "weblogic.utils.classloaders.GenericClassLoader"; - - private static final String CLASS_PRE_PROCESSOR_NAME = "weblogic.utils.classloaders.ClassPreProcessor"; - - - private final ClassLoader classLoader; - - private final Class wlPreProcessorClass; - - private final Method addPreProcessorMethod; - - private final Method getClassFinderMethod; - - private final Method getParentMethod; - - private final Constructor wlGenericClassLoaderConstructor; - - - public WebLogicClassLoaderAdapter(ClassLoader classLoader) { - Class wlGenericClassLoaderClass; - try { - wlGenericClassLoaderClass = classLoader.loadClass(GENERIC_CLASS_LOADER_NAME); - this.wlPreProcessorClass = classLoader.loadClass(CLASS_PRE_PROCESSOR_NAME); - this.addPreProcessorMethod = classLoader.getClass().getMethod( - "addInstanceClassPreProcessor", this.wlPreProcessorClass); - this.getClassFinderMethod = classLoader.getClass().getMethod("getClassFinder"); - this.getParentMethod = classLoader.getClass().getMethod("getParent"); - this.wlGenericClassLoaderConstructor = wlGenericClassLoaderClass.getConstructor( - this.getClassFinderMethod.getReturnType(), ClassLoader.class); - } - catch (Throwable ex) { - throw new IllegalStateException( - "Could not initialize WebLogic LoadTimeWeaver because WebLogic 10 API classes are not available", ex); - } - - if (!wlGenericClassLoaderClass.isInstance(classLoader)) { - throw new IllegalArgumentException( - "ClassLoader must be an instance of [" + wlGenericClassLoaderClass.getName() + "]: " + classLoader); - } - this.classLoader = classLoader; - } - - - public void addTransformer(ClassFileTransformer transformer) { - Assert.notNull(transformer, "ClassFileTransformer must not be null"); - try { - InvocationHandler adapter = new WebLogicClassPreProcessorAdapter(transformer, this.classLoader); - Object adapterInstance = Proxy.newProxyInstance(this.wlPreProcessorClass.getClassLoader(), - new Class[] {this.wlPreProcessorClass}, adapter); - this.addPreProcessorMethod.invoke(this.classLoader, adapterInstance); - } - catch (InvocationTargetException ex) { - throw new IllegalStateException("WebLogic addInstanceClassPreProcessor method threw exception", ex.getCause()); - } - catch (Throwable ex) { - throw new IllegalStateException("Could not invoke WebLogic addInstanceClassPreProcessor method", ex); - } - } - - public ClassLoader getClassLoader() { - return this.classLoader; - } - - public ClassLoader getThrowawayClassLoader() { - try { - Object classFinder = this.getClassFinderMethod.invoke(this.classLoader); - Object parent = this.getParentMethod.invoke(this.classLoader); - // arguments for 'clone'-like method - return (ClassLoader) this.wlGenericClassLoaderConstructor.newInstance(classFinder, parent); - } - catch (InvocationTargetException ex) { - throw new IllegalStateException("WebLogic GenericClassLoader constructor failed", ex.getCause()); - } - catch (Throwable ex) { - throw new IllegalStateException("Could not construct WebLogic GenericClassLoader", ex); - } - } - -} diff --git a/spring-context/src/main/java/org/springframework/instrument/classloading/weblogic/WebLogicClassPreProcessorAdapter.java b/spring-context/src/main/java/org/springframework/instrument/classloading/weblogic/WebLogicClassPreProcessorAdapter.java deleted file mode 100644 index 36c8834412e..00000000000 --- a/spring-context/src/main/java/org/springframework/instrument/classloading/weblogic/WebLogicClassPreProcessorAdapter.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright 2002-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.instrument.classloading.weblogic; - -import java.lang.instrument.ClassFileTransformer; -import java.lang.instrument.IllegalClassFormatException; -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.Method; -import java.util.Hashtable; - -import org.springframework.lang.Nullable; - -/** - * Adapter that implements WebLogic ClassPreProcessor interface, delegating to a - * standard JDK {@link ClassFileTransformer} underneath. - * - *

To avoid compile time checks again the vendor API, a dynamic proxy is - * being used. - * - * @author Costin Leau - * @author Juergen Hoeller - * @since 2.5 - */ -class WebLogicClassPreProcessorAdapter implements InvocationHandler { - - private final ClassFileTransformer transformer; - - private final ClassLoader loader; - - - /** - * Construct a new {@link WebLogicClassPreProcessorAdapter}. - */ - public WebLogicClassPreProcessorAdapter(ClassFileTransformer transformer, ClassLoader loader) { - this.transformer = transformer; - this.loader = loader; - } - - - @Override - @Nullable - public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { - String name = method.getName(); - if ("equals".equals(name)) { - return (proxy == args[0]); - } - else if ("hashCode".equals(name)) { - return hashCode(); - } - else if ("toString".equals(name)) { - return toString(); - } - else if ("initialize".equals(name)) { - initialize((Hashtable) args[0]); - return null; - } - else if ("preProcess".equals(name)) { - return preProcess((String) args[0], (byte[]) args[1]); - } - else { - throw new IllegalArgumentException("Unknown method: " + method); - } - } - - public void initialize(Hashtable params) { - } - - public byte[] preProcess(String className, byte[] classBytes) { - try { - byte[] result = this.transformer.transform(this.loader, className, null, null, classBytes); - return (result != null ? result : classBytes); - } - catch (IllegalClassFormatException ex) { - throw new IllegalStateException("Cannot transform due to illegal class format", ex); - } - } - - @Override - public String toString() { - return getClass().getName() + " for transformer: " + this.transformer; - } - -} diff --git a/spring-context/src/main/java/org/springframework/instrument/classloading/weblogic/WebLogicLoadTimeWeaver.java b/spring-context/src/main/java/org/springframework/instrument/classloading/weblogic/WebLogicLoadTimeWeaver.java deleted file mode 100644 index 9ca2b222b48..00000000000 --- a/spring-context/src/main/java/org/springframework/instrument/classloading/weblogic/WebLogicLoadTimeWeaver.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright 2002-2016 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.instrument.classloading.weblogic; - -import java.lang.instrument.ClassFileTransformer; - -import org.springframework.core.OverridingClassLoader; -import org.springframework.instrument.classloading.LoadTimeWeaver; -import org.springframework.lang.Nullable; -import org.springframework.util.Assert; -import org.springframework.util.ClassUtils; - -/** - * {@link LoadTimeWeaver} implementation for WebLogic's instrumentable - * ClassLoader. - * - *

NOTE: Requires BEA WebLogic version 10 or higher. - * - * @author Costin Leau - * @author Juergen Hoeller - * @since 2.5 - */ -public class WebLogicLoadTimeWeaver implements LoadTimeWeaver { - - private final WebLogicClassLoaderAdapter classLoader; - - - /** - * Creates a new instance of the {@link WebLogicLoadTimeWeaver} class using - * the default {@link ClassLoader class loader}. - * @see org.springframework.util.ClassUtils#getDefaultClassLoader() - */ - public WebLogicLoadTimeWeaver() { - this(ClassUtils.getDefaultClassLoader()); - } - - /** - * Creates a new instance of the {@link WebLogicLoadTimeWeaver} class using - * the supplied {@link ClassLoader}. - * @param classLoader the {@code ClassLoader} to delegate to for weaving - */ - public WebLogicLoadTimeWeaver(@Nullable ClassLoader classLoader) { - Assert.notNull(classLoader, "ClassLoader must not be null"); - this.classLoader = new WebLogicClassLoaderAdapter(classLoader); - } - - - @Override - public void addTransformer(ClassFileTransformer transformer) { - this.classLoader.addTransformer(transformer); - } - - @Override - public ClassLoader getInstrumentableClassLoader() { - return this.classLoader.getClassLoader(); - } - - @Override - public ClassLoader getThrowawayClassLoader() { - return new OverridingClassLoader(this.classLoader.getClassLoader(), - this.classLoader.getThrowawayClassLoader()); - } - -} diff --git a/spring-context/src/main/java/org/springframework/instrument/classloading/weblogic/package-info.java b/spring-context/src/main/java/org/springframework/instrument/classloading/weblogic/package-info.java deleted file mode 100644 index 9335b693419..00000000000 --- a/spring-context/src/main/java/org/springframework/instrument/classloading/weblogic/package-info.java +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Support for class instrumentation on BEA WebLogic 10+. - */ -@NonNullApi -@NonNullFields -package org.springframework.instrument.classloading.weblogic; - -import org.springframework.lang.NonNullApi; -import org.springframework.lang.NonNullFields; diff --git a/spring-context/src/main/java/org/springframework/instrument/classloading/websphere/WebSphereClassLoaderAdapter.java b/spring-context/src/main/java/org/springframework/instrument/classloading/websphere/WebSphereClassLoaderAdapter.java deleted file mode 100644 index bb68f0748e6..00000000000 --- a/spring-context/src/main/java/org/springframework/instrument/classloading/websphere/WebSphereClassLoaderAdapter.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright 2002-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.instrument.classloading.websphere; - -import java.lang.instrument.ClassFileTransformer; -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.Proxy; -import java.util.List; - -import org.springframework.util.Assert; - -/** - * Reflective wrapper around a WebSphere 7+ class loader. Used to - * encapsulate the classloader-specific methods (discovered and - * called through reflection) from the load-time weaver. - * - * @author Costin Leau - * @author Juergen Hoeller - * @since 3.1 - */ -class WebSphereClassLoaderAdapter { - - private static final String COMPOUND_CLASS_LOADER_NAME = "com.ibm.ws.classloader.CompoundClassLoader"; - - private static final String CLASS_PRE_PROCESSOR_NAME = "com.ibm.websphere.classloader.ClassLoaderInstancePreDefinePlugin"; - - private static final String PLUGINS_FIELD = "preDefinePlugins"; - - - private ClassLoader classLoader; - - private Class wsPreProcessorClass; - - private Method addPreDefinePlugin; - - private Constructor cloneConstructor; - - private Field transformerList; - - - public WebSphereClassLoaderAdapter(ClassLoader classLoader) { - Class wsCompoundClassLoaderClass; - try { - wsCompoundClassLoaderClass = classLoader.loadClass(COMPOUND_CLASS_LOADER_NAME); - this.cloneConstructor = classLoader.getClass().getDeclaredConstructor(wsCompoundClassLoaderClass); - this.cloneConstructor.setAccessible(true); - - this.wsPreProcessorClass = classLoader.loadClass(CLASS_PRE_PROCESSOR_NAME); - this.addPreDefinePlugin = classLoader.getClass().getMethod("addPreDefinePlugin", this.wsPreProcessorClass); - this.transformerList = wsCompoundClassLoaderClass.getDeclaredField(PLUGINS_FIELD); - this.transformerList.setAccessible(true); - } - catch (Throwable ex) { - throw new IllegalStateException( - "Could not initialize WebSphere LoadTimeWeaver because WebSphere API classes are not available", ex); - } - - if (!wsCompoundClassLoaderClass.isInstance(classLoader)) { - throw new IllegalArgumentException( - "ClassLoader must be an instance of [" + COMPOUND_CLASS_LOADER_NAME + "]: " + classLoader); - } - this.classLoader = classLoader; - } - - - public ClassLoader getClassLoader() { - return this.classLoader; - } - - public void addTransformer(ClassFileTransformer transformer) { - Assert.notNull(transformer, "ClassFileTransformer must not be null"); - try { - InvocationHandler adapter = new WebSphereClassPreDefinePlugin(transformer); - Object adapterInstance = Proxy.newProxyInstance(this.wsPreProcessorClass.getClassLoader(), - new Class[] {this.wsPreProcessorClass}, adapter); - this.addPreDefinePlugin.invoke(this.classLoader, adapterInstance); - } - catch (InvocationTargetException ex) { - throw new IllegalStateException("WebSphere addPreDefinePlugin method threw exception", ex.getCause()); - } - catch (Throwable ex) { - throw new IllegalStateException("Could not invoke WebSphere addPreDefinePlugin method", ex); - } - } - - public ClassLoader getThrowawayClassLoader() { - try { - ClassLoader loader = this.cloneConstructor.newInstance(getClassLoader()); - // Clear out the transformers (copied as well) - List list = (List) this.transformerList.get(loader); - list.clear(); - return loader; - } - catch (InvocationTargetException ex) { - throw new IllegalStateException("WebSphere CompoundClassLoader constructor failed", ex.getCause()); - } - catch (Throwable ex) { - throw new IllegalStateException("Could not construct WebSphere CompoundClassLoader", ex); - } - } - -} diff --git a/spring-context/src/main/java/org/springframework/instrument/classloading/websphere/WebSphereClassPreDefinePlugin.java b/spring-context/src/main/java/org/springframework/instrument/classloading/websphere/WebSphereClassPreDefinePlugin.java deleted file mode 100644 index c2d96a6ab9a..00000000000 --- a/spring-context/src/main/java/org/springframework/instrument/classloading/websphere/WebSphereClassPreDefinePlugin.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright 2002-2020 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.instrument.classloading.websphere; - -import java.lang.instrument.ClassFileTransformer; -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.Method; -import java.security.CodeSource; - -import org.springframework.util.FileCopyUtils; - -/** - * Adapter that implements WebSphere 7.0 ClassPreProcessPlugin interface, - * delegating to a standard JDK {@link ClassFileTransformer} underneath. - * - *

To avoid compile time checks again the vendor API, a dynamic proxy is - * being used. - * - * @author Costin Leau - * @since 3.1 - */ -class WebSphereClassPreDefinePlugin implements InvocationHandler { - - private final ClassFileTransformer transformer; - - - /** - * Create a new {@link WebSphereClassPreDefinePlugin}. - * @param transformer the {@link ClassFileTransformer} to be adapted - * (must not be {@code null}) - */ - public WebSphereClassPreDefinePlugin(ClassFileTransformer transformer) { - this.transformer = transformer; - ClassLoader classLoader = transformer.getClass().getClassLoader(); - - // First force the full class loading of the weaver by invoking transformation on a dummy class - try { - String dummyClass = Dummy.class.getName().replace('.', '/'); - byte[] bytes = FileCopyUtils.copyToByteArray(classLoader.getResourceAsStream(dummyClass + ".class")); - transformer.transform(classLoader, dummyClass, null, null, bytes); - } - catch (Throwable ex) { - throw new IllegalArgumentException("Cannot load transformer", ex); - } - } - - - @Override - public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { - switch (method.getName()) { - case "equals": - return (proxy == args[0]); - case "hashCode": - return hashCode(); - case "toString": - return toString(); - case "transformClass": - return transform((String) args[0], (byte[]) args[1], (CodeSource) args[2], (ClassLoader) args[3]); - default: - throw new IllegalArgumentException("Unknown method: " + method); - } - } - - protected byte[] transform(String className, byte[] classfileBuffer, CodeSource codeSource, ClassLoader classLoader) - throws Exception { - - // NB: WebSphere passes className as "." without class while the transformer expects a VM "/" format - byte[] result = this.transformer.transform(classLoader, className.replace('.', '/'), null, null, classfileBuffer); - return (result != null ? result : classfileBuffer); - } - - @Override - public String toString() { - return getClass().getName() + " for transformer: " + this.transformer; - } - - - private static class Dummy { - } - -} diff --git a/spring-context/src/main/java/org/springframework/instrument/classloading/websphere/WebSphereLoadTimeWeaver.java b/spring-context/src/main/java/org/springframework/instrument/classloading/websphere/WebSphereLoadTimeWeaver.java deleted file mode 100644 index 0160aefe160..00000000000 --- a/spring-context/src/main/java/org/springframework/instrument/classloading/websphere/WebSphereLoadTimeWeaver.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright 2002-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.instrument.classloading.websphere; - -import java.lang.instrument.ClassFileTransformer; - -import org.springframework.core.OverridingClassLoader; -import org.springframework.instrument.classloading.LoadTimeWeaver; -import org.springframework.lang.Nullable; -import org.springframework.util.Assert; -import org.springframework.util.ClassUtils; - -/** - * {@link LoadTimeWeaver} implementation for WebSphere's instrumentable ClassLoader. - * Compatible with WebSphere 7 as well as 8 and 9. - * - * @author Costin Leau - * @since 3.1 - */ -public class WebSphereLoadTimeWeaver implements LoadTimeWeaver { - - private final WebSphereClassLoaderAdapter classLoader; - - - /** - * Create a new instance of the {@link WebSphereLoadTimeWeaver} class using - * the default {@link ClassLoader class loader}. - * @see org.springframework.util.ClassUtils#getDefaultClassLoader() - */ - public WebSphereLoadTimeWeaver() { - this(ClassUtils.getDefaultClassLoader()); - } - - /** - * Create a new instance of the {@link WebSphereLoadTimeWeaver} class using - * the supplied {@link ClassLoader}. - * @param classLoader the {@code ClassLoader} to delegate to for weaving - */ - public WebSphereLoadTimeWeaver(@Nullable ClassLoader classLoader) { - Assert.notNull(classLoader, "ClassLoader must not be null"); - this.classLoader = new WebSphereClassLoaderAdapter(classLoader); - } - - - @Override - public void addTransformer(ClassFileTransformer transformer) { - this.classLoader.addTransformer(transformer); - } - - @Override - public ClassLoader getInstrumentableClassLoader() { - return this.classLoader.getClassLoader(); - } - - @Override - public ClassLoader getThrowawayClassLoader() { - return new OverridingClassLoader(this.classLoader.getClassLoader(), - this.classLoader.getThrowawayClassLoader()); - } - -} diff --git a/spring-context/src/main/java/org/springframework/instrument/classloading/websphere/package-info.java b/spring-context/src/main/java/org/springframework/instrument/classloading/websphere/package-info.java deleted file mode 100644 index 7bf0ff58b9b..00000000000 --- a/spring-context/src/main/java/org/springframework/instrument/classloading/websphere/package-info.java +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Support for class instrumentation on IBM WebSphere Application Server 7+. - */ -@NonNullApi -@NonNullFields -package org.springframework.instrument.classloading.websphere; - -import org.springframework.lang.NonNullApi; -import org.springframework.lang.NonNullFields; diff --git a/spring-context/src/main/java/org/springframework/jmx/support/WebSphereMBeanServerFactoryBean.java b/spring-context/src/main/java/org/springframework/jmx/support/WebSphereMBeanServerFactoryBean.java deleted file mode 100644 index fc0d4b8c535..00000000000 --- a/spring-context/src/main/java/org/springframework/jmx/support/WebSphereMBeanServerFactoryBean.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright 2002-2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jmx.support; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - -import javax.management.MBeanServer; - -import org.springframework.beans.factory.FactoryBean; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.jmx.MBeanServerNotFoundException; -import org.springframework.lang.Nullable; - -/** - * {@link FactoryBean} that obtains a WebSphere {@link javax.management.MBeanServer} - * reference through WebSphere's proprietary {@code AdminServiceFactory} API, - * available on WebSphere 5.1 and higher. - * - *

Exposes the {@code MBeanServer} for bean references. - * - *

This {@code FactoryBean} is a direct alternative to {@link MBeanServerFactoryBean}, - * which uses standard JMX 1.2 API to access the platform's {@link MBeanServer}. - * - *

See the javadocs for WebSphere's - * {@code AdminServiceFactory} - * and - * {@code MBeanFactory}. - * - * @author Juergen Hoeller - * @author Rob Harrop - * @since 2.0.3 - * @see javax.management.MBeanServer - * @see MBeanServerFactoryBean - */ -public class WebSphereMBeanServerFactoryBean implements FactoryBean, InitializingBean { - - private static final String ADMIN_SERVICE_FACTORY_CLASS = "com.ibm.websphere.management.AdminServiceFactory"; - - private static final String GET_MBEAN_FACTORY_METHOD = "getMBeanFactory"; - - private static final String GET_MBEAN_SERVER_METHOD = "getMBeanServer"; - - - @Nullable - private MBeanServer mbeanServer; - - - @Override - public void afterPropertiesSet() throws MBeanServerNotFoundException { - try { - /* - * this.mbeanServer = AdminServiceFactory.getMBeanFactory().getMBeanServer(); - */ - Class adminServiceClass = getClass().getClassLoader().loadClass(ADMIN_SERVICE_FACTORY_CLASS); - Method getMBeanFactoryMethod = adminServiceClass.getMethod(GET_MBEAN_FACTORY_METHOD); - Object mbeanFactory = getMBeanFactoryMethod.invoke(null); - Method getMBeanServerMethod = mbeanFactory.getClass().getMethod(GET_MBEAN_SERVER_METHOD); - this.mbeanServer = (MBeanServer) getMBeanServerMethod.invoke(mbeanFactory); - } - catch (ClassNotFoundException ex) { - throw new MBeanServerNotFoundException("Could not find WebSphere's AdminServiceFactory class", ex); - } - catch (InvocationTargetException ex) { - throw new MBeanServerNotFoundException( - "WebSphere's AdminServiceFactory.getMBeanFactory/getMBeanServer method failed", ex.getTargetException()); - } - catch (Exception ex) { - throw new MBeanServerNotFoundException( - "Could not access WebSphere's AdminServiceFactory.getMBeanFactory/getMBeanServer method", ex); - } - } - - - @Override - @Nullable - public MBeanServer getObject() { - return this.mbeanServer; - } - - @Override - public Class getObjectType() { - return (this.mbeanServer != null ? this.mbeanServer.getClass() : MBeanServer.class); - } - - @Override - public boolean isSingleton() { - return true; - } - -} diff --git a/spring-context/src/main/java/org/springframework/jndi/JndiLocatorDelegate.java b/spring-context/src/main/java/org/springframework/jndi/JndiLocatorDelegate.java index 7b0c0f2f2f9..640bdc81f28 100644 --- a/spring-context/src/main/java/org/springframework/jndi/JndiLocatorDelegate.java +++ b/spring-context/src/main/java/org/springframework/jndi/JndiLocatorDelegate.java @@ -77,7 +77,7 @@ public class JndiLocatorDelegate extends JndiLocatorSupport { } /** - * Check whether a default JNDI environment, as in a Java EE environment, + * Check whether a default JNDI environment, as in a Jakarta EE environment, * is available on this JVM. * @return {@code true} if a default InitialContext can be used, * {@code false} if not diff --git a/spring-context/src/main/java/org/springframework/jndi/JndiLocatorSupport.java b/spring-context/src/main/java/org/springframework/jndi/JndiLocatorSupport.java index be910152a37..5b901f6c415 100644 --- a/spring-context/src/main/java/org/springframework/jndi/JndiLocatorSupport.java +++ b/spring-context/src/main/java/org/springframework/jndi/JndiLocatorSupport.java @@ -27,7 +27,7 @@ import org.springframework.util.Assert; * bean properties. * *

JNDI names may or may not include the "java:comp/env/" prefix expected - * by Java EE applications when accessing a locally mapped (ENC - Environmental + * by Jakarta EE applications when accessing a locally mapped (ENC - Environmental * Naming Context) resource. If it doesn't, the "java:comp/env/" prefix will * be prepended if the "resourceRef" property is true (the default is * false) and no other scheme (e.g. "java:") is given. @@ -40,7 +40,7 @@ import org.springframework.util.Assert; */ public abstract class JndiLocatorSupport extends JndiAccessor { - /** JNDI prefix used in a Java EE container. */ + /** JNDI prefix used in a Jakarta EE container. */ public static final String CONTAINER_PREFIX = "java:comp/env/"; @@ -48,7 +48,7 @@ public abstract class JndiLocatorSupport extends JndiAccessor { /** - * Set whether the lookup occurs in a Java EE container, i.e. if the prefix + * Set whether the lookup occurs in a Jakarta EE container, i.e. if the prefix * "java:comp/env/" needs to be added if the JNDI name doesn't already * contain it. Default is "false". *

Note: Will only get applied if no other scheme (e.g. "java:") is given. @@ -58,7 +58,7 @@ public abstract class JndiLocatorSupport extends JndiAccessor { } /** - * Return whether the lookup occurs in a Java EE container. + * Return whether the lookup occurs in a Jakarta EE container. */ public boolean isResourceRef() { return this.resourceRef; diff --git a/spring-context/src/main/java/org/springframework/jndi/JndiObjectLocator.java b/spring-context/src/main/java/org/springframework/jndi/JndiObjectLocator.java index 7de88c4432c..ff2a0ffb5a0 100644 --- a/spring-context/src/main/java/org/springframework/jndi/JndiObjectLocator.java +++ b/spring-context/src/main/java/org/springframework/jndi/JndiObjectLocator.java @@ -28,7 +28,7 @@ import org.springframework.util.StringUtils; * providing configurable lookup of a specific JNDI resource. * *

Exposes a {@link #setJndiName "jndiName"} property. This may or may not - * include the "java:comp/env/" prefix expected by Java EE applications when + * include the "java:comp/env/" prefix expected by Jakarta EE applications when * accessing a locally mapped (Environmental Naming Context) resource. If it * doesn't, the "java:comp/env/" prefix will be prepended if the "resourceRef" * property is true (the default is false) and no other scheme diff --git a/spring-context/src/main/java/org/springframework/jndi/JndiObjectTargetSource.java b/spring-context/src/main/java/org/springframework/jndi/JndiObjectTargetSource.java index 83da60219da..21b1e0cdae6 100644 --- a/spring-context/src/main/java/org/springframework/jndi/JndiObjectTargetSource.java +++ b/spring-context/src/main/java/org/springframework/jndi/JndiObjectTargetSource.java @@ -39,7 +39,7 @@ import org.springframework.lang.Nullable; * </bean> * * <bean id="queueConnectionFactory" class="org.springframework.aop.framework.ProxyFactoryBean"> - * <property name="proxyInterfaces" value="javax.jms.QueueConnectionFactory"/> + * <property name="proxyInterfaces" value="jakarta.jms.QueueConnectionFactory"/> * <property name="targetSource" ref="queueConnectionFactoryTarget"/> * </bean> * diff --git a/spring-context/src/main/java/org/springframework/jndi/support/SimpleJndiBeanFactory.java b/spring-context/src/main/java/org/springframework/jndi/support/SimpleJndiBeanFactory.java index 06bb11db5b5..25249087720 100644 --- a/spring-context/src/main/java/org/springframework/jndi/support/SimpleJndiBeanFactory.java +++ b/spring-context/src/main/java/org/springframework/jndi/support/SimpleJndiBeanFactory.java @@ -44,7 +44,7 @@ import org.springframework.lang.Nullable; * the {@link org.springframework.beans.factory.ListableBeanFactory} interface. * *

This factory resolves given bean names as JNDI names within the - * Java EE application's "java:comp/env/" namespace. It caches the resolved + * Jakarta EE application's "java:comp/env/" namespace. It caches the resolved * types for all obtained objects, and optionally also caches shareable * objects (if they are explicitly marked as * {@link #addShareableResource shareable resource}. diff --git a/spring-context/src/main/java/org/springframework/scheduling/TaskScheduler.java b/spring-context/src/main/java/org/springframework/scheduling/TaskScheduler.java index 326923d10d4..ad81312237e 100644 --- a/spring-context/src/main/java/org/springframework/scheduling/TaskScheduler.java +++ b/spring-context/src/main/java/org/springframework/scheduling/TaskScheduler.java @@ -39,7 +39,7 @@ import org.springframework.lang.Nullable; * and adding extended trigger capabilities. * *

This interface is roughly equivalent to a JSR-236 - * {@code ManagedScheduledExecutorService} as supported in Java EE 7 + * {@code ManagedScheduledExecutorService} as supported in Jakarta EE * environments but aligned with Spring's {@code TaskExecutor} model. * * @author Juergen Hoeller diff --git a/spring-context/src/main/java/org/springframework/scheduling/annotation/Async.java b/spring-context/src/main/java/org/springframework/scheduling/annotation/Async.java index 496afa98119..40e572f0e8c 100644 --- a/spring-context/src/main/java/org/springframework/scheduling/annotation/Async.java +++ b/spring-context/src/main/java/org/springframework/scheduling/annotation/Async.java @@ -41,7 +41,7 @@ import java.lang.annotation.Target; * {@code Future} that can be used to track the result of the asynchronous method * execution. However, since the target method needs to implement the same signature, * it will have to return a temporary {@code Future} handle that just passes a value - * through: e.g. Spring's {@link AsyncResult}, EJB 3.1's {@link javax.ejb.AsyncResult}, + * through: e.g. Spring's {@link AsyncResult}, EJB 3.1's {@link jakarta.ejb.AsyncResult}, * or {@link java.util.concurrent.CompletableFuture#completedFuture(Object)}. * * @author Juergen Hoeller diff --git a/spring-context/src/main/java/org/springframework/scheduling/annotation/AsyncAnnotationAdvisor.java b/spring-context/src/main/java/org/springframework/scheduling/annotation/AsyncAnnotationAdvisor.java index c5636f2daa0..9b97ccfa6ec 100644 --- a/spring-context/src/main/java/org/springframework/scheduling/annotation/AsyncAnnotationAdvisor.java +++ b/spring-context/src/main/java/org/springframework/scheduling/annotation/AsyncAnnotationAdvisor.java @@ -42,7 +42,7 @@ import org.springframework.util.function.SingletonSupplier; * annotation. This annotation can be used at the method and type level in * implementation classes as well as in service interfaces. * - *

This advisor detects the EJB 3.1 {@code javax.ejb.Asynchronous} + *

This advisor detects the EJB 3.1 {@code jakarta.ejb.Asynchronous} * annotation as well, treating it exactly like Spring's own {@code Async}. * Furthermore, a custom async annotation type may get specified through the * {@link #setAsyncAnnotationType "asyncAnnotationType"} property. @@ -99,7 +99,7 @@ public class AsyncAnnotationAdvisor extends AbstractPointcutAdvisor implements B asyncAnnotationTypes.add(Async.class); try { asyncAnnotationTypes.add((Class) - ClassUtils.forName("javax.ejb.Asynchronous", AsyncAnnotationAdvisor.class.getClassLoader())); + ClassUtils.forName("jakarta.ejb.Asynchronous", AsyncAnnotationAdvisor.class.getClassLoader())); } catch (ClassNotFoundException ex) { // If EJB 3.1 API not present, simply ignore. @@ -112,7 +112,7 @@ public class AsyncAnnotationAdvisor extends AbstractPointcutAdvisor implements B /** * Set the 'async' annotation type. *

The default async annotation type is the {@link Async} annotation, as well - * as the EJB 3.1 {@code javax.ejb.Asynchronous} annotation (if present). + * as the EJB 3.1 {@code jakarta.ejb.Asynchronous} annotation (if present). *

This setter property exists so that developers can provide their own * (non-Spring-specific) annotation type to indicate that a method is to * be executed asynchronously. diff --git a/spring-context/src/main/java/org/springframework/scheduling/annotation/AsyncAnnotationBeanPostProcessor.java b/spring-context/src/main/java/org/springframework/scheduling/annotation/AsyncAnnotationBeanPostProcessor.java index 1e7d9bb4930..54d66d2f8be 100644 --- a/spring-context/src/main/java/org/springframework/scheduling/annotation/AsyncAnnotationBeanPostProcessor.java +++ b/spring-context/src/main/java/org/springframework/scheduling/annotation/AsyncAnnotationBeanPostProcessor.java @@ -42,7 +42,7 @@ import org.springframework.util.function.SingletonSupplier; * be provided as well as the annotation type that indicates a method should be * invoked asynchronously. If no annotation type is specified, this post- * processor will detect both Spring's {@link Async @Async} annotation as well - * as the EJB 3.1 {@code javax.ejb.Asynchronous} annotation. + * as the EJB 3.1 {@code jakarta.ejb.Asynchronous} annotation. * *

For methods having a {@code void} return type, any exception thrown * during the asynchronous method invocation cannot be accessed by the @@ -130,7 +130,7 @@ public class AsyncAnnotationBeanPostProcessor extends AbstractBeanFactoryAwareAd /** * Set the 'async' annotation type to be detected at either class or method * level. By default, both the {@link Async} annotation and the EJB 3.1 - * {@code javax.ejb.Asynchronous} annotation will be detected. + * {@code jakarta.ejb.Asynchronous} annotation will be detected. *

This setter property exists so that developers can provide their own * (non-Spring-specific) annotation type to indicate that a method (or all * methods of a given class) should be invoked asynchronously. diff --git a/spring-context/src/main/java/org/springframework/scheduling/annotation/EnableAsync.java b/spring-context/src/main/java/org/springframework/scheduling/annotation/EnableAsync.java index 71f3f03c6dc..5e394ae7c75 100644 --- a/spring-context/src/main/java/org/springframework/scheduling/annotation/EnableAsync.java +++ b/spring-context/src/main/java/org/springframework/scheduling/annotation/EnableAsync.java @@ -43,7 +43,7 @@ import org.springframework.core.Ordered; * } * * {@code MyAsyncBean} is a user-defined type with one or more methods annotated with - * either Spring's {@code @Async} annotation, the EJB 3.1 {@code @javax.ejb.Asynchronous} + * either Spring's {@code @Async} annotation, the EJB 3.1 {@code @jakarta.ejb.Asynchronous} * annotation, or any custom annotation specified via the {@link #annotation} attribute. * The aspect is added transparently for any registered bean, for instance via this * configuration: @@ -166,7 +166,7 @@ public @interface EnableAsync { * Indicate the 'async' annotation type to be detected at either class * or method level. *

By default, both Spring's @{@link Async} annotation and the EJB 3.1 - * {@code @javax.ejb.Asynchronous} annotation will be detected. + * {@code @jakarta.ejb.Asynchronous} annotation will be detected. *

This attribute exists so that developers can provide their own * custom annotation type to indicate that a method (or all methods of * a given class) should be invoked asynchronously. diff --git a/spring-context/src/main/java/org/springframework/scheduling/concurrent/ConcurrentTaskExecutor.java b/spring-context/src/main/java/org/springframework/scheduling/concurrent/ConcurrentTaskExecutor.java index 0b976d3f00a..1161c453303 100644 --- a/spring-context/src/main/java/org/springframework/scheduling/concurrent/ConcurrentTaskExecutor.java +++ b/spring-context/src/main/java/org/springframework/scheduling/concurrent/ConcurrentTaskExecutor.java @@ -23,8 +23,8 @@ import java.util.concurrent.Executor; import java.util.concurrent.Executors; import java.util.concurrent.Future; -import javax.enterprise.concurrent.ManagedExecutors; -import javax.enterprise.concurrent.ManagedTask; +import jakarta.enterprise.concurrent.ManagedExecutors; +import jakarta.enterprise.concurrent.ManagedTask; import org.springframework.core.task.AsyncListenableTaskExecutor; import org.springframework.core.task.TaskDecorator; @@ -41,11 +41,11 @@ import org.springframework.util.concurrent.ListenableFuture; * Also detects an extended {@code java.util.concurrent.ExecutorService}, adapting * the {@link org.springframework.core.task.AsyncTaskExecutor} interface accordingly. * - *

Autodetects a JSR-236 {@link javax.enterprise.concurrent.ManagedExecutorService} - * in order to expose {@link javax.enterprise.concurrent.ManagedTask} adapters for it, + *

Autodetects a JSR-236 {@link jakarta.enterprise.concurrent.ManagedExecutorService} + * in order to expose {@link jakarta.enterprise.concurrent.ManagedTask} adapters for it, * exposing a long-running hint based on {@link SchedulingAwareRunnable} and an identity * name based on the given Runnable/Callable's {@code toString()}. For JSR-236 style - * lookup in a Java EE 7 environment, consider using {@link DefaultManagedTaskExecutor}. + * lookup in a Jakarta EE environment, consider using {@link DefaultManagedTaskExecutor}. * *

Note that there is a pre-built {@link ThreadPoolTaskExecutor} that allows * for defining a {@link java.util.concurrent.ThreadPoolExecutor} in bean style, @@ -70,7 +70,7 @@ public class ConcurrentTaskExecutor implements AsyncListenableTaskExecutor, Sche static { try { managedExecutorServiceClass = ClassUtils.forName( - "javax.enterprise.concurrent.ManagedExecutorService", + "jakarta.enterprise.concurrent.ManagedExecutorService", ConcurrentTaskScheduler.class.getClassLoader()); } catch (ClassNotFoundException ex) { @@ -95,8 +95,8 @@ public class ConcurrentTaskExecutor implements AsyncListenableTaskExecutor, Sche /** * Create a new ConcurrentTaskExecutor, using the given {@link java.util.concurrent.Executor}. - *

Autodetects a JSR-236 {@link javax.enterprise.concurrent.ManagedExecutorService} - * in order to expose {@link javax.enterprise.concurrent.ManagedTask} adapters for it. + *

Autodetects a JSR-236 {@link jakarta.enterprise.concurrent.ManagedExecutorService} + * in order to expose {@link jakarta.enterprise.concurrent.ManagedTask} adapters for it. * @param executor the {@link java.util.concurrent.Executor} to delegate to */ public ConcurrentTaskExecutor(@Nullable Executor executor) { @@ -107,8 +107,8 @@ public class ConcurrentTaskExecutor implements AsyncListenableTaskExecutor, Sche /** * Specify the {@link java.util.concurrent.Executor} to delegate to. - *

Autodetects a JSR-236 {@link javax.enterprise.concurrent.ManagedExecutorService} - * in order to expose {@link javax.enterprise.concurrent.ManagedTask} adapters for it. + *

Autodetects a JSR-236 {@link jakarta.enterprise.concurrent.ManagedExecutorService} + * in order to expose {@link jakarta.enterprise.concurrent.ManagedTask} adapters for it. */ public final void setConcurrentExecutor(@Nullable Executor executor) { this.concurrentExecutor = (executor != null ? executor : Executors.newSingleThreadExecutor()); diff --git a/spring-context/src/main/java/org/springframework/scheduling/concurrent/ConcurrentTaskScheduler.java b/spring-context/src/main/java/org/springframework/scheduling/concurrent/ConcurrentTaskScheduler.java index 887c3f59651..ca16b976e17 100644 --- a/spring-context/src/main/java/org/springframework/scheduling/concurrent/ConcurrentTaskScheduler.java +++ b/spring-context/src/main/java/org/springframework/scheduling/concurrent/ConcurrentTaskScheduler.java @@ -25,8 +25,8 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; -import javax.enterprise.concurrent.LastExecution; -import javax.enterprise.concurrent.ManagedScheduledExecutorService; +import jakarta.enterprise.concurrent.LastExecution; +import jakarta.enterprise.concurrent.ManagedScheduledExecutorService; import org.springframework.core.task.TaskRejectedException; import org.springframework.lang.Nullable; @@ -44,11 +44,11 @@ import org.springframework.util.ErrorHandler; * Extends {@link ConcurrentTaskExecutor} in order to implement the * {@link org.springframework.scheduling.SchedulingTaskExecutor} interface as well. * - *

Autodetects a JSR-236 {@link javax.enterprise.concurrent.ManagedScheduledExecutorService} + *

Autodetects a JSR-236 {@link jakarta.enterprise.concurrent.ManagedScheduledExecutorService} * in order to use it for trigger-based scheduling if possible, instead of Spring's * local trigger management which ends up delegating to regular delay-based scheduling * against the {@code java.util.concurrent.ScheduledExecutorService} API. For JSR-236 style - * lookup in a Java EE 7 environment, consider using {@link DefaultManagedTaskScheduler}. + * lookup in a Jakarta EE environment, consider using {@link DefaultManagedTaskScheduler}. * *

Note that there is a pre-built {@link ThreadPoolTaskScheduler} that allows for * defining a {@link java.util.concurrent.ScheduledThreadPoolExecutor} in bean style, @@ -73,7 +73,7 @@ public class ConcurrentTaskScheduler extends ConcurrentTaskExecutor implements T static { try { managedScheduledExecutorServiceClass = ClassUtils.forName( - "javax.enterprise.concurrent.ManagedScheduledExecutorService", + "jakarta.enterprise.concurrent.ManagedScheduledExecutorService", ConcurrentTaskScheduler.class.getClassLoader()); } catch (ClassNotFoundException ex) { @@ -106,7 +106,7 @@ public class ConcurrentTaskScheduler extends ConcurrentTaskExecutor implements T /** * Create a new ConcurrentTaskScheduler, using the given * {@link java.util.concurrent.ScheduledExecutorService} as shared delegate. - *

Autodetects a JSR-236 {@link javax.enterprise.concurrent.ManagedScheduledExecutorService} + *

Autodetects a JSR-236 {@link jakarta.enterprise.concurrent.ManagedScheduledExecutorService} * in order to use it for trigger-based scheduling if possible, * instead of Spring's local trigger management. * @param scheduledExecutor the {@link java.util.concurrent.ScheduledExecutorService} @@ -121,7 +121,7 @@ public class ConcurrentTaskScheduler extends ConcurrentTaskExecutor implements T /** * Create a new ConcurrentTaskScheduler, using the given {@link java.util.concurrent.Executor} * and {@link java.util.concurrent.ScheduledExecutorService} as delegates. - *

Autodetects a JSR-236 {@link javax.enterprise.concurrent.ManagedScheduledExecutorService} + *

Autodetects a JSR-236 {@link jakarta.enterprise.concurrent.ManagedScheduledExecutorService} * in order to use it for trigger-based scheduling if possible, * instead of Spring's local trigger management. * @param concurrentExecutor the {@link java.util.concurrent.Executor} to delegate to @@ -150,7 +150,7 @@ public class ConcurrentTaskScheduler extends ConcurrentTaskExecutor implements T /** * Specify the {@link java.util.concurrent.ScheduledExecutorService} to delegate to. - *

Autodetects a JSR-236 {@link javax.enterprise.concurrent.ManagedScheduledExecutorService} + *

Autodetects a JSR-236 {@link jakarta.enterprise.concurrent.ManagedScheduledExecutorService} * in order to use it for trigger-based scheduling if possible, * instead of Spring's local trigger management. *

Note: This will only apply to {@link TaskScheduler} invocations. @@ -275,7 +275,7 @@ public class ConcurrentTaskScheduler extends ConcurrentTaskExecutor implements T public ScheduledFuture schedule(Runnable task, final Trigger trigger) { ManagedScheduledExecutorService executor = (ManagedScheduledExecutorService) scheduledExecutor; - return executor.schedule(task, new javax.enterprise.concurrent.Trigger() { + return executor.schedule(task, new jakarta.enterprise.concurrent.Trigger() { @Override @Nullable public Date getNextRunTime(@Nullable LastExecution le, Date taskScheduledTime) { diff --git a/spring-context/src/main/java/org/springframework/scheduling/concurrent/DefaultManagedAwareThreadFactory.java b/spring-context/src/main/java/org/springframework/scheduling/concurrent/DefaultManagedAwareThreadFactory.java index ab187157836..d52b92ed759 100644 --- a/spring-context/src/main/java/org/springframework/scheduling/concurrent/DefaultManagedAwareThreadFactory.java +++ b/spring-context/src/main/java/org/springframework/scheduling/concurrent/DefaultManagedAwareThreadFactory.java @@ -31,10 +31,10 @@ import org.springframework.lang.Nullable; /** * JNDI-based variant of {@link CustomizableThreadFactory}, performing a default lookup - * for JSR-236's "java:comp/DefaultManagedThreadFactory" in a Java EE 7 environment, + * for JSR-236's "java:comp/DefaultManagedThreadFactory" in a Jakarta EE environment, * falling back to the local {@link CustomizableThreadFactory} setup if not found. * - *

This is a convenient way to use managed threads when running in a Java EE 7 + *

This is a convenient way to use managed threads when running in a Jakarta EE * environment, simply using regular local threads otherwise - without conditional * setup (i.e. without profiles). * @@ -77,7 +77,7 @@ public class DefaultManagedAwareThreadFactory extends CustomizableThreadFactory } /** - * Set whether the lookup occurs in a Java EE container, i.e. if the prefix + * Set whether the lookup occurs in a Jakarta EE container, i.e. if the prefix * "java:comp/env/" needs to be added if the JNDI name doesn't already * contain it. PersistenceAnnotationBeanPostProcessor's default is "true". * @see org.springframework.jndi.JndiLocatorSupport#setResourceRef diff --git a/spring-context/src/main/java/org/springframework/scheduling/concurrent/DefaultManagedTaskExecutor.java b/spring-context/src/main/java/org/springframework/scheduling/concurrent/DefaultManagedTaskExecutor.java index 62cb3dd9fb1..bf40a15f3dd 100644 --- a/spring-context/src/main/java/org/springframework/scheduling/concurrent/DefaultManagedTaskExecutor.java +++ b/spring-context/src/main/java/org/springframework/scheduling/concurrent/DefaultManagedTaskExecutor.java @@ -28,16 +28,16 @@ import org.springframework.lang.Nullable; /** * JNDI-based variant of {@link ConcurrentTaskExecutor}, performing a default lookup for - * JSR-236's "java:comp/DefaultManagedExecutorService" in a Java EE 7/8 environment. + * JSR-236's "java:comp/DefaultManagedExecutorService" in a Jakarta EE/8 environment. * *

Note: This class is not strictly JSR-236 based; it can work with any regular * {@link java.util.concurrent.Executor} that can be found in JNDI. - * The actual adapting to {@link javax.enterprise.concurrent.ManagedExecutorService} + * The actual adapting to {@link jakarta.enterprise.concurrent.ManagedExecutorService} * happens in the base class {@link ConcurrentTaskExecutor} itself. * * @author Juergen Hoeller * @since 4.0 - * @see javax.enterprise.concurrent.ManagedExecutorService + * @see jakarta.enterprise.concurrent.ManagedExecutorService */ public class DefaultManagedTaskExecutor extends ConcurrentTaskExecutor implements InitializingBean { @@ -64,7 +64,7 @@ public class DefaultManagedTaskExecutor extends ConcurrentTaskExecutor implement } /** - * Set whether the lookup occurs in a Java EE container, i.e. if the prefix + * Set whether the lookup occurs in a Jakarta EE container, i.e. if the prefix * "java:comp/env/" needs to be added if the JNDI name doesn't already * contain it. PersistenceAnnotationBeanPostProcessor's default is "true". * @see org.springframework.jndi.JndiLocatorSupport#setResourceRef diff --git a/spring-context/src/main/java/org/springframework/scheduling/concurrent/DefaultManagedTaskScheduler.java b/spring-context/src/main/java/org/springframework/scheduling/concurrent/DefaultManagedTaskScheduler.java index 133527ed771..b1845b563c1 100644 --- a/spring-context/src/main/java/org/springframework/scheduling/concurrent/DefaultManagedTaskScheduler.java +++ b/spring-context/src/main/java/org/springframework/scheduling/concurrent/DefaultManagedTaskScheduler.java @@ -28,16 +28,16 @@ import org.springframework.lang.Nullable; /** * JNDI-based variant of {@link ConcurrentTaskScheduler}, performing a default lookup for - * JSR-236's "java:comp/DefaultManagedScheduledExecutorService" in a Java EE 7 environment. + * JSR-236's "java:comp/DefaultManagedScheduledExecutorService" in a Jakarta EE environment. * *

Note: This class is not strictly JSR-236 based; it can work with any regular * {@link java.util.concurrent.ScheduledExecutorService} that can be found in JNDI. - * The actual adapting to {@link javax.enterprise.concurrent.ManagedScheduledExecutorService} + * The actual adapting to {@link jakarta.enterprise.concurrent.ManagedScheduledExecutorService} * happens in the base class {@link ConcurrentTaskScheduler} itself. * * @author Juergen Hoeller * @since 4.0 - * @see javax.enterprise.concurrent.ManagedScheduledExecutorService + * @see jakarta.enterprise.concurrent.ManagedScheduledExecutorService */ public class DefaultManagedTaskScheduler extends ConcurrentTaskScheduler implements InitializingBean { @@ -64,7 +64,7 @@ public class DefaultManagedTaskScheduler extends ConcurrentTaskScheduler impleme } /** - * Set whether the lookup occurs in a Java EE container, i.e. if the prefix + * Set whether the lookup occurs in a Jakarta EE container, i.e. if the prefix * "java:comp/env/" needs to be added if the JNDI name doesn't already * contain it. PersistenceAnnotationBeanPostProcessor's default is "true". * @see org.springframework.jndi.JndiLocatorSupport#setResourceRef diff --git a/spring-context/src/main/java/org/springframework/scheduling/concurrent/ExecutorConfigurationSupport.java b/spring-context/src/main/java/org/springframework/scheduling/concurrent/ExecutorConfigurationSupport.java index 559890ef509..dc9a249bdd9 100644 --- a/spring-context/src/main/java/org/springframework/scheduling/concurrent/ExecutorConfigurationSupport.java +++ b/spring-context/src/main/java/org/springframework/scheduling/concurrent/ExecutorConfigurationSupport.java @@ -71,7 +71,7 @@ public abstract class ExecutorConfigurationSupport extends CustomizableThreadFac /** * Set the ThreadFactory to use for the ExecutorService's thread pool. * Default is the underlying ExecutorService's default thread factory. - *

In a Java EE 7 or other managed environment with JSR-236 support, + *

In a Jakarta EE or other managed environment with JSR-236 support, * consider specifying a JNDI-located ManagedThreadFactory: by default, * to be found at "java:comp/DefaultManagedThreadFactory". * Use the "jee:jndi-lookup" namespace element in XML or the programmatic @@ -79,7 +79,7 @@ public abstract class ExecutorConfigurationSupport extends CustomizableThreadFac * Alternatively, consider using Spring's {@link DefaultManagedAwareThreadFactory} * with its fallback to local threads in case of no managed thread factory found. * @see java.util.concurrent.Executors#defaultThreadFactory() - * @see javax.enterprise.concurrent.ManagedThreadFactory + * @see jakarta.enterprise.concurrent.ManagedThreadFactory * @see DefaultManagedAwareThreadFactory */ public void setThreadFactory(@Nullable ThreadFactory threadFactory) { diff --git a/spring-context/src/main/java/org/springframework/scheduling/concurrent/package-info.java b/spring-context/src/main/java/org/springframework/scheduling/concurrent/package-info.java index a8ea96ee4ee..7caa0796d90 100644 --- a/spring-context/src/main/java/org/springframework/scheduling/concurrent/package-info.java +++ b/spring-context/src/main/java/org/springframework/scheduling/concurrent/package-info.java @@ -1,6 +1,6 @@ /** * Scheduling convenience classes for the {@code java.util.concurrent} - * and {@code javax.enterprise.concurrent} packages, allowing to set up a + * and {@code jakarta.enterprise.concurrent} packages, allowing to set up a * ThreadPoolExecutor or ScheduledThreadPoolExecutor as a bean in a Spring * context. Provides support for the native {@code java.util.concurrent} * interfaces as well as the Spring {@code TaskExecutor} mechanism. diff --git a/spring-context/src/main/java/org/springframework/stereotype/Repository.java b/spring-context/src/main/java/org/springframework/stereotype/Repository.java index 97cb1358080..68f668e80af 100644 --- a/spring-context/src/main/java/org/springframework/stereotype/Repository.java +++ b/spring-context/src/main/java/org/springframework/stereotype/Repository.java @@ -29,7 +29,7 @@ import org.springframework.core.annotation.AliasFor; * Domain-Driven Design (Evans, 2003) as "a mechanism for encapsulating storage, * retrieval, and search behavior which emulates a collection of objects". * - *

Teams implementing traditional Java EE patterns such as "Data Access Object" + *

Teams implementing traditional Jakarta EE patterns such as "Data Access Object" * may also apply this stereotype to DAO classes, though care should be taken to * understand the distinction between Data Access Object and DDD-style repositories * before doing so. This annotation is a general-purpose stereotype and individual teams diff --git a/spring-context/src/main/java/org/springframework/validation/ObjectError.java b/spring-context/src/main/java/org/springframework/validation/ObjectError.java index 227cd083952..0a02d714a76 100644 --- a/spring-context/src/main/java/org/springframework/validation/ObjectError.java +++ b/spring-context/src/main/java/org/springframework/validation/ObjectError.java @@ -76,7 +76,7 @@ public class ObjectError extends DefaultMessageSourceResolvable { /** * Preserve the source behind this error: possibly an {@link Exception} * (typically {@link org.springframework.beans.PropertyAccessException}) - * or a Bean Validation {@link javax.validation.ConstraintViolation}. + * or a Bean Validation {@link jakarta.validation.ConstraintViolation}. *

Note that any such source object is being stored as transient: * that is, it won't be part of a serialized error representation. * @param source the source object @@ -92,7 +92,7 @@ public class ObjectError extends DefaultMessageSourceResolvable { /** * Unwrap the source behind this error: possibly an {@link Exception} * (typically {@link org.springframework.beans.PropertyAccessException}) - * or a Bean Validation {@link javax.validation.ConstraintViolation}. + * or a Bean Validation {@link jakarta.validation.ConstraintViolation}. *

The cause of the outermost exception will be introspected as well, * e.g. the underlying conversion exception or exception thrown from a setter * (instead of having to unwrap the {@code PropertyAccessException} in turn). @@ -117,7 +117,7 @@ public class ObjectError extends DefaultMessageSourceResolvable { /** * Check the source behind this error: possibly an {@link Exception} * (typically {@link org.springframework.beans.PropertyAccessException}) - * or a Bean Validation {@link javax.validation.ConstraintViolation}. + * or a Bean Validation {@link jakarta.validation.ConstraintViolation}. *

The cause of the outermost exception will be introspected as well, * e.g. the underlying conversion exception or exception thrown from a setter * (instead of having to unwrap the {@code PropertyAccessException} in turn). diff --git a/spring-context/src/main/java/org/springframework/validation/SmartValidator.java b/spring-context/src/main/java/org/springframework/validation/SmartValidator.java index 4cc17002964..36ad9f588d6 100644 --- a/spring-context/src/main/java/org/springframework/validation/SmartValidator.java +++ b/spring-context/src/main/java/org/springframework/validation/SmartValidator.java @@ -42,7 +42,7 @@ public interface SmartValidator extends Validator { * @param target the object that is to be validated * @param errors contextual state about the validation process * @param validationHints one or more hint objects to be passed to the validation engine - * @see javax.validation.Validator#validate(Object, Class[]) + * @see jakarta.validation.Validator#validate(Object, Class[]) */ void validate(Object target, Errors errors, Object... validationHints); @@ -56,7 +56,7 @@ public interface SmartValidator extends Validator { * @param errors contextual state about the validation process * @param validationHints one or more hint objects to be passed to the validation engine * @since 5.1 - * @see javax.validation.Validator#validateValue(Class, String, Object, Class[]) + * @see jakarta.validation.Validator#validateValue(Class, String, Object, Class[]) */ default void validateValue( Class targetType, String fieldName, @Nullable Object value, Errors errors, Object... validationHints) { diff --git a/spring-context/src/main/java/org/springframework/validation/annotation/Validated.java b/spring-context/src/main/java/org/springframework/validation/annotation/Validated.java index a5939a3b16d..02a651ac8fe 100644 --- a/spring-context/src/main/java/org/springframework/validation/annotation/Validated.java +++ b/spring-context/src/main/java/org/springframework/validation/annotation/Validated.java @@ -23,7 +23,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** - * Variant of JSR-303's {@link javax.validation.Valid}, supporting the + * Variant of JSR-303's {@link jakarta.validation.Valid}, supporting the * specification of validation groups. Designed for convenient use with * Spring's JSR-303 support but not JSR-303 specific. * @@ -43,7 +43,7 @@ import java.lang.annotation.Target; * * @author Juergen Hoeller * @since 3.1 - * @see javax.validation.Validator#validate(Object, Class[]) + * @see jakarta.validation.Validator#validate(Object, Class[]) * @see org.springframework.validation.SmartValidator#validate(Object, org.springframework.validation.Errors, Object...) * @see org.springframework.validation.beanvalidation.SpringValidatorAdapter * @see org.springframework.validation.beanvalidation.MethodValidationPostProcessor diff --git a/spring-context/src/main/java/org/springframework/validation/annotation/ValidationAnnotationUtils.java b/spring-context/src/main/java/org/springframework/validation/annotation/ValidationAnnotationUtils.java index 196f6fc6c74..a5309bcb02c 100644 --- a/spring-context/src/main/java/org/springframework/validation/annotation/ValidationAnnotationUtils.java +++ b/spring-context/src/main/java/org/springframework/validation/annotation/ValidationAnnotationUtils.java @@ -34,7 +34,7 @@ public abstract class ValidationAnnotationUtils { /** * Determine any validation hints by the given annotation. - *

This implementation checks for {@code @javax.validation.Valid}, + *

This implementation checks for {@code @jakarta.validation.Valid}, * Spring's {@link org.springframework.validation.annotation.Validated}, * and custom annotations whose name starts with "Valid". * @param ann the annotation (potentially a validation annotation) @@ -45,7 +45,7 @@ public abstract class ValidationAnnotationUtils { public static Object[] determineValidationHints(Annotation ann) { Class annotationType = ann.annotationType(); String annotationName = annotationType.getName(); - if ("javax.validation.Valid".equals(annotationName)) { + if ("jakarta.validation.Valid".equals(annotationName)) { return EMPTY_OBJECT_ARRAY; } Validated validatedAnn = AnnotationUtils.getAnnotation(ann, Validated.class); diff --git a/spring-context/src/main/java/org/springframework/validation/beanvalidation/BeanValidationPostProcessor.java b/spring-context/src/main/java/org/springframework/validation/beanvalidation/BeanValidationPostProcessor.java index 11dccd32aa9..77c7966a0ed 100644 --- a/spring-context/src/main/java/org/springframework/validation/beanvalidation/BeanValidationPostProcessor.java +++ b/spring-context/src/main/java/org/springframework/validation/beanvalidation/BeanValidationPostProcessor.java @@ -19,10 +19,10 @@ package org.springframework.validation.beanvalidation; import java.util.Iterator; import java.util.Set; -import javax.validation.ConstraintViolation; -import javax.validation.Validation; -import javax.validation.Validator; -import javax.validation.ValidatorFactory; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validation; +import jakarta.validation.Validator; +import jakarta.validation.ValidatorFactory; import org.springframework.aop.framework.AopProxyUtils; import org.springframework.beans.BeansException; @@ -60,7 +60,7 @@ public class BeanValidationPostProcessor implements BeanPostProcessor, Initializ * Set the JSR-303 ValidatorFactory to delegate to for validating beans, * using its default Validator. *

Default is the default ValidatorFactory's default Validator. - * @see javax.validation.ValidatorFactory#getValidator() + * @see jakarta.validation.ValidatorFactory#getValidator() */ public void setValidatorFactory(ValidatorFactory validatorFactory) { this.validator = validatorFactory.getValidator(); @@ -105,7 +105,7 @@ public class BeanValidationPostProcessor implements BeanPostProcessor, Initializ /** * Perform validation of the given bean. * @param bean the bean instance to validate - * @see javax.validation.Validator#validate + * @see jakarta.validation.Validator#validate */ protected void doValidate(Object bean) { Assert.state(this.validator != null, "No Validator set"); diff --git a/spring-context/src/main/java/org/springframework/validation/beanvalidation/CustomValidatorBean.java b/spring-context/src/main/java/org/springframework/validation/beanvalidation/CustomValidatorBean.java index b9c074fb24e..37800c7df5f 100644 --- a/spring-context/src/main/java/org/springframework/validation/beanvalidation/CustomValidatorBean.java +++ b/spring-context/src/main/java/org/springframework/validation/beanvalidation/CustomValidatorBean.java @@ -16,12 +16,12 @@ package org.springframework.validation.beanvalidation; -import javax.validation.MessageInterpolator; -import javax.validation.TraversableResolver; -import javax.validation.Validation; -import javax.validation.Validator; -import javax.validation.ValidatorContext; -import javax.validation.ValidatorFactory; +import jakarta.validation.MessageInterpolator; +import jakarta.validation.TraversableResolver; +import jakarta.validation.Validation; +import jakarta.validation.Validator; +import jakarta.validation.ValidatorContext; +import jakarta.validation.ValidatorFactory; import org.springframework.beans.factory.InitializingBean; import org.springframework.lang.Nullable; @@ -48,7 +48,7 @@ public class CustomValidatorBean extends SpringValidatorAdapter implements Valid /** * Set the ValidatorFactory to obtain the target Validator from. - *

Default is {@link javax.validation.Validation#buildDefaultValidatorFactory()}. + *

Default is {@link jakarta.validation.Validation#buildDefaultValidatorFactory()}. */ public void setValidatorFactory(ValidatorFactory validatorFactory) { this.validatorFactory = validatorFactory; diff --git a/spring-context/src/main/java/org/springframework/validation/beanvalidation/LocalValidatorFactoryBean.java b/spring-context/src/main/java/org/springframework/validation/beanvalidation/LocalValidatorFactoryBean.java index 73ec646bead..58bc3c2f60e 100644 --- a/spring-context/src/main/java/org/springframework/validation/beanvalidation/LocalValidatorFactoryBean.java +++ b/spring-context/src/main/java/org/springframework/validation/beanvalidation/LocalValidatorFactoryBean.java @@ -27,20 +27,20 @@ import java.util.List; import java.util.Map; import java.util.Properties; -import javax.validation.Configuration; -import javax.validation.ConstraintValidatorFactory; -import javax.validation.MessageInterpolator; -import javax.validation.ParameterNameProvider; -import javax.validation.TraversableResolver; -import javax.validation.Validation; -import javax.validation.ValidationException; -import javax.validation.ValidationProviderResolver; -import javax.validation.Validator; -import javax.validation.ValidatorContext; -import javax.validation.ValidatorFactory; -import javax.validation.bootstrap.GenericBootstrap; -import javax.validation.bootstrap.ProviderSpecificBootstrap; - +import jakarta.validation.ClockProvider; +import jakarta.validation.Configuration; +import jakarta.validation.ConstraintValidatorFactory; +import jakarta.validation.MessageInterpolator; +import jakarta.validation.ParameterNameProvider; +import jakarta.validation.TraversableResolver; +import jakarta.validation.Validation; +import jakarta.validation.ValidationException; +import jakarta.validation.ValidationProviderResolver; +import jakarta.validation.Validator; +import jakarta.validation.ValidatorContext; +import jakarta.validation.ValidatorFactory; +import jakarta.validation.bootstrap.GenericBootstrap; +import jakarta.validation.bootstrap.ProviderSpecificBootstrap; import org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator; import org.springframework.beans.factory.DisposableBean; @@ -57,11 +57,11 @@ import org.springframework.util.CollectionUtils; import org.springframework.util.ReflectionUtils; /** - * This is the central class for {@code javax.validation} (JSR-303) setup in a Spring - * application context: It bootstraps a {@code javax.validation.ValidationFactory} and + * This is the central class for {@code jakarta.validation} (JSR-303) setup in a Spring + * application context: It bootstraps a {@code jakarta.validation.ValidationFactory} and * exposes it through the Spring {@link org.springframework.validation.Validator} interface - * as well as through the JSR-303 {@link javax.validation.Validator} interface and the - * {@link javax.validation.ValidatorFactory} interface itself. + * as well as through the JSR-303 {@link jakarta.validation.Validator} interface and the + * {@link jakarta.validation.ValidatorFactory} interface itself. * *

When talking to an instance of this bean through the Spring or JSR-303 Validator interfaces, * you'll be talking to the default Validator of the underlying ValidatorFactory. This is very @@ -69,22 +69,15 @@ import org.springframework.util.ReflectionUtils; * you will almost always use the default Validator anyway. This can also be injected directly * into any target dependency of type {@link org.springframework.validation.Validator}! * - *

As of Spring 5.0, this class requires Bean Validation 1.1+, with special support - * for Hibernate Validator 5.x (see {@link #setValidationMessageSource}). - * This class is also runtime-compatible with Bean Validation 2.0 and Hibernate Validator 6.0, - * with one special note: If you'd like to call BV 2.0's {@code getClockProvider()} method, - * obtain the native {@code ValidatorFactory} through {@code #unwrap(ValidatorFactory.class)} - * and call the {@code getClockProvider()} method on the returned native reference there. - * *

This class is also being used by Spring's MVC configuration namespace, in case of the - * {@code javax.validation} API being present but no explicit Validator having been configured. + * {@code jakarta.validation} API being present but no explicit Validator having been configured. * * @author Juergen Hoeller * @since 3.0 - * @see javax.validation.ValidatorFactory - * @see javax.validation.Validator - * @see javax.validation.Validation#buildDefaultValidatorFactory() - * @see javax.validation.ValidatorFactory#getValidator() + * @see jakarta.validation.ValidatorFactory + * @see jakarta.validation.Validator + * @see jakarta.validation.Validation#buildDefaultValidatorFactory() + * @see jakarta.validation.ValidatorFactory#getValidator() */ public class LocalValidatorFactoryBean extends SpringValidatorAdapter implements ValidatorFactory, ApplicationContextAware, InitializingBean, DisposableBean { @@ -123,8 +116,8 @@ public class LocalValidatorFactoryBean extends SpringValidatorAdapter /** * Specify the desired provider class, if any. *

If not specified, JSR-303's default search mechanism will be used. - * @see javax.validation.Validation#byProvider(Class) - * @see javax.validation.Validation#byDefaultProvider() + * @see jakarta.validation.Validation#byProvider(Class) + * @see jakarta.validation.Validation#byDefaultProvider() */ @SuppressWarnings("rawtypes") public void setProviderClass(Class providerClass) { @@ -208,7 +201,7 @@ public class LocalValidatorFactoryBean extends SpringValidatorAdapter * Specify bean validation properties to be passed to the validation provider. *

Can be populated with a String "value" (parsed via PropertiesEditor) * or a "props" element in XML bean definitions. - * @see javax.validation.Configuration#addProperty(String, String) + * @see jakarta.validation.Configuration#addProperty(String, String) */ public void setValidationProperties(Properties jpaProperties) { CollectionUtils.mergePropertiesIntoMap(jpaProperties, this.validationPropertyMap); @@ -217,7 +210,7 @@ public class LocalValidatorFactoryBean extends SpringValidatorAdapter /** * Specify bean validation properties to be passed to the validation provider as a Map. *

Can be populated with a "map" or "props" element in XML bean definitions. - * @see javax.validation.Configuration#addProperty(String, String) + * @see jakarta.validation.Configuration#addProperty(String, String) */ public void setValidationPropertyMap(@Nullable Map validationProperties) { if (validationProperties != null) { @@ -400,18 +393,11 @@ public class LocalValidatorFactoryBean extends SpringValidatorAdapter return this.validatorFactory.getParameterNameProvider(); } - // Bean Validation 2.0: currently not implemented here since it would imply - // a hard dependency on the new javax.validation.ClockProvider interface. - // To be resolved once Spring Framework requires Bean Validation 2.0+. - // Obtain the native ValidatorFactory through unwrap(ValidatorFactory.class) - // instead which will fully support a getClockProvider() call as well. - /* @Override - public javax.validation.ClockProvider getClockProvider() { + public ClockProvider getClockProvider() { Assert.notNull(this.validatorFactory, "No target ValidatorFactory set"); return this.validatorFactory.getClockProvider(); } - */ @Override @SuppressWarnings("unchecked") diff --git a/spring-context/src/main/java/org/springframework/validation/beanvalidation/LocaleContextMessageInterpolator.java b/spring-context/src/main/java/org/springframework/validation/beanvalidation/LocaleContextMessageInterpolator.java index 40854bc3b1d..0a97ba2c780 100644 --- a/spring-context/src/main/java/org/springframework/validation/beanvalidation/LocaleContextMessageInterpolator.java +++ b/spring-context/src/main/java/org/springframework/validation/beanvalidation/LocaleContextMessageInterpolator.java @@ -18,7 +18,7 @@ package org.springframework.validation.beanvalidation; import java.util.Locale; -import javax.validation.MessageInterpolator; +import jakarta.validation.MessageInterpolator; import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.util.Assert; diff --git a/spring-context/src/main/java/org/springframework/validation/beanvalidation/MethodValidationInterceptor.java b/spring-context/src/main/java/org/springframework/validation/beanvalidation/MethodValidationInterceptor.java index 8baf92adbfc..6e68a740583 100644 --- a/spring-context/src/main/java/org/springframework/validation/beanvalidation/MethodValidationInterceptor.java +++ b/spring-context/src/main/java/org/springframework/validation/beanvalidation/MethodValidationInterceptor.java @@ -19,13 +19,12 @@ package org.springframework.validation.beanvalidation; import java.lang.reflect.Method; import java.util.Set; -import javax.validation.ConstraintViolation; -import javax.validation.ConstraintViolationException; -import javax.validation.Validation; -import javax.validation.Validator; -import javax.validation.ValidatorFactory; -import javax.validation.executable.ExecutableValidator; - +import jakarta.validation.ConstraintViolation; +import jakarta.validation.ConstraintViolationException; +import jakarta.validation.Validation; +import jakarta.validation.Validator; +import jakarta.validation.ValidatorFactory; +import jakarta.validation.executable.ExecutableValidator; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; @@ -57,7 +56,7 @@ import org.springframework.validation.annotation.Validated; * @author Juergen Hoeller * @since 3.1 * @see MethodValidationPostProcessor - * @see javax.validation.executable.ExecutableValidator + * @see jakarta.validation.executable.ExecutableValidator */ public class MethodValidationInterceptor implements MethodInterceptor { diff --git a/spring-context/src/main/java/org/springframework/validation/beanvalidation/MethodValidationPostProcessor.java b/spring-context/src/main/java/org/springframework/validation/beanvalidation/MethodValidationPostProcessor.java index 45e5d13a5fb..e24c9a02288 100644 --- a/spring-context/src/main/java/org/springframework/validation/beanvalidation/MethodValidationPostProcessor.java +++ b/spring-context/src/main/java/org/springframework/validation/beanvalidation/MethodValidationPostProcessor.java @@ -18,9 +18,8 @@ package org.springframework.validation.beanvalidation; import java.lang.annotation.Annotation; -import javax.validation.Validator; -import javax.validation.ValidatorFactory; - +import jakarta.validation.Validator; +import jakarta.validation.ValidatorFactory; import org.aopalliance.aop.Advice; import org.springframework.aop.Pointcut; @@ -55,7 +54,7 @@ import org.springframework.validation.annotation.Validated; * @author Juergen Hoeller * @since 3.1 * @see MethodValidationInterceptor - * @see javax.validation.executable.ExecutableValidator + * @see jakarta.validation.executable.ExecutableValidator */ @SuppressWarnings("serial") public class MethodValidationPostProcessor extends AbstractBeanFactoryAwareAdvisingPostProcessor @@ -101,7 +100,7 @@ public class MethodValidationPostProcessor extends AbstractBeanFactoryAwareAdvis * Set the JSR-303 ValidatorFactory to delegate to for validating methods, * using its default Validator. *

Default is the default ValidatorFactory's default Validator. - * @see javax.validation.ValidatorFactory#getValidator() + * @see jakarta.validation.ValidatorFactory#getValidator() */ public void setValidatorFactory(ValidatorFactory validatorFactory) { this.validator = validatorFactory.getValidator(); diff --git a/spring-context/src/main/java/org/springframework/validation/beanvalidation/OptionalValidatorFactoryBean.java b/spring-context/src/main/java/org/springframework/validation/beanvalidation/OptionalValidatorFactoryBean.java index 6d306943b08..a2991e55633 100644 --- a/spring-context/src/main/java/org/springframework/validation/beanvalidation/OptionalValidatorFactoryBean.java +++ b/spring-context/src/main/java/org/springframework/validation/beanvalidation/OptionalValidatorFactoryBean.java @@ -16,8 +16,7 @@ package org.springframework.validation.beanvalidation; -import javax.validation.ValidationException; - +import jakarta.validation.ValidationException; import org.apache.commons.logging.LogFactory; /** @@ -26,7 +25,7 @@ import org.apache.commons.logging.LogFactory; * in case of no Bean Validation provider being available. * *

This is the actual class used by Spring's MVC configuration namespace, - * in case of the {@code javax.validation} API being present but no explicit + * in case of the {@code jakarta.validation} API being present but no explicit * Validator having been configured. * * @author Juergen Hoeller diff --git a/spring-context/src/main/java/org/springframework/validation/beanvalidation/SpringConstraintValidatorFactory.java b/spring-context/src/main/java/org/springframework/validation/beanvalidation/SpringConstraintValidatorFactory.java index 5b68f072835..f26a033a8ab 100644 --- a/spring-context/src/main/java/org/springframework/validation/beanvalidation/SpringConstraintValidatorFactory.java +++ b/spring-context/src/main/java/org/springframework/validation/beanvalidation/SpringConstraintValidatorFactory.java @@ -16,8 +16,8 @@ package org.springframework.validation.beanvalidation; -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorFactory; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorFactory; import org.springframework.beans.factory.config.AutowireCapableBeanFactory; import org.springframework.util.Assert; diff --git a/spring-context/src/main/java/org/springframework/validation/beanvalidation/SpringValidatorAdapter.java b/spring-context/src/main/java/org/springframework/validation/beanvalidation/SpringValidatorAdapter.java index cf41fed3b29..de02082dffe 100644 --- a/spring-context/src/main/java/org/springframework/validation/beanvalidation/SpringValidatorAdapter.java +++ b/spring-context/src/main/java/org/springframework/validation/beanvalidation/SpringValidatorAdapter.java @@ -25,13 +25,13 @@ import java.util.Map; import java.util.Set; import java.util.TreeMap; -import javax.validation.ConstraintViolation; -import javax.validation.ElementKind; -import javax.validation.Path; -import javax.validation.ValidationException; -import javax.validation.executable.ExecutableValidator; -import javax.validation.metadata.BeanDescriptor; -import javax.validation.metadata.ConstraintDescriptor; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.ElementKind; +import jakarta.validation.Path; +import jakarta.validation.ValidationException; +import jakarta.validation.executable.ExecutableValidator; +import jakarta.validation.metadata.BeanDescriptor; +import jakarta.validation.metadata.ConstraintDescriptor; import org.springframework.beans.NotReadablePropertyException; import org.springframework.context.MessageSourceResolvable; @@ -63,7 +63,7 @@ import org.springframework.validation.SmartValidator; * @see CustomValidatorBean * @see LocalValidatorFactoryBean */ -public class SpringValidatorAdapter implements SmartValidator, javax.validation.Validator { +public class SpringValidatorAdapter implements SmartValidator, jakarta.validation.Validator { private static final Set internalAnnotationAttributes = new HashSet<>(4); @@ -74,14 +74,14 @@ public class SpringValidatorAdapter implements SmartValidator, javax.validation. } @Nullable - private javax.validation.Validator targetValidator; + private jakarta.validation.Validator targetValidator; /** * Create a new SpringValidatorAdapter for the given JSR-303 Validator. * @param targetValidator the JSR-303 Validator to wrap */ - public SpringValidatorAdapter(javax.validation.Validator targetValidator) { + public SpringValidatorAdapter(jakarta.validation.Validator targetValidator) { Assert.notNull(targetValidator, "Target Validator must not be null"); this.targetValidator = targetValidator; } @@ -89,7 +89,7 @@ public class SpringValidatorAdapter implements SmartValidator, javax.validation. SpringValidatorAdapter() { } - void setTargetValidator(javax.validation.Validator targetValidator) { + void setTargetValidator(jakarta.validation.Validator targetValidator) { this.targetValidator = targetValidator; } @@ -199,7 +199,7 @@ public class SpringValidatorAdapter implements SmartValidator, javax.validation. * @param violation the current JSR-303 ConstraintViolation * @return the Spring-reported field (for use with {@link Errors}) * @since 4.2 - * @see javax.validation.ConstraintViolation#getPropertyPath() + * @see jakarta.validation.ConstraintViolation#getPropertyPath() * @see org.springframework.validation.FieldError#getField() */ protected String determineField(ConstraintViolation violation) { @@ -239,7 +239,7 @@ public class SpringValidatorAdapter implements SmartValidator, javax.validation. * @param descriptor the JSR-303 ConstraintDescriptor for the current violation * @return a corresponding error code (for use with {@link Errors}) * @since 4.2 - * @see javax.validation.metadata.ConstraintDescriptor#getAnnotation() + * @see jakarta.validation.metadata.ConstraintDescriptor#getAnnotation() * @see org.springframework.validation.MessageCodesResolver */ protected String determineErrorCode(ConstraintDescriptor descriptor) { @@ -305,7 +305,7 @@ public class SpringValidatorAdapter implements SmartValidator, javax.validation. * which contains the current field's value * @return the invalid value to expose as part of the field error * @since 4.2 - * @see javax.validation.ConstraintViolation#getInvalidValue() + * @see jakarta.validation.ConstraintViolation#getInvalidValue() * @see org.springframework.validation.FieldError#getRejectedValue() */ @Nullable @@ -387,7 +387,7 @@ public class SpringValidatorAdapter implements SmartValidator, javax.validation. } catch (ValidationException ex) { // Ignore if just being asked for plain JSR-303 Validator - if (javax.validation.Validator.class == type) { + if (jakarta.validation.Validator.class == type) { return (T) this.targetValidator; } throw ex; diff --git a/spring-context/src/main/resources/org/springframework/ejb/config/spring-jee.xsd b/spring-context/src/main/resources/org/springframework/ejb/config/spring-jee.xsd index ad681b198da..283e803db81 100644 --- a/spring-context/src/main/resources/org/springframework/ejb/config/spring-jee.xsd +++ b/spring-context/src/main/resources/org/springframework/ejb/config/spring-jee.xsd @@ -13,7 +13,7 @@ @@ -95,62 +95,23 @@ - + - - + - - - - - - - - - - - - - - - - - - - - - - - - + @@ -178,7 +139,7 @@ @@ -186,7 +147,7 @@ @@ -222,37 +183,6 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/spring-context/src/test/java/example/scannable/AutowiredQualifierFooService.java b/spring-context/src/test/java/example/scannable/AutowiredQualifierFooService.java index fc59dcf58d5..72232fb8311 100644 --- a/spring-context/src/test/java/example/scannable/AutowiredQualifierFooService.java +++ b/spring-context/src/test/java/example/scannable/AutowiredQualifierFooService.java @@ -18,7 +18,7 @@ package example.scannable; import java.util.concurrent.Future; -import javax.annotation.PostConstruct; +import jakarta.annotation.PostConstruct; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; diff --git a/spring-context/src/test/java/example/scannable/FooServiceImpl.java b/spring-context/src/test/java/example/scannable/FooServiceImpl.java index de062761fac..2b5425f8ecf 100644 --- a/spring-context/src/test/java/example/scannable/FooServiceImpl.java +++ b/spring-context/src/test/java/example/scannable/FooServiceImpl.java @@ -20,7 +20,7 @@ import java.util.Comparator; import java.util.List; import java.util.concurrent.Future; -import javax.annotation.PostConstruct; +import jakarta.annotation.PostConstruct; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.ListableBeanFactory; diff --git a/spring-context/src/test/java/org/springframework/beans/factory/annotation/BridgeMethodAutowiringTests.java b/spring-context/src/test/java/org/springframework/beans/factory/annotation/BridgeMethodAutowiringTests.java index 0be289d07b4..d0d555ca5b1 100644 --- a/spring-context/src/test/java/org/springframework/beans/factory/annotation/BridgeMethodAutowiringTests.java +++ b/spring-context/src/test/java/org/springframework/beans/factory/annotation/BridgeMethodAutowiringTests.java @@ -16,9 +16,8 @@ package org.springframework.beans.factory.annotation; -import javax.inject.Inject; -import javax.inject.Named; - +import jakarta.inject.Inject; +import jakarta.inject.Named; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.AnnotationConfigApplicationContext; diff --git a/spring-context/src/test/java/org/springframework/beans/factory/support/InjectAnnotationAutowireContextTests.java b/spring-context/src/test/java/org/springframework/beans/factory/support/InjectAnnotationAutowireContextTests.java index b36639ad7de..f2f3e2af9e1 100644 --- a/spring-context/src/test/java/org/springframework/beans/factory/support/InjectAnnotationAutowireContextTests.java +++ b/spring-context/src/test/java/org/springframework/beans/factory/support/InjectAnnotationAutowireContextTests.java @@ -21,10 +21,9 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import javax.inject.Inject; -import javax.inject.Named; -import javax.inject.Qualifier; - +import jakarta.inject.Inject; +import jakarta.inject.Named; +import jakarta.inject.Qualifier; import org.junit.jupiter.api.Test; import org.springframework.aop.scope.ScopedProxyUtils; @@ -40,7 +39,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; /** - * Integration tests for handling JSR-303 {@link javax.inject.Qualifier} annotations. + * Integration tests for handling JSR-303 {@link jakarta.inject.Qualifier} annotations. * * @author Juergen Hoeller * @since 3.0 diff --git a/spring-context/src/test/java/org/springframework/context/annotation/AutoProxyLazyInitTests.java b/spring-context/src/test/java/org/springframework/context/annotation/AutoProxyLazyInitTests.java index c73ddf7ad59..0f73a07a1fa 100644 --- a/spring-context/src/test/java/org/springframework/context/annotation/AutoProxyLazyInitTests.java +++ b/spring-context/src/test/java/org/springframework/context/annotation/AutoProxyLazyInitTests.java @@ -16,8 +16,7 @@ package org.springframework.context.annotation; -import javax.annotation.PreDestroy; - +import jakarta.annotation.PreDestroy; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-context/src/test/java/org/springframework/context/annotation/CommonAnnotationBeanPostProcessorTests.java b/spring-context/src/test/java/org/springframework/context/annotation/CommonAnnotationBeanPostProcessorTests.java index 3d300b71dbe..14ae10d2b31 100644 --- a/spring-context/src/test/java/org/springframework/context/annotation/CommonAnnotationBeanPostProcessorTests.java +++ b/spring-context/src/test/java/org/springframework/context/annotation/CommonAnnotationBeanPostProcessorTests.java @@ -18,11 +18,10 @@ package org.springframework.context.annotation; import java.util.Properties; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; -import javax.annotation.Resource; -import javax.ejb.EJB; - +import jakarta.annotation.PostConstruct; +import jakarta.annotation.PreDestroy; +import jakarta.annotation.Resource; +import jakarta.ejb.EJB; import org.junit.jupiter.api.Test; import org.springframework.beans.BeansException; diff --git a/spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostConstructAndAutowiringTests.java b/spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostConstructAndAutowiringTests.java index 0aaf4c00a06..a63a94be187 100644 --- a/spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostConstructAndAutowiringTests.java +++ b/spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostConstructAndAutowiringTests.java @@ -16,8 +16,7 @@ package org.springframework.context.annotation; -import javax.annotation.PostConstruct; - +import jakarta.annotation.PostConstruct; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; diff --git a/spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostProcessorTests.java b/spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostProcessorTests.java index 3b1f1a7f0dd..d8e78ee153f 100644 --- a/spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostProcessorTests.java +++ b/spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostProcessorTests.java @@ -23,8 +23,7 @@ import java.lang.annotation.Target; import java.util.List; import java.util.Map; -import javax.annotation.PostConstruct; - +import jakarta.annotation.PostConstruct; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-context/src/test/java/org/springframework/context/annotation/PrimitiveBeanLookupAndAutowiringTests.java b/spring-context/src/test/java/org/springframework/context/annotation/PrimitiveBeanLookupAndAutowiringTests.java index 31a2d7c631d..342573f7397 100644 --- a/spring-context/src/test/java/org/springframework/context/annotation/PrimitiveBeanLookupAndAutowiringTests.java +++ b/spring-context/src/test/java/org/springframework/context/annotation/PrimitiveBeanLookupAndAutowiringTests.java @@ -16,8 +16,7 @@ package org.springframework.context.annotation; -import javax.annotation.Resource; - +import jakarta.annotation.Resource; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; diff --git a/spring-context/src/test/java/org/springframework/context/annotation/PropertySourceAnnotationTests.java b/spring-context/src/test/java/org/springframework/context/annotation/PropertySourceAnnotationTests.java index faada752fdb..8b73c760ee1 100644 --- a/spring-context/src/test/java/org/springframework/context/annotation/PropertySourceAnnotationTests.java +++ b/spring-context/src/test/java/org/springframework/context/annotation/PropertySourceAnnotationTests.java @@ -26,8 +26,7 @@ import java.util.Collections; import java.util.Iterator; import java.util.Properties; -import javax.inject.Inject; - +import jakarta.inject.Inject; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.BeanDefinitionStoreException; diff --git a/spring-context/src/test/java/org/springframework/context/annotation/Spr3775InitDestroyLifecycleTests.java b/spring-context/src/test/java/org/springframework/context/annotation/Spr3775InitDestroyLifecycleTests.java index 0fb249595f4..82caf5254e9 100644 --- a/spring-context/src/test/java/org/springframework/context/annotation/Spr3775InitDestroyLifecycleTests.java +++ b/spring-context/src/test/java/org/springframework/context/annotation/Spr3775InitDestroyLifecycleTests.java @@ -20,9 +20,8 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - +import jakarta.annotation.PostConstruct; +import jakarta.annotation.PreDestroy; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.jupiter.api.Test; @@ -49,8 +48,8 @@ import static org.assertj.core.api.Assertions.assertThat; *
  • {@link InitializingBean} & {@link DisposableBean} interfaces
  • *
  • Custom {@link RootBeanDefinition#getInitMethodName() init} & * {@link RootBeanDefinition#getDestroyMethodName() destroy} methods
  • - *
  • JSR 250's {@link javax.annotation.PostConstruct @PostConstruct} & - * {@link javax.annotation.PreDestroy @PreDestroy} annotations
  • + *
  • JSR 250's {@link jakarta.annotation.PostConstruct @PostConstruct} & + * {@link jakarta.annotation.PreDestroy @PreDestroy} annotations
  • * * * @author Sam Brannen diff --git a/spring-context/src/test/java/org/springframework/context/annotation/configuration/AutowiredConfigurationTests.java b/spring-context/src/test/java/org/springframework/context/annotation/configuration/AutowiredConfigurationTests.java index fa905200256..2a8eca47d36 100644 --- a/spring-context/src/test/java/org/springframework/context/annotation/configuration/AutowiredConfigurationTests.java +++ b/spring-context/src/test/java/org/springframework/context/annotation/configuration/AutowiredConfigurationTests.java @@ -22,8 +22,7 @@ import java.lang.annotation.RetentionPolicy; import java.util.List; import java.util.Optional; -import javax.inject.Provider; - +import jakarta.inject.Provider; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.BeanFactory; diff --git a/spring-context/src/test/java/org/springframework/context/annotation/configuration/ConfigurationClassProcessingTests.java b/spring-context/src/test/java/org/springframework/context/annotation/configuration/ConfigurationClassProcessingTests.java index 89da3b91622..ddc5db678c6 100644 --- a/spring-context/src/test/java/org/springframework/context/annotation/configuration/ConfigurationClassProcessingTests.java +++ b/spring-context/src/test/java/org/springframework/context/annotation/configuration/ConfigurationClassProcessingTests.java @@ -22,9 +22,8 @@ import java.util.List; import java.util.Set; import java.util.function.Supplier; -import javax.annotation.Resource; -import javax.inject.Provider; - +import jakarta.annotation.Resource; +import jakarta.inject.Provider; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.BeanClassLoaderAware; diff --git a/spring-context/src/test/java/org/springframework/context/annotation/configuration/Spr12526Tests.java b/spring-context/src/test/java/org/springframework/context/annotation/configuration/Spr12526Tests.java index 8c069e16add..5c4f58d5063 100644 --- a/spring-context/src/test/java/org/springframework/context/annotation/configuration/Spr12526Tests.java +++ b/spring-context/src/test/java/org/springframework/context/annotation/configuration/Spr12526Tests.java @@ -16,8 +16,7 @@ package org.springframework.context.annotation.configuration; -import javax.annotation.Resource; - +import jakarta.annotation.Resource; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.AnnotationConfigApplicationContext; diff --git a/spring-context/src/test/java/org/springframework/context/annotation6/Jsr330NamedForScanning.java b/spring-context/src/test/java/org/springframework/context/annotation6/Jsr330NamedForScanning.java index d474a99d4a4..e84bad2a528 100644 --- a/spring-context/src/test/java/org/springframework/context/annotation6/Jsr330NamedForScanning.java +++ b/spring-context/src/test/java/org/springframework/context/annotation6/Jsr330NamedForScanning.java @@ -16,7 +16,7 @@ package org.springframework.context.annotation6; -import javax.inject.Named; +import jakarta.inject.Named; @Named public class Jsr330NamedForScanning { diff --git a/spring-context/src/test/java/org/springframework/context/event/AnnotationDrivenEventListenerTests.java b/spring-context/src/test/java/org/springframework/context/event/AnnotationDrivenEventListenerTests.java index c493f075b1a..8c51dd29420 100644 --- a/spring-context/src/test/java/org/springframework/context/event/AnnotationDrivenEventListenerTests.java +++ b/spring-context/src/test/java/org/springframework/context/event/AnnotationDrivenEventListenerTests.java @@ -30,9 +30,8 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import javax.annotation.PostConstruct; -import javax.inject.Inject; - +import jakarta.annotation.PostConstruct; +import jakarta.inject.Inject; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; diff --git a/spring-context/src/test/java/org/springframework/ejb/access/LocalSlsbInvokerInterceptorTests.java b/spring-context/src/test/java/org/springframework/ejb/access/LocalSlsbInvokerInterceptorTests.java deleted file mode 100644 index f3489771175..00000000000 --- a/spring-context/src/test/java/org/springframework/ejb/access/LocalSlsbInvokerInterceptorTests.java +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Copyright 2002-2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.ejb.access; - -import javax.ejb.CreateException; -import javax.ejb.EJBLocalHome; -import javax.ejb.EJBLocalObject; -import javax.naming.Context; -import javax.naming.NamingException; - -import org.junit.jupiter.api.Test; - -import org.springframework.aop.framework.ProxyFactory; -import org.springframework.jndi.JndiTemplate; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import static org.mockito.BDDMockito.given; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; - -/** - * @author Rod Johnson - * @author Juergen Hoeller - * @author Chris Beams -*/ -public class LocalSlsbInvokerInterceptorTests { - - /** - * Test that it performs the correct lookup. - */ - @Test - public void testPerformsLookup() throws Exception { - LocalInterfaceWithBusinessMethods ejb = mock(LocalInterfaceWithBusinessMethods.class); - - String jndiName= "foobar"; - Context mockContext = mockContext(jndiName, ejb); - - configuredInterceptor(mockContext, jndiName); - - verify(mockContext).close(); - } - - @Test - public void testLookupFailure() throws Exception { - final NamingException nex = new NamingException(); - final String jndiName= "foobar"; - JndiTemplate jt = new JndiTemplate() { - @Override - public Object lookup(String name) throws NamingException { - assertThat(jndiName.equals(name)).isTrue(); - throw nex; - } - }; - - LocalSlsbInvokerInterceptor si = new LocalSlsbInvokerInterceptor(); - si.setJndiName("foobar"); - // default resourceRef=false should cause this to fail, as java:/comp/env will not - // automatically be added - si.setJndiTemplate(jt); - assertThatExceptionOfType(NamingException.class) - .isThrownBy(si::afterPropertiesSet) - .isSameAs(nex); - } - - @Test - public void testInvokesMethodOnEjbInstance() throws Exception { - Object retVal = new Object(); - LocalInterfaceWithBusinessMethods ejb = mock(LocalInterfaceWithBusinessMethods.class); - given(ejb.targetMethod()).willReturn(retVal); - - String jndiName= "foobar"; - Context mockContext = mockContext(jndiName, ejb); - - LocalSlsbInvokerInterceptor si = configuredInterceptor(mockContext, jndiName); - - ProxyFactory pf = new ProxyFactory(new Class[] { BusinessMethods.class }); - pf.addAdvice(si); - BusinessMethods target = (BusinessMethods) pf.getProxy(); - - assertThat(target.targetMethod() == retVal).isTrue(); - - verify(mockContext).close(); - verify(ejb).remove(); - } - - @Test - public void testInvokesMethodOnEjbInstanceWithSeparateBusinessMethods() throws Exception { - Object retVal = new Object(); - LocalInterface ejb = mock(LocalInterface.class); - given(ejb.targetMethod()).willReturn(retVal); - - String jndiName= "foobar"; - Context mockContext = mockContext(jndiName, ejb); - - LocalSlsbInvokerInterceptor si = configuredInterceptor(mockContext, jndiName); - - ProxyFactory pf = new ProxyFactory(new Class[] { BusinessMethods.class }); - pf.addAdvice(si); - BusinessMethods target = (BusinessMethods) pf.getProxy(); - - assertThat(target.targetMethod() == retVal).isTrue(); - - verify(mockContext).close(); - verify(ejb).remove(); - } - - private void testException(Exception expected) throws Exception { - LocalInterfaceWithBusinessMethods ejb = mock(LocalInterfaceWithBusinessMethods.class); - given(ejb.targetMethod()).willThrow(expected); - - String jndiName= "foobar"; - Context mockContext = mockContext(jndiName, ejb); - - LocalSlsbInvokerInterceptor si = configuredInterceptor(mockContext, jndiName); - - ProxyFactory pf = new ProxyFactory(new Class[] { LocalInterfaceWithBusinessMethods.class }); - pf.addAdvice(si); - LocalInterfaceWithBusinessMethods target = (LocalInterfaceWithBusinessMethods) pf.getProxy(); - - assertThatExceptionOfType(Exception.class) - .isThrownBy(target::targetMethod) - .isSameAs(expected); - - verify(mockContext).close(); - } - - @Test - public void testApplicationException() throws Exception { - testException(new ApplicationException()); - } - - protected Context mockContext(final String jndiName, final Object ejbInstance) - throws Exception { - SlsbHome mockHome = mock(SlsbHome.class); - given(mockHome.create()).willReturn((LocalInterface)ejbInstance); - Context mockCtx = mock(Context.class); - given(mockCtx.lookup("java:comp/env/" + jndiName)).willReturn(mockHome); - return mockCtx; - } - - protected LocalSlsbInvokerInterceptor configuredInterceptor(final Context mockCtx, final String jndiName) - throws Exception { - - LocalSlsbInvokerInterceptor si = new LocalSlsbInvokerInterceptor(); - si.setJndiTemplate(new JndiTemplate() { - @Override - protected Context createInitialContext() throws NamingException { - return mockCtx; - } - }); - si.setJndiName(jndiName); - si.setResourceRef(true); - si.afterPropertiesSet(); - - return si; - } - - - /** - * Needed so that we can mock the create() method. - */ - private interface SlsbHome extends EJBLocalHome { - - LocalInterface create() throws CreateException; - } - - - private interface BusinessMethods { - - Object targetMethod() throws ApplicationException; - } - - - private interface LocalInterface extends EJBLocalObject { - - Object targetMethod() throws ApplicationException; - } - - - private interface LocalInterfaceWithBusinessMethods extends LocalInterface, BusinessMethods { - } - - - @SuppressWarnings("serial") - private class ApplicationException extends Exception { - - public ApplicationException() { - super("appException"); - } - } - -} diff --git a/spring-context/src/test/java/org/springframework/ejb/access/LocalStatelessSessionProxyFactoryBeanTests.java b/spring-context/src/test/java/org/springframework/ejb/access/LocalStatelessSessionProxyFactoryBeanTests.java deleted file mode 100644 index 545e6c288af..00000000000 --- a/spring-context/src/test/java/org/springframework/ejb/access/LocalStatelessSessionProxyFactoryBeanTests.java +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Copyright 2002-2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.ejb.access; - -import java.lang.reflect.Proxy; - -import javax.ejb.CreateException; -import javax.ejb.EJBLocalHome; -import javax.ejb.EJBLocalObject; -import javax.naming.NamingException; - -import org.junit.jupiter.api.Test; - -import org.springframework.jndi.JndiTemplate; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; -import static org.mockito.BDDMockito.given; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyNoInteractions; - -/** - * @author Rod Johnson - * @author Juergen Hoeller - * @author Chris Beams - * @since 21.05.2003 - */ -public class LocalStatelessSessionProxyFactoryBeanTests { - - @Test - public void testInvokesMethod() throws Exception { - final int value = 11; - final String jndiName = "foo"; - - MyEjb myEjb = mock(MyEjb.class); - given(myEjb.getValue()).willReturn(value); - - final MyHome home = mock(MyHome.class); - given(home.create()).willReturn(myEjb); - - JndiTemplate jt = new JndiTemplate() { - @Override - public Object lookup(String name) throws NamingException { - // parameterize - assertThat(name.equals("java:comp/env/" + jndiName)).isTrue(); - return home; - } - }; - - LocalStatelessSessionProxyFactoryBean fb = new LocalStatelessSessionProxyFactoryBean(); - fb.setJndiName(jndiName); - fb.setResourceRef(true); - fb.setBusinessInterface(MyBusinessMethods.class); - fb.setJndiTemplate(jt); - - // Need lifecycle methods - fb.afterPropertiesSet(); - - MyBusinessMethods mbm = (MyBusinessMethods) fb.getObject(); - assertThat(Proxy.isProxyClass(mbm.getClass())).isTrue(); - assertThat(mbm.getValue() == value).isTrue(); - verify(myEjb).remove(); - } - - @Test - public void testInvokesMethodOnEjb3StyleBean() throws Exception { - final int value = 11; - final String jndiName = "foo"; - - final MyEjb myEjb = mock(MyEjb.class); - given(myEjb.getValue()).willReturn(value); - - JndiTemplate jt = new JndiTemplate() { - @Override - public Object lookup(String name) throws NamingException { - // parameterize - assertThat(name.equals("java:comp/env/" + jndiName)).isTrue(); - return myEjb; - } - }; - - LocalStatelessSessionProxyFactoryBean fb = new LocalStatelessSessionProxyFactoryBean(); - fb.setJndiName(jndiName); - fb.setResourceRef(true); - fb.setBusinessInterface(MyBusinessMethods.class); - fb.setJndiTemplate(jt); - - // Need lifecycle methods - fb.afterPropertiesSet(); - - MyBusinessMethods mbm = (MyBusinessMethods) fb.getObject(); - assertThat(Proxy.isProxyClass(mbm.getClass())).isTrue(); - assertThat(mbm.getValue() == value).isTrue(); - } - - @Test - public void testCreateException() throws Exception { - final String jndiName = "foo"; - - final CreateException cex = new CreateException(); - final MyHome home = mock(MyHome.class); - given(home.create()).willThrow(cex); - - JndiTemplate jt = new JndiTemplate() { - @Override - public Object lookup(String name) throws NamingException { - // parameterize - assertThat(name.equals(jndiName)).isTrue(); - return home; - } - }; - - LocalStatelessSessionProxyFactoryBean fb = new LocalStatelessSessionProxyFactoryBean(); - fb.setJndiName(jndiName); - fb.setResourceRef(false); // no java:comp/env prefix - fb.setBusinessInterface(MyBusinessMethods.class); - assertThat(MyBusinessMethods.class).isEqualTo(fb.getBusinessInterface()); - fb.setJndiTemplate(jt); - - // Need lifecycle methods - fb.afterPropertiesSet(); - - MyBusinessMethods mbm = (MyBusinessMethods) fb.getObject(); - assertThat(Proxy.isProxyClass(mbm.getClass())).isTrue(); - - assertThatExceptionOfType(EjbAccessException.class).isThrownBy( - mbm::getValue) - .withCause(cex); - } - - @Test - public void testNoBusinessInterfaceSpecified() throws Exception { - // Will do JNDI lookup to get home but won't call create - // Could actually try to figure out interface from create? - final String jndiName = "foo"; - - final MyHome home = mock(MyHome.class); - - JndiTemplate jt = new JndiTemplate() { - @Override - public Object lookup(String name) throws NamingException { - // parameterize - assertThat(name.equals("java:comp/env/" + jndiName)).isTrue(); - return home; - } - }; - - LocalStatelessSessionProxyFactoryBean fb = new LocalStatelessSessionProxyFactoryBean(); - fb.setJndiName(jndiName); - fb.setResourceRef(true); - // Don't set business interface - fb.setJndiTemplate(jt); - - // Check it's a singleton - assertThat(fb.isSingleton()).isTrue(); - - assertThatIllegalArgumentException().isThrownBy( - fb::afterPropertiesSet) - .withMessageContaining("businessInterface"); - - // Expect no methods on home - verifyNoInteractions(home); - } - - - public interface MyHome extends EJBLocalHome { - - MyBusinessMethods create() throws CreateException; - } - - - public interface MyBusinessMethods { - - int getValue(); - } - - - public interface MyEjb extends EJBLocalObject, MyBusinessMethods { - } - -} diff --git a/spring-context/src/test/java/org/springframework/ejb/access/SimpleRemoteSlsbInvokerInterceptorTests.java b/spring-context/src/test/java/org/springframework/ejb/access/SimpleRemoteSlsbInvokerInterceptorTests.java deleted file mode 100644 index 3397cb05ee0..00000000000 --- a/spring-context/src/test/java/org/springframework/ejb/access/SimpleRemoteSlsbInvokerInterceptorTests.java +++ /dev/null @@ -1,349 +0,0 @@ -/* - * Copyright 2002-2020 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.ejb.access; - -import java.rmi.ConnectException; -import java.rmi.RemoteException; - -import javax.ejb.CreateException; -import javax.ejb.EJBHome; -import javax.ejb.EJBObject; -import javax.naming.Context; -import javax.naming.NamingException; - -import org.junit.jupiter.api.Test; - -import org.springframework.aop.framework.ProxyFactory; -import org.springframework.jndi.JndiTemplate; -import org.springframework.remoting.RemoteAccessException; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import static org.mockito.BDDMockito.given; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; - -/** - * @author Rod Johnson - * @author Juergen Hoeller - * @author Chris Beams - */ -public class SimpleRemoteSlsbInvokerInterceptorTests { - - private Context mockContext( - String jndiName, RemoteInterface ejbInstance) - throws Exception { - SlsbHome mockHome = mock(SlsbHome.class); - given(mockHome.create()).willReturn(ejbInstance); - Context mockCtx = mock(Context.class); - given(mockCtx.lookup("java:comp/env/" + jndiName)).willReturn(mockHome); - return mockCtx; - } - - private SimpleRemoteSlsbInvokerInterceptor configuredInterceptor( - final Context mockCtx, String jndiName) throws Exception { - - SimpleRemoteSlsbInvokerInterceptor si = createInterceptor(); - si.setJndiTemplate(new JndiTemplate() { - @Override - protected Context createInitialContext() { - return mockCtx; - } - }); - si.setResourceRef(true); - si.setJndiName(jndiName); - - return si; - } - - protected SimpleRemoteSlsbInvokerInterceptor createInterceptor() { - return new SimpleRemoteSlsbInvokerInterceptor(); - } - - protected Object configuredProxy(SimpleRemoteSlsbInvokerInterceptor si, Class ifc) throws NamingException { - si.afterPropertiesSet(); - ProxyFactory pf = new ProxyFactory(new Class[] {ifc}); - pf.addAdvice(si); - return pf.getProxy(); - } - - - @Test - public void testPerformsLookup() throws Exception { - RemoteInterface ejb = mock(RemoteInterface.class); - - String jndiName= "foobar"; - Context mockContext = mockContext(jndiName, ejb); - - SimpleRemoteSlsbInvokerInterceptor si = configuredInterceptor(mockContext, jndiName); - configuredProxy(si, RemoteInterface.class); - - verify(mockContext).close(); - } - - @Test - public void testPerformsLookupWithAccessContext() throws Exception { - RemoteInterface ejb = mock(RemoteInterface.class); - - String jndiName= "foobar"; - Context mockContext = mockContext(jndiName, ejb); - - SimpleRemoteSlsbInvokerInterceptor si = configuredInterceptor(mockContext, jndiName); - si.setExposeAccessContext(true); - RemoteInterface target = (RemoteInterface) configuredProxy(si, RemoteInterface.class); - assertThat(target.targetMethod()).isNull(); - - verify(mockContext, times(2)).close(); - verify(ejb).targetMethod(); - - } - - @Test - public void testLookupFailure() throws Exception { - final NamingException nex = new NamingException(); - final String jndiName = "foobar"; - JndiTemplate jt = new JndiTemplate() { - @Override - public Object lookup(String name) throws NamingException { - assertThat(jndiName.equals(name)).isTrue(); - throw nex; - } - }; - - SimpleRemoteSlsbInvokerInterceptor si = new SimpleRemoteSlsbInvokerInterceptor(); - si.setJndiName("foobar"); - // default resourceRef=false should cause this to fail, as java:/comp/env will not - // automatically be added - si.setJndiTemplate(jt); - assertThatExceptionOfType(NamingException.class) - .isThrownBy(si::afterPropertiesSet) - .isSameAs(nex); - } - - @Test - public void testInvokesMethodOnEjbInstance() throws Exception { - doTestInvokesMethodOnEjbInstance(true, true); - } - - @Test - public void testInvokesMethodOnEjbInstanceWithLazyLookup() throws Exception { - doTestInvokesMethodOnEjbInstance(false, true); - } - - @Test - public void testInvokesMethodOnEjbInstanceWithLazyLookupAndNoCache() throws Exception { - doTestInvokesMethodOnEjbInstance(false, false); - } - - @Test - public void testInvokesMethodOnEjbInstanceWithNoCache() throws Exception { - doTestInvokesMethodOnEjbInstance(true, false); - } - - private void doTestInvokesMethodOnEjbInstance(boolean lookupHomeOnStartup, boolean cacheHome) throws Exception { - Object retVal = new Object(); - final RemoteInterface ejb = mock(RemoteInterface.class); - given(ejb.targetMethod()).willReturn(retVal); - - int lookupCount = 1; - if (!cacheHome) { - lookupCount++; - if (lookupHomeOnStartup) { - lookupCount++; - } - } - - final String jndiName= "foobar"; - Context mockContext = mockContext(jndiName, ejb); - - SimpleRemoteSlsbInvokerInterceptor si = configuredInterceptor(mockContext, jndiName); - si.setLookupHomeOnStartup(lookupHomeOnStartup); - si.setCacheHome(cacheHome); - - RemoteInterface target = (RemoteInterface) configuredProxy(si, RemoteInterface.class); - assertThat(target.targetMethod() == retVal).isTrue(); - assertThat(target.targetMethod() == retVal).isTrue(); - - verify(mockContext, times(lookupCount)).close(); - verify(ejb, times(2)).remove(); - } - - @Test - public void testInvokesMethodOnEjbInstanceWithRemoteException() throws Exception { - final RemoteInterface ejb = mock(RemoteInterface.class); - given(ejb.targetMethod()).willThrow(new RemoteException()); - ejb.remove(); - - final String jndiName= "foobar"; - Context mockContext = mockContext(jndiName, ejb); - - SimpleRemoteSlsbInvokerInterceptor si = configuredInterceptor(mockContext, jndiName); - - RemoteInterface target = (RemoteInterface) configuredProxy(si, RemoteInterface.class); - assertThatExceptionOfType(RemoteException.class).isThrownBy( - target::targetMethod); - - verify(mockContext).close(); - verify(ejb, times(2)).remove(); - } - - @Test - public void testInvokesMethodOnEjbInstanceWithConnectExceptionWithRefresh() throws Exception { - doTestInvokesMethodOnEjbInstanceWithConnectExceptionWithRefresh(true, true); - } - - @Test - public void testInvokesMethodOnEjbInstanceWithConnectExceptionWithRefreshAndLazyLookup() throws Exception { - doTestInvokesMethodOnEjbInstanceWithConnectExceptionWithRefresh(false, true); - } - - @Test - public void testInvokesMethodOnEjbInstanceWithConnectExceptionWithRefreshAndLazyLookupAndNoCache() throws Exception { - doTestInvokesMethodOnEjbInstanceWithConnectExceptionWithRefresh(false, false); - } - - @Test - public void testInvokesMethodOnEjbInstanceWithConnectExceptionWithRefreshAndNoCache() throws Exception { - doTestInvokesMethodOnEjbInstanceWithConnectExceptionWithRefresh(true, false); - } - - private void doTestInvokesMethodOnEjbInstanceWithConnectExceptionWithRefresh( - boolean lookupHomeOnStartup, boolean cacheHome) throws Exception { - - final RemoteInterface ejb = mock(RemoteInterface.class); - given(ejb.targetMethod()).willThrow(new ConnectException("")); - - int lookupCount = 2; - if (!cacheHome) { - lookupCount++; - if (lookupHomeOnStartup) { - lookupCount++; - } - } - - final String jndiName= "foobar"; - Context mockContext = mockContext(jndiName, ejb); - - SimpleRemoteSlsbInvokerInterceptor si = configuredInterceptor(mockContext, jndiName); - si.setRefreshHomeOnConnectFailure(true); - si.setLookupHomeOnStartup(lookupHomeOnStartup); - si.setCacheHome(cacheHome); - - RemoteInterface target = (RemoteInterface) configuredProxy(si, RemoteInterface.class); - assertThatExceptionOfType(ConnectException.class).isThrownBy( - target::targetMethod); - - verify(mockContext, times(lookupCount)).close(); - verify(ejb, times(2)).remove(); - } - - @Test - public void testInvokesMethodOnEjbInstanceWithBusinessInterface() throws Exception { - Object retVal = new Object(); - final RemoteInterface ejb = mock(RemoteInterface.class); - given(ejb.targetMethod()).willReturn(retVal); - - final String jndiName= "foobar"; - Context mockContext = mockContext(jndiName, ejb); - - SimpleRemoteSlsbInvokerInterceptor si = configuredInterceptor(mockContext, jndiName); - - BusinessInterface target = (BusinessInterface) configuredProxy(si, BusinessInterface.class); - assertThat(target.targetMethod() == retVal).isTrue(); - - verify(mockContext).close(); - verify(ejb).remove(); - } - - @Test - public void testInvokesMethodOnEjbInstanceWithBusinessInterfaceWithRemoteException() throws Exception { - final RemoteInterface ejb = mock(RemoteInterface.class); - given(ejb.targetMethod()).willThrow(new RemoteException()); - - final String jndiName= "foobar"; - Context mockContext = mockContext(jndiName, ejb); - - SimpleRemoteSlsbInvokerInterceptor si = configuredInterceptor(mockContext, jndiName); - - BusinessInterface target = (BusinessInterface) configuredProxy(si, BusinessInterface.class); - assertThatExceptionOfType(RemoteAccessException.class).isThrownBy( - target::targetMethod); - - verify(mockContext).close(); - verify(ejb).remove(); - } - - @Test - public void testApplicationException() throws Exception { - doTestException(new ApplicationException()); - } - - @Test - public void testRemoteException() throws Exception { - doTestException(new RemoteException()); - } - - private void doTestException(Exception expected) throws Exception { - final RemoteInterface ejb = mock(RemoteInterface.class); - given(ejb.targetMethod()).willThrow(expected); - - final String jndiName= "foobar"; - Context mockContext = mockContext(jndiName, ejb); - - SimpleRemoteSlsbInvokerInterceptor si = configuredInterceptor(mockContext, jndiName); - - RemoteInterface target = (RemoteInterface) configuredProxy(si, RemoteInterface.class); - assertThatExceptionOfType(Exception.class) - .isThrownBy(target::targetMethod) - .isSameAs(expected); - verify(mockContext).close(); - verify(ejb).remove(); - } - - - /** - * Needed so that we can mock create() method. - */ - protected interface SlsbHome extends EJBHome { - - EJBObject create() throws RemoteException, CreateException; - } - - - protected interface RemoteInterface extends EJBObject { - - // Also business exception!? - Object targetMethod() throws RemoteException, ApplicationException; - } - - - protected interface BusinessInterface { - - Object targetMethod() throws ApplicationException; - } - - - @SuppressWarnings("serial") - protected class ApplicationException extends Exception { - - public ApplicationException() { - super("appException"); - } - } - -} diff --git a/spring-context/src/test/java/org/springframework/ejb/access/SimpleRemoteStatelessSessionProxyFactoryBeanTests.java b/spring-context/src/test/java/org/springframework/ejb/access/SimpleRemoteStatelessSessionProxyFactoryBeanTests.java deleted file mode 100644 index cc5dd44b693..00000000000 --- a/spring-context/src/test/java/org/springframework/ejb/access/SimpleRemoteStatelessSessionProxyFactoryBeanTests.java +++ /dev/null @@ -1,288 +0,0 @@ -/* - * Copyright 2002-2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.ejb.access; - -import java.lang.reflect.Proxy; -import java.rmi.RemoteException; - -import javax.ejb.CreateException; -import javax.ejb.EJBHome; -import javax.ejb.EJBObject; -import javax.naming.NamingException; - -import org.junit.jupiter.api.Test; - -import org.springframework.jndi.JndiTemplate; -import org.springframework.remoting.RemoteAccessException; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; -import static org.mockito.BDDMockito.given; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyNoInteractions; - -/** - * @author Rod Johnson - * @author Juergen Hoeller - * @since 21.05.2003 - */ -public class SimpleRemoteStatelessSessionProxyFactoryBeanTests extends SimpleRemoteSlsbInvokerInterceptorTests { - - @Override - protected SimpleRemoteSlsbInvokerInterceptor createInterceptor() { - return new SimpleRemoteStatelessSessionProxyFactoryBean(); - } - - @Override - protected Object configuredProxy(SimpleRemoteSlsbInvokerInterceptor si, Class ifc) throws NamingException { - SimpleRemoteStatelessSessionProxyFactoryBean fb = (SimpleRemoteStatelessSessionProxyFactoryBean) si; - fb.setBusinessInterface(ifc); - fb.afterPropertiesSet(); - return fb.getObject(); - } - - @Test - public void testInvokesMethod() throws Exception { - final int value = 11; - final String jndiName = "foo"; - - MyEjb myEjb = mock(MyEjb.class); - given(myEjb.getValue()).willReturn(value); - - final MyHome home = mock(MyHome.class); - given(home.create()).willReturn(myEjb); - - JndiTemplate jt = new JndiTemplate() { - @Override - public Object lookup(String name) { - // parameterize - assertThat(name.equals("java:comp/env/" + jndiName)).isTrue(); - return home; - } - }; - - SimpleRemoteStatelessSessionProxyFactoryBean fb = new SimpleRemoteStatelessSessionProxyFactoryBean(); - fb.setJndiName(jndiName); - fb.setResourceRef(true); - fb.setBusinessInterface(MyBusinessMethods.class); - fb.setJndiTemplate(jt); - - // Need lifecycle methods - fb.afterPropertiesSet(); - - MyBusinessMethods mbm = (MyBusinessMethods) fb.getObject(); - assertThat(Proxy.isProxyClass(mbm.getClass())).isTrue(); - assertThat(mbm.getValue()).as("Returns expected value").isEqualTo(value); - verify(myEjb).remove(); - } - - @Test - public void testInvokesMethodOnEjb3StyleBean() throws Exception { - final int value = 11; - final String jndiName = "foo"; - - final MyEjb myEjb = mock(MyEjb.class); - given(myEjb.getValue()).willReturn(value); - - JndiTemplate jt = new JndiTemplate() { - @Override - public Object lookup(String name) { - // parameterize - assertThat(name.equals("java:comp/env/" + jndiName)).isTrue(); - return myEjb; - } - }; - - SimpleRemoteStatelessSessionProxyFactoryBean fb = new SimpleRemoteStatelessSessionProxyFactoryBean(); - fb.setJndiName(jndiName); - fb.setResourceRef(true); - fb.setBusinessInterface(MyBusinessMethods.class); - fb.setJndiTemplate(jt); - - // Need lifecycle methods - fb.afterPropertiesSet(); - - MyBusinessMethods mbm = (MyBusinessMethods) fb.getObject(); - assertThat(Proxy.isProxyClass(mbm.getClass())).isTrue(); - assertThat(mbm.getValue()).as("Returns expected value").isEqualTo(value); - } - - @Override - @Test - public void testRemoteException() throws Exception { - final RemoteException rex = new RemoteException(); - final String jndiName = "foo"; - - MyEjb myEjb = mock(MyEjb.class); - given(myEjb.getValue()).willThrow(rex); - // TODO might want to control this behaviour... - // Do we really want to call remove after a remote exception? - - final MyHome home = mock(MyHome.class); - given(home.create()).willReturn(myEjb); - - JndiTemplate jt = new JndiTemplate() { - @Override - public Object lookup(String name) { - // parameterize - assertThat(name.equals("java:comp/env/" + jndiName)).isTrue(); - return home; - } - }; - - SimpleRemoteStatelessSessionProxyFactoryBean fb = new SimpleRemoteStatelessSessionProxyFactoryBean(); - fb.setJndiName(jndiName); - fb.setResourceRef(true); - fb.setBusinessInterface(MyBusinessMethods.class); - fb.setJndiTemplate(jt); - - // Need lifecycle methods - fb.afterPropertiesSet(); - - MyBusinessMethods mbm = (MyBusinessMethods) fb.getObject(); - assertThat(Proxy.isProxyClass(mbm.getClass())).isTrue(); - assertThatExceptionOfType(RemoteException.class) - .isThrownBy(mbm::getValue) - .isSameAs(rex); - verify(myEjb).remove(); - } - - @Test - public void testCreateException() throws Exception { - final String jndiName = "foo"; - - final CreateException cex = new CreateException(); - final MyHome home = mock(MyHome.class); - given(home.create()).willThrow(cex); - - JndiTemplate jt = new JndiTemplate() { - @Override - public Object lookup(String name) { - // parameterize - assertThat(name.equals(jndiName)).isTrue(); - return home; - } - }; - - SimpleRemoteStatelessSessionProxyFactoryBean fb = new SimpleRemoteStatelessSessionProxyFactoryBean(); - fb.setJndiName(jndiName); - // rely on default setting of resourceRef=false, no auto addition of java:/comp/env prefix - fb.setBusinessInterface(MyBusinessMethods.class); - assertThat(MyBusinessMethods.class).isEqualTo(fb.getBusinessInterface()); - fb.setJndiTemplate(jt); - - // Need lifecycle methods - fb.afterPropertiesSet(); - - MyBusinessMethods mbm = (MyBusinessMethods) fb.getObject(); - assertThat(Proxy.isProxyClass(mbm.getClass())).isTrue(); - assertThatExceptionOfType(RemoteException.class).isThrownBy(mbm::getValue); - } - - @Test - public void testCreateExceptionWithLocalBusinessInterface() throws Exception { - final String jndiName = "foo"; - - final CreateException cex = new CreateException(); - final MyHome home = mock(MyHome.class); - given(home.create()).willThrow(cex); - - JndiTemplate jt = new JndiTemplate() { - @Override - public Object lookup(String name) { - // parameterize - assertThat(name.equals(jndiName)).isTrue(); - return home; - } - }; - - SimpleRemoteStatelessSessionProxyFactoryBean fb = new SimpleRemoteStatelessSessionProxyFactoryBean(); - fb.setJndiName(jndiName); - // rely on default setting of resourceRef=false, no auto addition of java:/comp/env prefix - fb.setBusinessInterface(MyLocalBusinessMethods.class); - assertThat(MyLocalBusinessMethods.class).isEqualTo(fb.getBusinessInterface()); - fb.setJndiTemplate(jt); - - // Need lifecycle methods - fb.afterPropertiesSet(); - - MyLocalBusinessMethods mbm = (MyLocalBusinessMethods) fb.getObject(); - assertThat(Proxy.isProxyClass(mbm.getClass())).isTrue(); - assertThatExceptionOfType(RemoteAccessException.class).isThrownBy( - mbm::getValue) - .withCause(cex); - } - - @Test - public void testNoBusinessInterfaceSpecified() throws Exception { - // Will do JNDI lookup to get home but won't call create - // Could actually try to figure out interface from create? - final String jndiName = "foo"; - - final MyHome home = mock(MyHome.class); - - JndiTemplate jt = new JndiTemplate() { - @Override - public Object lookup(String name) throws NamingException { - // parameterize - assertThat(name.equals(jndiName)).isTrue(); - return home; - } - }; - - SimpleRemoteStatelessSessionProxyFactoryBean fb = new SimpleRemoteStatelessSessionProxyFactoryBean(); - fb.setJndiName(jndiName); - // rely on default setting of resourceRef=false, no auto addition of java:/comp/env prefix - // Don't set business interface - fb.setJndiTemplate(jt); - - // Check it's a singleton - assertThat(fb.isSingleton()).isTrue(); - - assertThatIllegalArgumentException().isThrownBy( - fb::afterPropertiesSet) - .withMessageContaining("businessInterface"); - - // Expect no methods on home - verifyNoInteractions(home); - } - - - protected interface MyHome extends EJBHome { - - MyBusinessMethods create() throws CreateException, RemoteException; - } - - - protected interface MyBusinessMethods { - - int getValue() throws RemoteException; - } - - - protected interface MyLocalBusinessMethods { - - int getValue(); - } - - - protected interface MyEjb extends EJBObject, MyBusinessMethods { - } - -} diff --git a/spring-context/src/test/java/org/springframework/ejb/config/JeeNamespaceHandlerEventTests.java b/spring-context/src/test/java/org/springframework/ejb/config/JeeNamespaceHandlerEventTests.java index dc0e81943f3..71692278a41 100644 --- a/spring-context/src/test/java/org/springframework/ejb/config/JeeNamespaceHandlerEventTests.java +++ b/spring-context/src/test/java/org/springframework/ejb/config/JeeNamespaceHandlerEventTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -35,20 +35,21 @@ import static org.assertj.core.api.Assertions.assertThat; */ public class JeeNamespaceHandlerEventTests { - private CollectingReaderEventListener eventListener = new CollectingReaderEventListener(); + private final CollectingReaderEventListener eventListener = new CollectingReaderEventListener(); - private XmlBeanDefinitionReader reader; + private final DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); - private DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); + private XmlBeanDefinitionReader reader; @BeforeEach - public void setUp() throws Exception { + public void setup() throws Exception { this.reader = new XmlBeanDefinitionReader(this.beanFactory); this.reader.setEventListener(this.eventListener); this.reader.loadBeanDefinitions(new ClassPathResource("jeeNamespaceHandlerTests.xml", getClass())); } + @Test public void testJndiLookupComponentEventReceived() { ComponentDefinition component = this.eventListener.getComponentDefinition("simple"); diff --git a/spring-context/src/test/java/org/springframework/ejb/config/JeeNamespaceHandlerTests.java b/spring-context/src/test/java/org/springframework/ejb/config/JeeNamespaceHandlerTests.java index ec9662810e6..65292d30573 100644 --- a/spring-context/src/test/java/org/springframework/ejb/config/JeeNamespaceHandlerTests.java +++ b/spring-context/src/test/java/org/springframework/ejb/config/JeeNamespaceHandlerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2020 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,8 +26,6 @@ import org.springframework.beans.factory.xml.XmlBeanDefinitionReader; import org.springframework.beans.testfixture.beans.ITestBean; import org.springframework.context.support.GenericApplicationContext; import org.springframework.core.io.ClassPathResource; -import org.springframework.ejb.access.LocalStatelessSessionProxyFactoryBean; -import org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBean; import org.springframework.jndi.JndiObjectFactoryBean; import static org.assertj.core.api.Assertions.assertThat; @@ -93,44 +91,15 @@ public class JeeNamespaceHandlerTests { @Test public void testSimpleLocalSlsb() { BeanDefinition beanDefinition = this.beanFactory.getMergedBeanDefinition("simpleLocalEjb"); - assertThat(beanDefinition.getBeanClassName()).isEqualTo(LocalStatelessSessionProxyFactoryBean.class.getName()); - assertPropertyValue(beanDefinition, "businessInterface", ITestBean.class.getName()); + assertThat(beanDefinition.getBeanClassName()).isEqualTo(JndiObjectFactoryBean.class.getName()); assertPropertyValue(beanDefinition, "jndiName", "ejb/MyLocalBean"); } @Test public void testSimpleRemoteSlsb() { BeanDefinition beanDefinition = this.beanFactory.getMergedBeanDefinition("simpleRemoteEjb"); - assertThat(beanDefinition.getBeanClassName()).isEqualTo(SimpleRemoteStatelessSessionProxyFactoryBean.class.getName()); - assertPropertyValue(beanDefinition, "businessInterface", ITestBean.class.getName()); - assertPropertyValue(beanDefinition, "jndiName", "ejb/MyRemoteBean"); - } - - @Test - public void testComplexLocalSlsb() { - BeanDefinition beanDefinition = this.beanFactory.getMergedBeanDefinition("complexLocalEjb"); - assertThat(beanDefinition.getBeanClassName()).isEqualTo(LocalStatelessSessionProxyFactoryBean.class.getName()); - assertPropertyValue(beanDefinition, "businessInterface", ITestBean.class.getName()); - assertPropertyValue(beanDefinition, "jndiName", "ejb/MyLocalBean"); - assertPropertyValue(beanDefinition, "cacheHome", "true"); - assertPropertyValue(beanDefinition, "lookupHomeOnStartup", "true"); - assertPropertyValue(beanDefinition, "resourceRef", "true"); - assertPropertyValue(beanDefinition, "jndiEnvironment", "foo=bar"); - } - - @Test - public void testComplexRemoteSlsb() { - BeanDefinition beanDefinition = this.beanFactory.getMergedBeanDefinition("complexRemoteEjb"); - assertThat(beanDefinition.getBeanClassName()).isEqualTo(SimpleRemoteStatelessSessionProxyFactoryBean.class.getName()); - assertPropertyValue(beanDefinition, "businessInterface", ITestBean.class.getName()); + assertThat(beanDefinition.getBeanClassName()).isEqualTo(JndiObjectFactoryBean.class.getName()); assertPropertyValue(beanDefinition, "jndiName", "ejb/MyRemoteBean"); - assertPropertyValue(beanDefinition, "cacheHome", "true"); - assertPropertyValue(beanDefinition, "lookupHomeOnStartup", "true"); - assertPropertyValue(beanDefinition, "resourceRef", "true"); - assertPropertyValue(beanDefinition, "jndiEnvironment", "foo=bar"); - assertPropertyValue(beanDefinition, "homeInterface", "org.springframework.beans.testfixture.beans.ITestBean"); - assertPropertyValue(beanDefinition, "refreshHomeOnConnectFailure", "true"); - assertPropertyValue(beanDefinition, "cacheSessionBean", "true"); } @Test diff --git a/spring-context/src/test/java/org/springframework/validation/beanvalidation/BeanValidationPostProcessorTests.java b/spring-context/src/test/java/org/springframework/validation/beanvalidation/BeanValidationPostProcessorTests.java index 4ec8ce0c59d..cc6b89e9db8 100644 --- a/spring-context/src/test/java/org/springframework/validation/beanvalidation/BeanValidationPostProcessorTests.java +++ b/spring-context/src/test/java/org/springframework/validation/beanvalidation/BeanValidationPostProcessorTests.java @@ -16,10 +16,9 @@ package org.springframework.validation.beanvalidation; -import javax.annotation.PostConstruct; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; - +import jakarta.annotation.PostConstruct; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import org.junit.jupiter.api.Test; import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator; @@ -99,7 +98,7 @@ public class BeanValidationPostProcessorTests { bd.getPropertyValues().add("stringValue", "s"); ac.registerBeanDefinition("bean", bd); assertThatExceptionOfType(BeanCreationException.class) - .isThrownBy(() -> ac.refresh()) + .isThrownBy(ac::refresh) .havingRootCause() .withMessageContainingAll("stringValue", "invalid"); ac.close(); diff --git a/spring-context/src/test/java/org/springframework/validation/beanvalidation/MethodValidationTests.java b/spring-context/src/test/java/org/springframework/validation/beanvalidation/MethodValidationTests.java index bdfa8705d36..974f431462a 100644 --- a/spring-context/src/test/java/org/springframework/validation/beanvalidation/MethodValidationTests.java +++ b/spring-context/src/test/java/org/springframework/validation/beanvalidation/MethodValidationTests.java @@ -19,12 +19,11 @@ package org.springframework.validation.beanvalidation; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; -import javax.validation.ValidationException; -import javax.validation.Validator; -import javax.validation.constraints.Max; -import javax.validation.constraints.NotNull; -import javax.validation.groups.Default; - +import jakarta.validation.ValidationException; +import jakarta.validation.Validator; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.groups.Default; import org.junit.jupiter.api.Test; import org.springframework.aop.framework.ProxyFactory; @@ -49,15 +48,17 @@ import static org.assertj.core.api.Assertions.assertThatExceptionOfType; public class MethodValidationTests { @Test + @SuppressWarnings("unchecked") public void testMethodValidationInterceptor() { MyValidBean bean = new MyValidBean(); ProxyFactory proxyFactory = new ProxyFactory(bean); proxyFactory.addAdvice(new MethodValidationInterceptor()); proxyFactory.addAdvisor(new AsyncAnnotationAdvisor()); - doTestProxyValidation((MyValidInterface) proxyFactory.getProxy()); + doTestProxyValidation((MyValidInterface) proxyFactory.getProxy()); } @Test + @SuppressWarnings("unchecked") public void testMethodValidationPostProcessor() { StaticApplicationContext ac = new StaticApplicationContext(); ac.registerSingleton("mvpp", MethodValidationPostProcessor.class); @@ -70,8 +71,7 @@ public class MethodValidationTests { ac.close(); } - @SuppressWarnings({ "rawtypes", "unchecked" }) - private void doTestProxyValidation(MyValidInterface proxy) { + private void doTestProxyValidation(MyValidInterface proxy) { assertThat(proxy.myValidMethod("value", 5)).isNotNull(); assertThatExceptionOfType(ValidationException.class).isThrownBy(() -> proxy.myValidMethod("value", 15)); @@ -90,8 +90,8 @@ public class MethodValidationTests { } @Test - @SuppressWarnings("resource") public void testLazyValidatorForMethodValidation() { + @SuppressWarnings("resource") AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext( LazyMethodValidationConfig.class, CustomValidatorBean.class, MyValidBean.class, MyValidFactoryBean.class); @@ -99,8 +99,8 @@ public class MethodValidationTests { } @Test - @SuppressWarnings("resource") public void testLazyValidatorForMethodValidationWithProxyTargetClass() { + @SuppressWarnings("resource") AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext( LazyMethodValidationConfigWithProxyTargetClass.class, CustomValidatorBean.class, MyValidBean.class, MyValidFactoryBean.class); diff --git a/spring-context/src/test/java/org/springframework/validation/beanvalidation/SpringValidatorAdapterTests.java b/spring-context/src/test/java/org/springframework/validation/beanvalidation/SpringValidatorAdapterTests.java index fe5f62b5984..83138f4344f 100644 --- a/spring-context/src/test/java/org/springframework/validation/beanvalidation/SpringValidatorAdapterTests.java +++ b/spring-context/src/test/java/org/springframework/validation/beanvalidation/SpringValidatorAdapterTests.java @@ -26,23 +26,24 @@ import java.lang.annotation.Target; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Locale; +import java.util.Map; import java.util.Set; -import javax.validation.Constraint; -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorContext; -import javax.validation.ConstraintViolation; -import javax.validation.Payload; -import javax.validation.Valid; -import javax.validation.Validation; -import javax.validation.Validator; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Pattern; -import javax.validation.constraints.Size; - +import jakarta.validation.Constraint; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Payload; +import jakarta.validation.Valid; +import jakarta.validation.Validation; +import jakarta.validation.Validator; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; +import jakarta.validation.constraints.Size; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -228,6 +229,48 @@ public class SpringValidatorAdapterTests { return Arrays.asList(child1, child2); } + @Test // SPR-15839 + public void testListElementConstraint() { + BeanWithListElementConstraint bean = new BeanWithListElementConstraint(); + bean.setProperty(Arrays.asList("no", "element", "can", "be", null)); + + BeanPropertyBindingResult errors = new BeanPropertyBindingResult(bean, "bean"); + validatorAdapter.validate(bean, errors); + + assertThat(errors.getFieldErrorCount("property[4]")).isEqualTo(1); + assertThat(errors.getFieldValue("property[4]")).isNull(); + } + + @Test // SPR-15839 + public void testMapValueConstraint() { + Map property = new HashMap<>(); + property.put("no value can be", null); + + BeanWithMapEntryConstraint bean = new BeanWithMapEntryConstraint(); + bean.setProperty(property); + + BeanPropertyBindingResult errors = new BeanPropertyBindingResult(bean, "bean"); + validatorAdapter.validate(bean, errors); + + assertThat(errors.getFieldErrorCount("property[no value can be]")).isEqualTo(1); + assertThat(errors.getFieldValue("property[no value can be]")).isNull(); + } + + @Test // SPR-15839 + public void testMapEntryConstraint() { + Map property = new HashMap<>(); + property.put(null, null); + + BeanWithMapEntryConstraint bean = new BeanWithMapEntryConstraint(); + bean.setProperty(property); + + BeanPropertyBindingResult errors = new BeanPropertyBindingResult(bean, "bean"); + validatorAdapter.validate(bean, errors); + + assertThat(errors.hasFieldErrors("property[]")).isTrue(); + assertThat(errors.getFieldValue("property[]")).isNull(); + } + @Same(field = "password", comparingField = "confirmPassword") @Same(field = "email", comparingField = "confirmEmail") @@ -485,4 +528,34 @@ public class SpringValidatorAdapterTests { } } + + public class BeanWithListElementConstraint { + + @Valid + private List<@NotNull String> property; + + public List getProperty() { + return property; + } + + public void setProperty(List property) { + this.property = property; + } + } + + + public class BeanWithMapEntryConstraint { + + @Valid + private Map<@NotNull String, @NotNull String> property; + + public Map getProperty() { + return property; + } + + public void setProperty(Map property) { + this.property = property; + } + } + } diff --git a/spring-context/src/test/java/org/springframework/validation/beanvalidation/ValidatorFactoryTests.java b/spring-context/src/test/java/org/springframework/validation/beanvalidation/ValidatorFactoryTests.java index a8ae01122e3..29c485dc772 100644 --- a/spring-context/src/test/java/org/springframework/validation/beanvalidation/ValidatorFactoryTests.java +++ b/spring-context/src/test/java/org/springframework/validation/beanvalidation/ValidatorFactoryTests.java @@ -28,16 +28,15 @@ import java.util.List; import java.util.Optional; import java.util.Set; -import javax.validation.Constraint; -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorContext; -import javax.validation.ConstraintViolation; -import javax.validation.Payload; -import javax.validation.Valid; -import javax.validation.Validator; -import javax.validation.ValidatorFactory; -import javax.validation.constraints.NotNull; - +import jakarta.validation.Constraint; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Payload; +import jakarta.validation.Valid; +import jakarta.validation.Validator; +import jakarta.validation.ValidatorFactory; +import jakarta.validation.constraints.NotNull; import org.hibernate.validator.HibernateValidator; import org.hibernate.validator.HibernateValidatorFactory; import org.junit.jupiter.api.Test; diff --git a/spring-context/src/test/resources/org/springframework/ejb/config/jeeNamespaceHandlerTests.xml b/spring-context/src/test/resources/org/springframework/ejb/config/jeeNamespaceHandlerTests.xml index 6d0dc55e40e..e8a47157a87 100644 --- a/spring-context/src/test/resources/org/springframework/ejb/config/jeeNamespaceHandlerTests.xml +++ b/spring-context/src/test/resources/org/springframework/ejb/config/jeeNamespaceHandlerTests.xml @@ -40,39 +40,14 @@ - - - - foo=bar - + - - - - foo=bar - + - - - + + + diff --git a/spring-context/src/testFixtures/java/org/springframework/context/testfixture/jndi/SimpleNamingContextBuilder.java b/spring-context/src/testFixtures/java/org/springframework/context/testfixture/jndi/SimpleNamingContextBuilder.java index d686261d1a5..d0a014175fd 100644 --- a/spring-context/src/testFixtures/java/org/springframework/context/testfixture/jndi/SimpleNamingContextBuilder.java +++ b/spring-context/src/testFixtures/java/org/springframework/context/testfixture/jndi/SimpleNamingContextBuilder.java @@ -42,7 +42,7 @@ import org.springframework.util.ReflectionUtils; * configure JNDI appropriately, so that {@code new InitialContext()} * will expose the required objects. Also usable for standalone applications, * e.g. for binding a JDBC DataSource to a well-known JNDI location, to be - * able to use traditional Java EE data access code outside of a Java EE + * able to use traditional Jakarta EE data access code outside of a Jakarta EE * container. * *

    There are various choices for DataSource implementations: diff --git a/spring-core/spring-core.gradle b/spring-core/spring-core.gradle index a6e5e309b07..de0f6a756e0 100644 --- a/spring-core/spring-core.gradle +++ b/spring-core/spring-core.gradle @@ -52,8 +52,8 @@ dependencies { optional("io.netty:netty-buffer") testImplementation("io.projectreactor:reactor-test") testImplementation("com.google.code.findbugs:jsr305") - testImplementation("javax.annotation:javax.annotation-api") - testImplementation("javax.xml.bind:jaxb-api") + testImplementation("jakarta.annotation:jakarta.annotation-api") + testImplementation("jakarta.xml.bind:jakarta.xml.bind-api") testImplementation("com.fasterxml.woodstox:woodstox-core") testImplementation("org.xmlunit:xmlunit-assertj") testImplementation("org.xmlunit:xmlunit-matchers") diff --git a/spring-core/src/main/java/org/springframework/core/MethodParameter.java b/spring-core/src/main/java/org/springframework/core/MethodParameter.java index 42a0dfca93f..3ec9549cb60 100644 --- a/spring-core/src/main/java/org/springframework/core/MethodParameter.java +++ b/spring-core/src/main/java/org/springframework/core/MethodParameter.java @@ -409,7 +409,7 @@ public class MethodParameter { /** * Check whether this method parameter is annotated with any variant of a - * {@code Nullable} annotation, e.g. {@code javax.annotation.Nullable} or + * {@code Nullable} annotation, e.g. {@code jakarta.annotation.Nullable} or * {@code edu.umd.cs.findbugs.annotations.Nullable}. */ private boolean hasNullableAnnotation() { diff --git a/spring-core/src/main/java/org/springframework/core/annotation/AnnotationAwareOrderComparator.java b/spring-core/src/main/java/org/springframework/core/annotation/AnnotationAwareOrderComparator.java index 1fe06d42d7f..a57a0179c3e 100644 --- a/spring-core/src/main/java/org/springframework/core/annotation/AnnotationAwareOrderComparator.java +++ b/spring-core/src/main/java/org/springframework/core/annotation/AnnotationAwareOrderComparator.java @@ -29,7 +29,7 @@ import org.springframework.lang.Nullable; * {@code AnnotationAwareOrderComparator} is an extension of * {@link OrderComparator} that supports Spring's * {@link org.springframework.core.Ordered} interface as well as the - * {@link Order @Order} and {@link javax.annotation.Priority @Priority} + * {@link Order @Order} and {@link jakarta.annotation.Priority @Priority} * annotations, with an order value provided by an {@code Ordered} * instance overriding a statically defined annotation value (if any). * @@ -42,7 +42,7 @@ import org.springframework.lang.Nullable; * @since 2.0.1 * @see org.springframework.core.Ordered * @see org.springframework.core.annotation.Order - * @see javax.annotation.Priority + * @see jakarta.annotation.Priority */ public class AnnotationAwareOrderComparator extends OrderComparator { @@ -54,7 +54,7 @@ public class AnnotationAwareOrderComparator extends OrderComparator { /** * This implementation checks for {@link Order @Order} or - * {@link javax.annotation.Priority @Priority} on various kinds of + * {@link jakarta.annotation.Priority @Priority} on various kinds of * elements, in addition to the {@link org.springframework.core.Ordered} * check in the superclass. */ @@ -80,7 +80,7 @@ public class AnnotationAwareOrderComparator extends OrderComparator { } /** - * This implementation retrieves an @{@link javax.annotation.Priority} + * This implementation retrieves an @{@link jakarta.annotation.Priority} * value, allowing for additional semantics over the regular @{@link Order} * annotation: typically, selecting one object over another in case of * multiple matches but only one object to be returned. diff --git a/spring-core/src/main/java/org/springframework/core/annotation/Order.java b/spring-core/src/main/java/org/springframework/core/annotation/Order.java index a60a439bc61..84f8d067e7c 100644 --- a/spring-core/src/main/java/org/springframework/core/annotation/Order.java +++ b/spring-core/src/main/java/org/springframework/core/annotation/Order.java @@ -40,7 +40,7 @@ import org.springframework.core.Ordered; * order which is an orthogonal concern determined by dependency relationships and * {@code @DependsOn} declarations (influencing a runtime-determined dependency graph). * - *

    Since Spring 4.1, the standard {@link javax.annotation.Priority} annotation + *

    Since Spring 4.1, the standard {@link jakarta.annotation.Priority} annotation * can be used as a drop-in replacement for this annotation in ordering scenarios. * Note that {@code @Priority} may have additional semantics when a single element * has to be picked (see {@link AnnotationAwareOrderComparator#getPriority}). @@ -58,7 +58,7 @@ import org.springframework.core.Ordered; * @see org.springframework.core.Ordered * @see AnnotationAwareOrderComparator * @see OrderUtils - * @see javax.annotation.Priority + * @see jakarta.annotation.Priority */ @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD}) diff --git a/spring-core/src/main/java/org/springframework/core/annotation/OrderUtils.java b/spring-core/src/main/java/org/springframework/core/annotation/OrderUtils.java index 25acbc84816..46d196e5d2d 100644 --- a/spring-core/src/main/java/org/springframework/core/annotation/OrderUtils.java +++ b/spring-core/src/main/java/org/springframework/core/annotation/OrderUtils.java @@ -25,20 +25,20 @@ import org.springframework.util.ConcurrentReferenceHashMap; /** * General utility for determining the order of an object based on its type declaration. - * Handles Spring's {@link Order} annotation as well as {@link javax.annotation.Priority}. + * Handles Spring's {@link Order} annotation as well as {@link jakarta.annotation.Priority}. * * @author Stephane Nicoll * @author Juergen Hoeller * @since 4.1 * @see Order - * @see javax.annotation.Priority + * @see jakarta.annotation.Priority */ public abstract class OrderUtils { /** Cache marker for a non-annotated Class. */ private static final Object NOT_ANNOTATED = new Object(); - private static final String JAVAX_PRIORITY_ANNOTATION = "javax.annotation.Priority"; + private static final String JAVAX_PRIORITY_ANNOTATION = "jakarta.annotation.Priority"; /** Cache for @Order value (or NOT_ANNOTATED marker) per Class. */ private static final Map orderCache = new ConcurrentReferenceHashMap<>(64); @@ -47,7 +47,7 @@ public abstract class OrderUtils { /** * Return the order on the specified {@code type}, or the specified * default value if none can be found. - *

    Takes care of {@link Order @Order} and {@code @javax.annotation.Priority}. + *

    Takes care of {@link Order @Order} and {@code @jakarta.annotation.Priority}. * @param type the type to handle * @return the priority value, or the specified default order if none can be found * @since 5.0 @@ -61,7 +61,7 @@ public abstract class OrderUtils { /** * Return the order on the specified {@code type}, or the specified * default value if none can be found. - *

    Takes care of {@link Order @Order} and {@code @javax.annotation.Priority}. + *

    Takes care of {@link Order @Order} and {@code @jakarta.annotation.Priority}. * @param type the type to handle * @return the priority value, or the specified default order if none can be found * @see #getPriority(Class) @@ -74,7 +74,7 @@ public abstract class OrderUtils { /** * Return the order on the specified {@code type}. - *

    Takes care of {@link Order @Order} and {@code @javax.annotation.Priority}. + *

    Takes care of {@link Order @Order} and {@code @jakarta.annotation.Priority}. * @param type the type to handle * @return the order value, or {@code null} if none can be found * @see #getPriority(Class) @@ -86,7 +86,7 @@ public abstract class OrderUtils { /** * Return the order declared on the specified {@code element}. - *

    Takes care of {@link Order @Order} and {@code @javax.annotation.Priority}. + *

    Takes care of {@link Order @Order} and {@code @jakarta.annotation.Priority}. * @param element the annotated element (e.g. type or method) * @return the order value, or {@code null} if none can be found * @since 5.3 @@ -99,7 +99,7 @@ public abstract class OrderUtils { /** * Return the order from the specified annotations collection. *

    Takes care of {@link Order @Order} and - * {@code @javax.annotation.Priority}. + * {@code @jakarta.annotation.Priority}. * @param element the source element * @param annotations the annotation to consider * @return the order value, or {@code null} if none can be found @@ -132,7 +132,7 @@ public abstract class OrderUtils { } /** - * Return the value of the {@code javax.annotation.Priority} annotation + * Return the value of the {@code jakarta.annotation.Priority} annotation * declared on the specified type, or {@code null} if none. * @param type the type to handle * @return the priority value if the annotation is declared, or {@code null} if none diff --git a/spring-core/src/main/java/org/springframework/core/io/ContextResource.java b/spring-core/src/main/java/org/springframework/core/io/ContextResource.java index f5df62938b1..30f75e00c33 100644 --- a/spring-core/src/main/java/org/springframework/core/io/ContextResource.java +++ b/spring-core/src/main/java/org/springframework/core/io/ContextResource.java @@ -18,7 +18,7 @@ package org.springframework.core.io; /** * Extended interface for a resource that is loaded from an enclosing - * 'context', e.g. from a {@link javax.servlet.ServletContext} but also + * 'context', e.g. from a {@link jakarta.servlet.ServletContext} but also * from plain classpath paths or relative file system paths (specified * without an explicit prefix, hence applying relative to the local * {@link ResourceLoader}'s context). diff --git a/spring-core/src/main/java/org/springframework/core/task/SimpleAsyncTaskExecutor.java b/spring-core/src/main/java/org/springframework/core/task/SimpleAsyncTaskExecutor.java index 7d96032ad80..fe0104f5898 100644 --- a/spring-core/src/main/java/org/springframework/core/task/SimpleAsyncTaskExecutor.java +++ b/spring-core/src/main/java/org/springframework/core/task/SimpleAsyncTaskExecutor.java @@ -102,7 +102,7 @@ public class SimpleAsyncTaskExecutor extends CustomizableThreadCreator * Specify an external factory to use for creating new Threads, * instead of relying on the local properties of this executor. *

    You may specify an inner ThreadFactory bean or also a ThreadFactory reference - * obtained from JNDI (on a Java EE 6 server) or some other lookup mechanism. + * obtained from JNDI (on a Jakarta EE server) or some other lookup mechanism. * @see #setThreadNamePrefix * @see #setThreadPriority */ diff --git a/spring-core/src/main/java/org/springframework/core/task/support/ExecutorServiceAdapter.java b/spring-core/src/main/java/org/springframework/core/task/support/ExecutorServiceAdapter.java index 3297ff16e11..0c22b7651b3 100644 --- a/spring-core/src/main/java/org/springframework/core/task/support/ExecutorServiceAdapter.java +++ b/spring-core/src/main/java/org/springframework/core/task/support/ExecutorServiceAdapter.java @@ -30,12 +30,12 @@ import org.springframework.util.Assert; *

    This is primarily for adapting to client components that communicate via the * {@code java.util.concurrent.ExecutorService} API. It can also be used as * common ground between a local Spring {@code TaskExecutor} backend and a - * JNDI-located {@code ManagedExecutorService} in a Java EE 7 environment. + * JNDI-located {@code ManagedExecutorService} in a Jakarta EE environment. * *

    NOTE: This ExecutorService adapter does not support the * lifecycle methods in the {@code java.util.concurrent.ExecutorService} API * ("shutdown()" etc), similar to a server-wide {@code ManagedExecutorService} - * in a Java EE 7 environment. The lifecycle is always up to the backend pool, + * in a Jakarta EE environment. The lifecycle is always up to the backend pool, * with this adapter acting as an access-only proxy for that target pool. * * @author Juergen Hoeller diff --git a/spring-core/src/test/java/org/springframework/core/annotation/AnnotatedElementUtilsTests.java b/spring-core/src/test/java/org/springframework/core/annotation/AnnotatedElementUtilsTests.java index 2957f31863c..99b10db9b7e 100644 --- a/spring-core/src/test/java/org/springframework/core/annotation/AnnotatedElementUtilsTests.java +++ b/spring-core/src/test/java/org/springframework/core/annotation/AnnotatedElementUtilsTests.java @@ -32,9 +32,9 @@ import java.util.Set; import javax.annotation.Nonnull; import javax.annotation.ParametersAreNonnullByDefault; -import javax.annotation.Resource; import javax.annotation.meta.When; +import jakarta.annotation.Resource; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; diff --git a/spring-core/src/test/java/org/springframework/core/annotation/AnnotationAwareOrderComparatorTests.java b/spring-core/src/test/java/org/springframework/core/annotation/AnnotationAwareOrderComparatorTests.java index afe0bcc7620..97ff1aabb51 100644 --- a/spring-core/src/test/java/org/springframework/core/annotation/AnnotationAwareOrderComparatorTests.java +++ b/spring-core/src/test/java/org/springframework/core/annotation/AnnotationAwareOrderComparatorTests.java @@ -19,8 +19,7 @@ package org.springframework.core.annotation; import java.util.ArrayList; import java.util.List; -import javax.annotation.Priority; - +import jakarta.annotation.Priority; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; diff --git a/spring-core/src/test/java/org/springframework/core/annotation/MergedAnnotationsTests.java b/spring-core/src/test/java/org/springframework/core/annotation/MergedAnnotationsTests.java index e9e3586bb6a..f0502a9687d 100644 --- a/spring-core/src/test/java/org/springframework/core/annotation/MergedAnnotationsTests.java +++ b/spring-core/src/test/java/org/springframework/core/annotation/MergedAnnotationsTests.java @@ -35,8 +35,7 @@ import java.util.NoSuchElementException; import java.util.stream.Collectors; import java.util.stream.Stream; -import javax.annotation.Resource; - +import jakarta.annotation.Resource; import org.junit.jupiter.api.Test; import org.springframework.core.Ordered; @@ -3011,14 +3010,14 @@ class MergedAnnotationsTests { } /** - * Mimics javax.persistence.Id + * Mimics jakarta.persistence.Id */ @Retention(RUNTIME) @interface Id { } /** - * Mimics javax.persistence.GeneratedValue + * Mimics jakarta.persistence.GeneratedValue */ @Retention(RUNTIME) @interface GeneratedValue { diff --git a/spring-core/src/test/java/org/springframework/core/annotation/OrderUtilsTests.java b/spring-core/src/test/java/org/springframework/core/annotation/OrderUtilsTests.java index 08d980baf00..35c96f2ada6 100644 --- a/spring-core/src/test/java/org/springframework/core/annotation/OrderUtilsTests.java +++ b/spring-core/src/test/java/org/springframework/core/annotation/OrderUtilsTests.java @@ -16,8 +16,7 @@ package org.springframework.core.annotation; -import javax.annotation.Priority; - +import jakarta.annotation.Priority; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; diff --git a/spring-core/src/test/java/org/springframework/util/Base64UtilsTests.java b/spring-core/src/test/java/org/springframework/util/Base64UtilsTests.java index 593d81eb684..17f07b40731 100644 --- a/spring-core/src/test/java/org/springframework/util/Base64UtilsTests.java +++ b/spring-core/src/test/java/org/springframework/util/Base64UtilsTests.java @@ -18,8 +18,7 @@ package org.springframework.util; import java.io.UnsupportedEncodingException; -import javax.xml.bind.DatatypeConverter; - +import jakarta.xml.bind.DatatypeConverter; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; diff --git a/spring-jdbc/spring-jdbc.gradle b/spring-jdbc/spring-jdbc.gradle index 41aa3f19872..389462f3bb4 100644 --- a/spring-jdbc/spring-jdbc.gradle +++ b/spring-jdbc/spring-jdbc.gradle @@ -7,7 +7,7 @@ dependencies { api(project(":spring-core")) api(project(":spring-tx")) optional(project(":spring-context")) // for JndiDataSourceLookup - optional("javax.transaction:javax.transaction-api") + optional("jakarta.transaction:jakarta.transaction-api") optional("org.hsqldb:hsqldb") optional("com.h2database:h2") optional("org.apache.derby:derby") diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/DataSourceTransactionManager.java b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/DataSourceTransactionManager.java index d2f619a4d17..2c84c34014f 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/DataSourceTransactionManager.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/DataSourceTransactionManager.java @@ -52,14 +52,14 @@ import org.springframework.util.Assert; * *

    Application code is required to retrieve the JDBC Connection via * {@link DataSourceUtils#getConnection(DataSource)} instead of a standard - * Java EE-style {@link DataSource#getConnection()} call. Spring classes such as + * Jakarta EE-style {@link DataSource#getConnection()} call. Spring classes such as * {@link org.springframework.jdbc.core.JdbcTemplate} use this strategy implicitly. * If not used in combination with this transaction manager, the * {@link DataSourceUtils} lookup strategy behaves exactly like the native * DataSource lookup; it can thus be used in a portable fashion. * *

    Alternatively, you can allow application code to work with the standard - * Java EE-style lookup pattern {@link DataSource#getConnection()}, for example for + * Jakarta EE-style lookup pattern {@link DataSource#getConnection()}, for example for * legacy code that is not aware of Spring at all. In that case, define a * {@link TransactionAwareDataSourceProxy} for your target DataSource, and pass * that proxy DataSource to your DAOs, which will automatically participate in diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/DriverManagerDataSource.java b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/DriverManagerDataSource.java index f803cd46770..875ac1e8871 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/DriverManagerDataSource.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/DriverManagerDataSource.java @@ -34,7 +34,7 @@ import org.springframework.util.ClassUtils; * connection pool, implementing the same standard interface, but creating new * Connections on every call. * - *

    Useful for test or standalone environments outside of a Java EE container, either + *

    Useful for test or standalone environments outside of a Jakarta EE container, either * as a DataSource bean in a corresponding ApplicationContext or in conjunction with * a simple JNDI environment. Pool-assuming {@code Connection.close()} calls will * simply close the Connection, so any DataSource-aware persistence code should work. @@ -44,7 +44,7 @@ import org.springframework.util.ClassUtils; * loading issues with the JDBC DriverManager that be resolved through direct Driver * usage (which is exactly what SimpleDriverDataSource does). * - *

    In a Java EE container, it is recommended to use a JNDI DataSource provided by + *

    In a Jakarta EE container, it is recommended to use a JNDI DataSource provided by * the container. Such a DataSource can be exposed as a DataSource bean in a Spring * ApplicationContext via {@link org.springframework.jndi.JndiObjectFactoryBean}, * for seamless switching to and from a local DataSource bean like this class. diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/LazyConnectionDataSourceProxy.java b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/LazyConnectionDataSourceProxy.java index e22d47de372..6ca3f9f1880 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/LazyConnectionDataSourceProxy.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/LazyConnectionDataSourceProxy.java @@ -57,7 +57,7 @@ import org.springframework.lang.Nullable; * without paying a performance penalty if no actual data access happens. * *

    This DataSource proxy gives you behavior analogous to JTA and a - * transactional JNDI DataSource (as provided by the Java EE server), even + * transactional JNDI DataSource (as provided by the Jakarta EE server), even * with a local transaction strategy like DataSourceTransactionManager or * HibernateTransactionManager. It does not add value with Spring's * JtaTransactionManager as transaction strategy. diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/SimpleDriverDataSource.java b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/SimpleDriverDataSource.java index 09e813d13af..55b75e02bf7 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/SimpleDriverDataSource.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/SimpleDriverDataSource.java @@ -35,7 +35,7 @@ import org.springframework.util.Assert; * connection pool, implementing the same standard interface, but creating new * Connections on every call. * - *

    In a Java EE container, it is recommended to use a JNDI DataSource provided by + *

    In a Jakarta EE container, it is recommended to use a JNDI DataSource provided by * the container. Such a DataSource can be exposed as a DataSource bean in a Spring * ApplicationContext via {@link org.springframework.jndi.JndiObjectFactoryBean}, * for seamless switching to and from a local DataSource bean like this class. diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/TransactionAwareDataSourceProxy.java b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/TransactionAwareDataSourceProxy.java index aed3ddb54b4..9edaca7857a 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/TransactionAwareDataSourceProxy.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/TransactionAwareDataSourceProxy.java @@ -32,7 +32,7 @@ import org.springframework.transaction.support.TransactionSynchronizationManager /** * Proxy for a target JDBC {@link javax.sql.DataSource}, adding awareness of * Spring-managed transactions. Similar to a transactional JNDI DataSource - * as provided by a Java EE server. + * as provided by a Jakarta EE server. * *

    Data access code that should remain unaware of Spring's data access support * can work with this proxy to seamlessly participate in Spring-managed transactions. @@ -52,7 +52,7 @@ import org.springframework.transaction.support.TransactionSynchronizationManager * Connection. If not within a transaction, normal DataSource behavior applies. * *

    This proxy allows data access code to work with the plain JDBC API and still - * participate in Spring-managed transactions, similar to JDBC code in a Java EE/JTA + * participate in Spring-managed transactions, similar to JDBC code in a Jakarta EE/JTA * environment. However, if possible, use Spring's DataSourceUtils, JdbcTemplate or * JDBC operation objects to get transaction participation even without a proxy for * the target DataSource, avoiding the need to define such a proxy in the first place. diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/WebSphereDataSourceAdapter.java b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/WebSphereDataSourceAdapter.java deleted file mode 100644 index 95e7a2daada..00000000000 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/WebSphereDataSourceAdapter.java +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright 2002-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jdbc.datasource; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.sql.Connection; -import java.sql.SQLException; - -import javax.sql.DataSource; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import org.springframework.lang.Nullable; -import org.springframework.util.Assert; -import org.springframework.util.ReflectionUtils; -import org.springframework.util.StringUtils; - -/** - * {@link DataSource} implementation that delegates all calls to a WebSphere - * target {@link DataSource}, typically obtained from JNDI, applying a current - * isolation level and/or current user credentials to every Connection obtained - * from it. - * - *

    Uses IBM-specific API to get a JDBC Connection with a specific isolation - * level (and read-only flag) from a WebSphere DataSource - * (IBM code example). - * Supports the transaction-specific isolation level exposed by - * {@link org.springframework.transaction.support.TransactionSynchronizationManager#getCurrentTransactionIsolationLevel()}. - * It's also possible to specify a default isolation level, to be applied when the - * current Spring-managed transaction does not define a specific isolation level. - * - *

    Usage example, defining the target DataSource as an inner-bean JNDI lookup - * (of course, you can link to any WebSphere DataSource through a bean reference): - * - *

    - * <bean id="myDataSource" class="org.springframework.jdbc.datasource.WebSphereDataSourceAdapter">
    - *   <property name="targetDataSource">
    - *     <bean class="org.springframework.jndi.JndiObjectFactoryBean">
    - *       <property name="jndiName" value="jdbc/myds"/>
    - *     </bean>
    - *   </property>
    - * </bean>
    - * - * Thanks to Ricardo Olivieri for submitting the original implementation - * of this approach! - * - * @author Juergen Hoeller - * @author Lari Hotari - * @author Ricardo N. Olivieri - * @since 2.0.3 - * @see com.ibm.websphere.rsadapter.JDBCConnectionSpec - * @see com.ibm.websphere.rsadapter.WSDataSource#getConnection(com.ibm.websphere.rsadapter.JDBCConnectionSpec) - * @see org.springframework.transaction.support.TransactionSynchronizationManager#getCurrentTransactionIsolationLevel() - * @see org.springframework.transaction.support.TransactionSynchronizationManager#isCurrentTransactionReadOnly() - */ -public class WebSphereDataSourceAdapter extends IsolationLevelDataSourceAdapter { - - protected final Log logger = LogFactory.getLog(getClass()); - - private Class wsDataSourceClass; - - private Method newJdbcConnSpecMethod; - - private Method wsDataSourceGetConnectionMethod; - - private Method setTransactionIsolationMethod; - - private Method setReadOnlyMethod; - - private Method setUserNameMethod; - - private Method setPasswordMethod; - - - /** - * This constructor retrieves the WebSphere JDBC connection spec API, - * so we can get obtain specific WebSphere Connections using reflection. - */ - public WebSphereDataSourceAdapter() { - try { - this.wsDataSourceClass = getClass().getClassLoader().loadClass("com.ibm.websphere.rsadapter.WSDataSource"); - Class jdbcConnSpecClass = getClass().getClassLoader().loadClass("com.ibm.websphere.rsadapter.JDBCConnectionSpec"); - Class wsrraFactoryClass = getClass().getClassLoader().loadClass("com.ibm.websphere.rsadapter.WSRRAFactory"); - this.newJdbcConnSpecMethod = wsrraFactoryClass.getMethod("createJDBCConnectionSpec"); - this.wsDataSourceGetConnectionMethod = - this.wsDataSourceClass.getMethod("getConnection", jdbcConnSpecClass); - this.setTransactionIsolationMethod = - jdbcConnSpecClass.getMethod("setTransactionIsolation", int.class); - this.setReadOnlyMethod = jdbcConnSpecClass.getMethod("setReadOnly", Boolean.class); - this.setUserNameMethod = jdbcConnSpecClass.getMethod("setUserName", String.class); - this.setPasswordMethod = jdbcConnSpecClass.getMethod("setPassword", String.class); - } - catch (Exception ex) { - throw new IllegalStateException( - "Could not initialize WebSphereDataSourceAdapter because WebSphere API classes are not available: " + ex); - } - } - - /** - * Checks that the specified 'targetDataSource' actually is - * a WebSphere WSDataSource. - */ - @Override - public void afterPropertiesSet() { - super.afterPropertiesSet(); - - if (!this.wsDataSourceClass.isInstance(getTargetDataSource())) { - throw new IllegalStateException( - "Specified 'targetDataSource' is not a WebSphere WSDataSource: " + getTargetDataSource()); - } - } - - - /** - * Builds a WebSphere JDBCConnectionSpec object for the current settings - * and calls {@code WSDataSource.getConnection(JDBCConnectionSpec)}. - * @see #createConnectionSpec - * @see com.ibm.websphere.rsadapter.WSDataSource#getConnection(com.ibm.websphere.rsadapter.JDBCConnectionSpec) - */ - @Override - protected Connection doGetConnection(@Nullable String username, @Nullable String password) throws SQLException { - // Create JDBCConnectionSpec using current isolation level value and read-only flag. - Object connSpec = createConnectionSpec( - getCurrentIsolationLevel(), getCurrentReadOnlyFlag(), username, password); - if (logger.isDebugEnabled()) { - logger.debug("Obtaining JDBC Connection from WebSphere DataSource [" + - getTargetDataSource() + "], using ConnectionSpec [" + connSpec + "]"); - } - // Create Connection through invoking WSDataSource.getConnection(JDBCConnectionSpec) - Connection con = (Connection) invokeJdbcMethod( - this.wsDataSourceGetConnectionMethod, obtainTargetDataSource(), connSpec); - Assert.state(con != null, "No Connection"); - return con; - } - - /** - * Create a WebSphere {@code JDBCConnectionSpec} object for the given characteristics. - *

    The default implementation uses reflection to apply the given settings. - * Can be overridden in subclasses to customize the JDBCConnectionSpec object - * (JDBCConnectionSpec javadoc; - * IBM developerWorks article). - * @param isolationLevel the isolation level to apply (or {@code null} if none) - * @param readOnlyFlag the read-only flag to apply (or {@code null} if none) - * @param username the username to apply ({@code null} or empty indicates the default) - * @param password the password to apply (may be {@code null} or empty) - * @throws SQLException if thrown by JDBCConnectionSpec API methods - * @see com.ibm.websphere.rsadapter.JDBCConnectionSpec - */ - protected Object createConnectionSpec(@Nullable Integer isolationLevel, @Nullable Boolean readOnlyFlag, - @Nullable String username, @Nullable String password) throws SQLException { - - Object connSpec = invokeJdbcMethod(this.newJdbcConnSpecMethod, null); - Assert.state(connSpec != null, "No JDBCConnectionSpec"); - if (isolationLevel != null) { - invokeJdbcMethod(this.setTransactionIsolationMethod, connSpec, isolationLevel); - } - if (readOnlyFlag != null) { - invokeJdbcMethod(this.setReadOnlyMethod, connSpec, readOnlyFlag); - } - // If the username is empty, we'll simply let the target DataSource - // use its default credentials. - if (StringUtils.hasLength(username)) { - invokeJdbcMethod(this.setUserNameMethod, connSpec, username); - invokeJdbcMethod(this.setPasswordMethod, connSpec, password); - } - return connSpec; - } - - - @Nullable - private static Object invokeJdbcMethod(Method method, @Nullable Object target, @Nullable Object... args) - throws SQLException { - try { - return method.invoke(target, args); - } - catch (IllegalAccessException ex) { - ReflectionUtils.handleReflectionException(ex); - } - catch (InvocationTargetException ex) { - if (ex.getTargetException() instanceof SQLException) { - throw (SQLException) ex.getTargetException(); - } - ReflectionUtils.handleInvocationTargetException(ex); - } - throw new IllegalStateException("Should never get here"); - } - -} diff --git a/spring-jdbc/src/test/java/org/springframework/jdbc/datasource/DataSourceJtaTransactionTests.java b/spring-jdbc/src/test/java/org/springframework/jdbc/datasource/DataSourceJtaTransactionTests.java index 13e87b621bc..dfd67268392 100644 --- a/spring-jdbc/src/test/java/org/springframework/jdbc/datasource/DataSourceJtaTransactionTests.java +++ b/spring-jdbc/src/test/java/org/springframework/jdbc/datasource/DataSourceJtaTransactionTests.java @@ -23,13 +23,13 @@ import java.util.List; import java.util.Map; import javax.sql.DataSource; -import javax.transaction.RollbackException; -import javax.transaction.Status; -import javax.transaction.SystemException; -import javax.transaction.Transaction; -import javax.transaction.TransactionManager; -import javax.transaction.UserTransaction; +import jakarta.transaction.RollbackException; +import jakarta.transaction.Status; +import jakarta.transaction.SystemException; +import jakarta.transaction.Transaction; +import jakarta.transaction.TransactionManager; +import jakarta.transaction.UserTransaction; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-jms/spring-jms.gradle b/spring-jms/spring-jms.gradle index 32485dff84b..6757f90eca2 100644 --- a/spring-jms/spring-jms.gradle +++ b/spring-jms/spring-jms.gradle @@ -5,15 +5,14 @@ dependencies { api(project(":spring-core")) api(project(":spring-messaging")) api(project(":spring-tx")) - compileOnly("javax.jms:javax.jms-api") + compileOnly("jakarta.jms:jakarta.jms-api") optional(project(":spring-aop")) optional(project(":spring-context")) optional(project(":spring-oxm")) - optional("javax.resource:javax.resource-api") - optional("javax.transaction:javax.transaction-api") + optional("jakarta.resource:jakarta.resource-api") + optional("jakarta.transaction:jakarta.transaction-api") optional("com.fasterxml.jackson.core:jackson-databind") testImplementation(testFixtures(project(":spring-beans"))) testImplementation(testFixtures(project(":spring-tx"))) - testImplementation("org.apache.activemq:activemq-broker") - testImplementation("javax.jms:javax.jms-api") + testImplementation("jakarta.jms:jakarta.jms-api") } diff --git a/spring-jms/src/main/java/org/springframework/jms/IllegalStateException.java b/spring-jms/src/main/java/org/springframework/jms/IllegalStateException.java index 1b6d7924f05..87c9192e060 100644 --- a/spring-jms/src/main/java/org/springframework/jms/IllegalStateException.java +++ b/spring-jms/src/main/java/org/springframework/jms/IllegalStateException.java @@ -21,12 +21,12 @@ package org.springframework.jms; * * @author Mark Pollack * @since 1.1 - * @see javax.jms.IllegalStateException + * @see jakarta.jms.IllegalStateException */ @SuppressWarnings("serial") public class IllegalStateException extends JmsException { - public IllegalStateException(javax.jms.IllegalStateException cause) { + public IllegalStateException(jakarta.jms.IllegalStateException cause) { super(cause); } diff --git a/spring-jms/src/main/java/org/springframework/jms/InvalidClientIDException.java b/spring-jms/src/main/java/org/springframework/jms/InvalidClientIDException.java index 25f91597148..d4e84a4bb83 100644 --- a/spring-jms/src/main/java/org/springframework/jms/InvalidClientIDException.java +++ b/spring-jms/src/main/java/org/springframework/jms/InvalidClientIDException.java @@ -21,12 +21,12 @@ package org.springframework.jms; * * @author Mark Pollack * @since 1.1 - * @see javax.jms.InvalidClientIDException + * @see jakarta.jms.InvalidClientIDException */ @SuppressWarnings("serial") public class InvalidClientIDException extends JmsException { - public InvalidClientIDException(javax.jms.InvalidClientIDException cause) { + public InvalidClientIDException(jakarta.jms.InvalidClientIDException cause) { super(cause); } diff --git a/spring-jms/src/main/java/org/springframework/jms/InvalidDestinationException.java b/spring-jms/src/main/java/org/springframework/jms/InvalidDestinationException.java index a40434a2316..b1ac9001ebb 100644 --- a/spring-jms/src/main/java/org/springframework/jms/InvalidDestinationException.java +++ b/spring-jms/src/main/java/org/springframework/jms/InvalidDestinationException.java @@ -21,12 +21,12 @@ package org.springframework.jms; * * @author Mark Pollack * @since 1.1 - * @see javax.jms.InvalidDestinationException + * @see jakarta.jms.InvalidDestinationException */ @SuppressWarnings("serial") public class InvalidDestinationException extends JmsException { - public InvalidDestinationException(javax.jms.InvalidDestinationException cause) { + public InvalidDestinationException(jakarta.jms.InvalidDestinationException cause) { super(cause); } diff --git a/spring-jms/src/main/java/org/springframework/jms/InvalidSelectorException.java b/spring-jms/src/main/java/org/springframework/jms/InvalidSelectorException.java index da4c6df92c5..a065af5f873 100644 --- a/spring-jms/src/main/java/org/springframework/jms/InvalidSelectorException.java +++ b/spring-jms/src/main/java/org/springframework/jms/InvalidSelectorException.java @@ -21,12 +21,12 @@ package org.springframework.jms; * * @author Mark Pollack * @since 1.1 - * @see javax.jms.InvalidSelectorException + * @see jakarta.jms.InvalidSelectorException */ @SuppressWarnings("serial") public class InvalidSelectorException extends JmsException { - public InvalidSelectorException(javax.jms.InvalidSelectorException cause) { + public InvalidSelectorException(jakarta.jms.InvalidSelectorException cause) { super(cause); } diff --git a/spring-jms/src/main/java/org/springframework/jms/JmsException.java b/spring-jms/src/main/java/org/springframework/jms/JmsException.java index 0c847adea3e..77a712e6ed6 100644 --- a/spring-jms/src/main/java/org/springframework/jms/JmsException.java +++ b/spring-jms/src/main/java/org/springframework/jms/JmsException.java @@ -16,7 +16,7 @@ package org.springframework.jms; -import javax.jms.JMSException; +import jakarta.jms.JMSException; import org.springframework.core.NestedRuntimeException; import org.springframework.lang.Nullable; @@ -44,7 +44,7 @@ public abstract class JmsException extends NestedRuntimeException { * Constructor that takes a message and a root cause. * @param msg the detail message * @param cause the cause of the exception. This argument is generally - * expected to be a proper subclass of {@link javax.jms.JMSException}, + * expected to be a proper subclass of {@link jakarta.jms.JMSException}, * but can also be a JNDI NamingException or the like. */ public JmsException(String msg, @Nullable Throwable cause) { @@ -53,9 +53,9 @@ public abstract class JmsException extends NestedRuntimeException { /** * Constructor that takes a plain root cause, intended for - * subclasses mirroring corresponding {@code javax.jms} exceptions. + * subclasses mirroring corresponding {@code jakarta.jms} exceptions. * @param cause the cause of the exception. This argument is generally - * expected to be a proper subclass of {@link javax.jms.JMSException}. + * expected to be a proper subclass of {@link jakarta.jms.JMSException}. */ public JmsException(@Nullable Throwable cause) { super(cause != null ? cause.getMessage() : null, cause); @@ -80,7 +80,7 @@ public abstract class JmsException extends NestedRuntimeException { /** * Return the detail message, including the message from the linked exception * if there is one. - * @see javax.jms.JMSException#getLinkedException() + * @see jakarta.jms.JMSException#getLinkedException() */ @Override @Nullable diff --git a/spring-jms/src/main/java/org/springframework/jms/JmsSecurityException.java b/spring-jms/src/main/java/org/springframework/jms/JmsSecurityException.java index a55352d9d56..1db9307340d 100644 --- a/spring-jms/src/main/java/org/springframework/jms/JmsSecurityException.java +++ b/spring-jms/src/main/java/org/springframework/jms/JmsSecurityException.java @@ -21,12 +21,12 @@ package org.springframework.jms; * * @author Mark Pollack * @since 1.1 - * @see javax.jms.JMSSecurityException + * @see jakarta.jms.JMSSecurityException */ @SuppressWarnings("serial") public class JmsSecurityException extends JmsException { - public JmsSecurityException(javax.jms.JMSSecurityException cause) { + public JmsSecurityException(jakarta.jms.JMSSecurityException cause) { super(cause); } diff --git a/spring-jms/src/main/java/org/springframework/jms/MessageEOFException.java b/spring-jms/src/main/java/org/springframework/jms/MessageEOFException.java index 93cafa81b92..d6f53d1b1b7 100644 --- a/spring-jms/src/main/java/org/springframework/jms/MessageEOFException.java +++ b/spring-jms/src/main/java/org/springframework/jms/MessageEOFException.java @@ -21,12 +21,12 @@ package org.springframework.jms; * * @author Mark Pollack * @since 1.1 - * @see javax.jms.MessageEOFException + * @see jakarta.jms.MessageEOFException */ @SuppressWarnings("serial") public class MessageEOFException extends JmsException { - public MessageEOFException(javax.jms.MessageEOFException cause) { + public MessageEOFException(jakarta.jms.MessageEOFException cause) { super(cause); } diff --git a/spring-jms/src/main/java/org/springframework/jms/MessageFormatException.java b/spring-jms/src/main/java/org/springframework/jms/MessageFormatException.java index 5fd26326c54..d70f1fcfb70 100644 --- a/spring-jms/src/main/java/org/springframework/jms/MessageFormatException.java +++ b/spring-jms/src/main/java/org/springframework/jms/MessageFormatException.java @@ -21,12 +21,12 @@ package org.springframework.jms; * * @author Mark Pollack * @since 1.1 - * @see javax.jms.MessageFormatException + * @see jakarta.jms.MessageFormatException */ @SuppressWarnings("serial") public class MessageFormatException extends JmsException { - public MessageFormatException(javax.jms.MessageFormatException cause) { + public MessageFormatException(jakarta.jms.MessageFormatException cause) { super(cause); } diff --git a/spring-jms/src/main/java/org/springframework/jms/MessageNotReadableException.java b/spring-jms/src/main/java/org/springframework/jms/MessageNotReadableException.java index d17acc90bf1..04e3221754f 100644 --- a/spring-jms/src/main/java/org/springframework/jms/MessageNotReadableException.java +++ b/spring-jms/src/main/java/org/springframework/jms/MessageNotReadableException.java @@ -21,12 +21,12 @@ package org.springframework.jms; * * @author Mark Pollack * @since 1.1 - * @see javax.jms.MessageNotReadableException + * @see jakarta.jms.MessageNotReadableException */ @SuppressWarnings("serial") public class MessageNotReadableException extends JmsException { - public MessageNotReadableException(javax.jms.MessageNotReadableException cause) { + public MessageNotReadableException(jakarta.jms.MessageNotReadableException cause) { super(cause); } diff --git a/spring-jms/src/main/java/org/springframework/jms/MessageNotWriteableException.java b/spring-jms/src/main/java/org/springframework/jms/MessageNotWriteableException.java index 52aa0223627..a4a4961577c 100644 --- a/spring-jms/src/main/java/org/springframework/jms/MessageNotWriteableException.java +++ b/spring-jms/src/main/java/org/springframework/jms/MessageNotWriteableException.java @@ -21,12 +21,12 @@ package org.springframework.jms; * * @author Mark Pollack * @since 1.1 - * @see javax.jms.MessageNotWriteableException + * @see jakarta.jms.MessageNotWriteableException */ @SuppressWarnings("serial") public class MessageNotWriteableException extends JmsException { - public MessageNotWriteableException(javax.jms.MessageNotWriteableException cause) { + public MessageNotWriteableException(jakarta.jms.MessageNotWriteableException cause) { super(cause); } diff --git a/spring-jms/src/main/java/org/springframework/jms/ResourceAllocationException.java b/spring-jms/src/main/java/org/springframework/jms/ResourceAllocationException.java index 31ded982236..d3a1f674553 100644 --- a/spring-jms/src/main/java/org/springframework/jms/ResourceAllocationException.java +++ b/spring-jms/src/main/java/org/springframework/jms/ResourceAllocationException.java @@ -21,12 +21,12 @@ package org.springframework.jms; * * @author Mark Pollack * @since 1.1 - * @see javax.jms.ResourceAllocationException + * @see jakarta.jms.ResourceAllocationException */ @SuppressWarnings("serial") public class ResourceAllocationException extends JmsException { - public ResourceAllocationException(javax.jms.ResourceAllocationException cause) { + public ResourceAllocationException(jakarta.jms.ResourceAllocationException cause) { super(cause); } diff --git a/spring-jms/src/main/java/org/springframework/jms/TransactionInProgressException.java b/spring-jms/src/main/java/org/springframework/jms/TransactionInProgressException.java index 37bab68acdf..2b271ae1397 100644 --- a/spring-jms/src/main/java/org/springframework/jms/TransactionInProgressException.java +++ b/spring-jms/src/main/java/org/springframework/jms/TransactionInProgressException.java @@ -21,12 +21,12 @@ package org.springframework.jms; * * @author Mark Pollack * @since 1.1 - * @see javax.jms.TransactionInProgressException + * @see jakarta.jms.TransactionInProgressException */ @SuppressWarnings("serial") public class TransactionInProgressException extends JmsException { - public TransactionInProgressException(javax.jms.TransactionInProgressException cause) { + public TransactionInProgressException(jakarta.jms.TransactionInProgressException cause) { super(cause); } diff --git a/spring-jms/src/main/java/org/springframework/jms/TransactionRolledBackException.java b/spring-jms/src/main/java/org/springframework/jms/TransactionRolledBackException.java index 3d0cd7501b0..d29b98206c8 100644 --- a/spring-jms/src/main/java/org/springframework/jms/TransactionRolledBackException.java +++ b/spring-jms/src/main/java/org/springframework/jms/TransactionRolledBackException.java @@ -21,12 +21,12 @@ package org.springframework.jms; * * @author Mark Pollack * @since 1.1 - * @see javax.jms.TransactionRolledBackException + * @see jakarta.jms.TransactionRolledBackException */ @SuppressWarnings("serial") public class TransactionRolledBackException extends JmsException { - public TransactionRolledBackException(javax.jms.TransactionRolledBackException cause) { + public TransactionRolledBackException(jakarta.jms.TransactionRolledBackException cause) { super(cause); } diff --git a/spring-jms/src/main/java/org/springframework/jms/UncategorizedJmsException.java b/spring-jms/src/main/java/org/springframework/jms/UncategorizedJmsException.java index ebf07cdf05d..f449cbacd8c 100644 --- a/spring-jms/src/main/java/org/springframework/jms/UncategorizedJmsException.java +++ b/spring-jms/src/main/java/org/springframework/jms/UncategorizedJmsException.java @@ -37,7 +37,7 @@ public class UncategorizedJmsException extends JmsException { * Constructor that takes a message and a root cause. * @param msg the detail message * @param cause the cause of the exception. This argument is generally - * expected to be a proper subclass of {@link javax.jms.JMSException}, + * expected to be a proper subclass of {@link jakarta.jms.JMSException}, * but can also be a JNDI NamingException or the like. */ public UncategorizedJmsException(String msg, Throwable cause) { @@ -47,7 +47,7 @@ public class UncategorizedJmsException extends JmsException { /** * Constructor that takes a root cause only. * @param cause the cause of the exception. This argument is generally - * expected to be a proper subclass of {@link javax.jms.JMSException}, + * expected to be a proper subclass of {@link jakarta.jms.JMSException}, * but can also be a JNDI NamingException or the like. */ public UncategorizedJmsException(Throwable cause) { diff --git a/spring-jms/src/main/java/org/springframework/jms/annotation/EnableJms.java b/spring-jms/src/main/java/org/springframework/jms/annotation/EnableJms.java index 79c4a3bca05..589e0e8e138 100644 --- a/spring-jms/src/main/java/org/springframework/jms/annotation/EnableJms.java +++ b/spring-jms/src/main/java/org/springframework/jms/annotation/EnableJms.java @@ -74,8 +74,8 @@ import org.springframework.context.annotation.Import; * is set a {@code JmsListenerContainerFactory} bean with name {@code jmsListenerContainerFactory} is * assumed to be present. * - *

    the following configuration would ensure that every time a {@link javax.jms.Message} - * is received on the {@link javax.jms.Destination} named "myQueue", {@code MyService.process()} + *

    the following configuration would ensure that every time a {@link jakarta.jms.Message} + * is received on the {@link jakarta.jms.Destination} named "myQueue", {@code MyService.process()} * is called with the content of the message: * *

    diff --git a/spring-jms/src/main/java/org/springframework/jms/annotation/JmsListener.java b/spring-jms/src/main/java/org/springframework/jms/annotation/JmsListener.java
    index 20847545785..7fee7e70935 100644
    --- a/spring-jms/src/main/java/org/springframework/jms/annotation/JmsListener.java
    +++ b/spring-jms/src/main/java/org/springframework/jms/annotation/JmsListener.java
    @@ -47,8 +47,8 @@ import org.springframework.messaging.handler.annotation.MessageMapping;
      * 

    Annotated JMS listener methods are allowed to have flexible signatures similar * to what {@link MessageMapping} provides: *

      - *
    • {@link javax.jms.Session} to get access to the JMS session
    • - *
    • {@link javax.jms.Message} or one of its subclasses to get access to the raw JMS message
    • + *
    • {@link jakarta.jms.Session} to get access to the JMS session
    • + *
    • {@link jakarta.jms.Message} or one of its subclasses to get access to the raw JMS message
    • *
    • {@link org.springframework.messaging.Message} to use Spring's messaging abstraction counterpart
    • *
    • {@link org.springframework.messaging.handler.annotation.Payload @Payload}-annotated method * arguments, including support for validation
    • diff --git a/spring-jms/src/main/java/org/springframework/jms/config/AbstractJmsListenerContainerFactory.java b/spring-jms/src/main/java/org/springframework/jms/config/AbstractJmsListenerContainerFactory.java index 39007467a0b..049aa4bcc06 100644 --- a/spring-jms/src/main/java/org/springframework/jms/config/AbstractJmsListenerContainerFactory.java +++ b/spring-jms/src/main/java/org/springframework/jms/config/AbstractJmsListenerContainerFactory.java @@ -16,9 +16,8 @@ package org.springframework.jms.config; -import javax.jms.ConnectionFactory; -import javax.jms.ExceptionListener; - +import jakarta.jms.ConnectionFactory; +import jakarta.jms.ExceptionListener; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/spring-jms/src/main/java/org/springframework/jms/config/AbstractJmsListenerEndpoint.java b/spring-jms/src/main/java/org/springframework/jms/config/AbstractJmsListenerEndpoint.java index 2e0fb1a9b4b..96df64e0e67 100644 --- a/spring-jms/src/main/java/org/springframework/jms/config/AbstractJmsListenerEndpoint.java +++ b/spring-jms/src/main/java/org/springframework/jms/config/AbstractJmsListenerEndpoint.java @@ -16,7 +16,7 @@ package org.springframework.jms.config; -import javax.jms.MessageListener; +import jakarta.jms.MessageListener; import org.springframework.jms.listener.AbstractMessageListenerContainer; import org.springframework.jms.listener.MessageListenerContainer; diff --git a/spring-jms/src/main/java/org/springframework/jms/config/AbstractListenerContainerParser.java b/spring-jms/src/main/java/org/springframework/jms/config/AbstractListenerContainerParser.java index a8e66fd602c..787b0622ca7 100644 --- a/spring-jms/src/main/java/org/springframework/jms/config/AbstractListenerContainerParser.java +++ b/spring-jms/src/main/java/org/springframework/jms/config/AbstractListenerContainerParser.java @@ -16,8 +16,7 @@ package org.springframework.jms.config; -import javax.jms.Session; - +import jakarta.jms.Session; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; diff --git a/spring-jms/src/main/java/org/springframework/jms/config/DefaultJcaListenerContainerFactory.java b/spring-jms/src/main/java/org/springframework/jms/config/DefaultJcaListenerContainerFactory.java index a14af147cfa..0338478a086 100644 --- a/spring-jms/src/main/java/org/springframework/jms/config/DefaultJcaListenerContainerFactory.java +++ b/spring-jms/src/main/java/org/springframework/jms/config/DefaultJcaListenerContainerFactory.java @@ -16,7 +16,7 @@ package org.springframework.jms.config; -import javax.resource.spi.ResourceAdapter; +import jakarta.resource.spi.ResourceAdapter; import org.springframework.jms.listener.endpoint.JmsActivationSpecConfig; import org.springframework.jms.listener.endpoint.JmsActivationSpecFactory; diff --git a/spring-jms/src/main/java/org/springframework/jms/config/JmsListenerContainerParser.java b/spring-jms/src/main/java/org/springframework/jms/config/JmsListenerContainerParser.java index 0738ecfae1c..e88259bbdc7 100644 --- a/spring-jms/src/main/java/org/springframework/jms/config/JmsListenerContainerParser.java +++ b/spring-jms/src/main/java/org/springframework/jms/config/JmsListenerContainerParser.java @@ -16,8 +16,7 @@ package org.springframework.jms.config; -import javax.jms.Session; - +import jakarta.jms.Session; import org.w3c.dom.Element; import org.springframework.beans.MutablePropertyValues; diff --git a/spring-jms/src/main/java/org/springframework/jms/config/SimpleJmsListenerEndpoint.java b/spring-jms/src/main/java/org/springframework/jms/config/SimpleJmsListenerEndpoint.java index 33be14be058..5dfc42ad288 100644 --- a/spring-jms/src/main/java/org/springframework/jms/config/SimpleJmsListenerEndpoint.java +++ b/spring-jms/src/main/java/org/springframework/jms/config/SimpleJmsListenerEndpoint.java @@ -16,7 +16,7 @@ package org.springframework.jms.config; -import javax.jms.MessageListener; +import jakarta.jms.MessageListener; import org.springframework.jms.listener.MessageListenerContainer; import org.springframework.lang.Nullable; diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/CachedMessageConsumer.java b/spring-jms/src/main/java/org/springframework/jms/connection/CachedMessageConsumer.java index 5f919cc6701..a077dac8d49 100644 --- a/spring-jms/src/main/java/org/springframework/jms/connection/CachedMessageConsumer.java +++ b/spring-jms/src/main/java/org/springframework/jms/connection/CachedMessageConsumer.java @@ -16,14 +16,14 @@ package org.springframework.jms.connection; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageConsumer; -import javax.jms.MessageListener; -import javax.jms.Queue; -import javax.jms.QueueReceiver; -import javax.jms.Topic; -import javax.jms.TopicSubscriber; +import jakarta.jms.JMSException; +import jakarta.jms.Message; +import jakarta.jms.MessageConsumer; +import jakarta.jms.MessageListener; +import jakarta.jms.Queue; +import jakarta.jms.QueueReceiver; +import jakarta.jms.Topic; +import jakarta.jms.TopicSubscriber; import org.springframework.lang.Nullable; diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/CachedMessageProducer.java b/spring-jms/src/main/java/org/springframework/jms/connection/CachedMessageProducer.java index daae35af0aa..91f24ccd00a 100644 --- a/spring-jms/src/main/java/org/springframework/jms/connection/CachedMessageProducer.java +++ b/spring-jms/src/main/java/org/springframework/jms/connection/CachedMessageProducer.java @@ -16,15 +16,15 @@ package org.springframework.jms.connection; -import javax.jms.CompletionListener; -import javax.jms.Destination; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageProducer; -import javax.jms.Queue; -import javax.jms.QueueSender; -import javax.jms.Topic; -import javax.jms.TopicPublisher; +import jakarta.jms.CompletionListener; +import jakarta.jms.Destination; +import jakarta.jms.JMSException; +import jakarta.jms.Message; +import jakarta.jms.MessageProducer; +import jakarta.jms.Queue; +import jakarta.jms.QueueSender; +import jakarta.jms.Topic; +import jakarta.jms.TopicPublisher; import org.springframework.lang.Nullable; diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/CachingConnectionFactory.java b/spring-jms/src/main/java/org/springframework/jms/connection/CachingConnectionFactory.java index d9b8027f1aa..109762e0888 100644 --- a/spring-jms/src/main/java/org/springframework/jms/connection/CachingConnectionFactory.java +++ b/spring-jms/src/main/java/org/springframework/jms/connection/CachingConnectionFactory.java @@ -30,18 +30,18 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.Destination; -import javax.jms.JMSException; -import javax.jms.MessageConsumer; -import javax.jms.MessageProducer; -import javax.jms.QueueSession; -import javax.jms.Session; -import javax.jms.TemporaryQueue; -import javax.jms.TemporaryTopic; -import javax.jms.Topic; -import javax.jms.TopicSession; +import jakarta.jms.Connection; +import jakarta.jms.ConnectionFactory; +import jakarta.jms.Destination; +import jakarta.jms.JMSException; +import jakarta.jms.MessageConsumer; +import jakarta.jms.MessageProducer; +import jakarta.jms.QueueSession; +import jakarta.jms.Session; +import jakarta.jms.TemporaryQueue; +import jakarta.jms.TemporaryTopic; +import jakarta.jms.Topic; +import jakarta.jms.TopicSession; import org.springframework.lang.Nullable; import org.springframework.util.Assert; @@ -49,8 +49,8 @@ import org.springframework.util.ClassUtils; import org.springframework.util.ObjectUtils; /** - * {@link SingleConnectionFactory} subclass that adds {@link javax.jms.Session} - * caching as well {@link javax.jms.MessageProducer} caching. This ConnectionFactory + * {@link SingleConnectionFactory} subclass that adds {@link jakarta.jms.Session} + * caching as well {@link jakarta.jms.MessageProducer} caching. This ConnectionFactory * also switches the {@link #setReconnectOnException "reconnectOnException" property} * to "true" by default, allowing for automatic recovery of the underlying Connection. * diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/ChainedExceptionListener.java b/spring-jms/src/main/java/org/springframework/jms/connection/ChainedExceptionListener.java index eb5d0beac02..6a7b58ba295 100644 --- a/spring-jms/src/main/java/org/springframework/jms/connection/ChainedExceptionListener.java +++ b/spring-jms/src/main/java/org/springframework/jms/connection/ChainedExceptionListener.java @@ -19,8 +19,8 @@ package org.springframework.jms.connection; import java.util.ArrayList; import java.util.List; -import javax.jms.ExceptionListener; -import javax.jms.JMSException; +import jakarta.jms.ExceptionListener; +import jakarta.jms.JMSException; import org.springframework.util.Assert; diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/ConnectionFactoryUtils.java b/spring-jms/src/main/java/org/springframework/jms/connection/ConnectionFactoryUtils.java index 3de9bc71ffa..0f7b72fd2e2 100644 --- a/spring-jms/src/main/java/org/springframework/jms/connection/ConnectionFactoryUtils.java +++ b/spring-jms/src/main/java/org/springframework/jms/connection/ConnectionFactoryUtils.java @@ -16,17 +16,16 @@ package org.springframework.jms.connection; -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.JMSException; -import javax.jms.QueueConnection; -import javax.jms.QueueConnectionFactory; -import javax.jms.QueueSession; -import javax.jms.Session; -import javax.jms.TopicConnection; -import javax.jms.TopicConnectionFactory; -import javax.jms.TopicSession; - +import jakarta.jms.Connection; +import jakarta.jms.ConnectionFactory; +import jakarta.jms.JMSException; +import jakarta.jms.QueueConnection; +import jakarta.jms.QueueConnectionFactory; +import jakarta.jms.QueueSession; +import jakarta.jms.Session; +import jakarta.jms.TopicConnection; +import jakarta.jms.TopicConnectionFactory; +import jakarta.jms.TopicSession; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -36,7 +35,7 @@ import org.springframework.transaction.support.TransactionSynchronizationManager import org.springframework.util.Assert; /** - * Helper class for managing a JMS {@link javax.jms.ConnectionFactory}, in particular + * Helper class for managing a JMS {@link jakarta.jms.ConnectionFactory}, in particular * for obtaining transactional JMS resources for a given ConnectionFactory. * *

      Mainly for internal use within the framework. Used by @@ -264,7 +263,7 @@ public abstract class ConnectionFactoryUtils { * JMS resources * @return the transactional Session, or {@code null} if none found * @throws JMSException in case of JMS failure - * @see #doGetTransactionalSession(javax.jms.ConnectionFactory, ResourceFactory, boolean) + * @see #doGetTransactionalSession(jakarta.jms.ConnectionFactory, ResourceFactory, boolean) */ @Nullable public static Session doGetTransactionalSession( diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/DelegatingConnectionFactory.java b/spring-jms/src/main/java/org/springframework/jms/connection/DelegatingConnectionFactory.java index 1cdedc3a61f..ea72ff38c6e 100644 --- a/spring-jms/src/main/java/org/springframework/jms/connection/DelegatingConnectionFactory.java +++ b/spring-jms/src/main/java/org/springframework/jms/connection/DelegatingConnectionFactory.java @@ -16,22 +16,22 @@ package org.springframework.jms.connection; -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.JMSContext; -import javax.jms.JMSException; -import javax.jms.QueueConnection; -import javax.jms.QueueConnectionFactory; -import javax.jms.TopicConnection; -import javax.jms.TopicConnectionFactory; +import jakarta.jms.Connection; +import jakarta.jms.ConnectionFactory; +import jakarta.jms.JMSContext; +import jakarta.jms.JMSException; +import jakarta.jms.QueueConnection; +import jakarta.jms.QueueConnectionFactory; +import jakarta.jms.TopicConnection; +import jakarta.jms.TopicConnectionFactory; import org.springframework.beans.factory.InitializingBean; import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** - * {@link javax.jms.ConnectionFactory} implementation that delegates all calls - * to a given target {@link javax.jms.ConnectionFactory}, adapting specific + * {@link jakarta.jms.ConnectionFactory} implementation that delegates all calls + * to a given target {@link jakarta.jms.ConnectionFactory}, adapting specific * {@code create(Queue/Topic)Connection} calls to the target ConnectionFactory * if necessary (e.g. when running JMS 1.0.2 API based code against a generic * JMS 1.1 ConnectionFactory, such as ActiveMQ's PooledConnectionFactory). @@ -126,7 +126,7 @@ public class DelegatingConnectionFactory else { Connection con = target.createConnection(); if (!(con instanceof QueueConnection)) { - throw new javax.jms.IllegalStateException("'targetConnectionFactory' is not a QueueConnectionFactory"); + throw new jakarta.jms.IllegalStateException("'targetConnectionFactory' is not a QueueConnectionFactory"); } return (QueueConnection) con; } @@ -141,7 +141,7 @@ public class DelegatingConnectionFactory else { Connection con = target.createConnection(username, password); if (!(con instanceof QueueConnection)) { - throw new javax.jms.IllegalStateException("'targetConnectionFactory' is not a QueueConnectionFactory"); + throw new jakarta.jms.IllegalStateException("'targetConnectionFactory' is not a QueueConnectionFactory"); } return (QueueConnection) con; } @@ -156,7 +156,7 @@ public class DelegatingConnectionFactory else { Connection con = target.createConnection(); if (!(con instanceof TopicConnection)) { - throw new javax.jms.IllegalStateException("'targetConnectionFactory' is not a TopicConnectionFactory"); + throw new jakarta.jms.IllegalStateException("'targetConnectionFactory' is not a TopicConnectionFactory"); } return (TopicConnection) con; } @@ -171,7 +171,7 @@ public class DelegatingConnectionFactory else { Connection con = target.createConnection(username, password); if (!(con instanceof TopicConnection)) { - throw new javax.jms.IllegalStateException("'targetConnectionFactory' is not a TopicConnectionFactory"); + throw new jakarta.jms.IllegalStateException("'targetConnectionFactory' is not a TopicConnectionFactory"); } return (TopicConnection) con; } diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/JmsResourceHolder.java b/spring-jms/src/main/java/org/springframework/jms/connection/JmsResourceHolder.java index a8e9c86dbe1..7b43c35152c 100644 --- a/spring-jms/src/main/java/org/springframework/jms/connection/JmsResourceHolder.java +++ b/spring-jms/src/main/java/org/springframework/jms/connection/JmsResourceHolder.java @@ -22,12 +22,11 @@ import java.util.Deque; import java.util.HashMap; import java.util.Map; -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.JMSException; -import javax.jms.Session; -import javax.jms.TransactionInProgressException; - +import jakarta.jms.Connection; +import jakarta.jms.ConnectionFactory; +import jakarta.jms.JMSException; +import jakarta.jms.Session; +import jakarta.jms.TransactionInProgressException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -243,7 +242,7 @@ public class JmsResourceHolder extends ResourceHolderSupport { catch (TransactionInProgressException ex) { // Ignore -> can only happen in case of a JTA transaction. } - catch (javax.jms.IllegalStateException ex) { + catch (jakarta.jms.IllegalStateException ex) { if (this.connectionFactory != null) { try { Method getDataSourceMethod = this.connectionFactory.getClass().getMethod("getDataSource"); diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/JmsTransactionManager.java b/spring-jms/src/main/java/org/springframework/jms/connection/JmsTransactionManager.java index 28de1e8df06..2bc43f20da2 100644 --- a/spring-jms/src/main/java/org/springframework/jms/connection/JmsTransactionManager.java +++ b/spring-jms/src/main/java/org/springframework/jms/connection/JmsTransactionManager.java @@ -16,11 +16,11 @@ package org.springframework.jms.connection; -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.JMSException; -import javax.jms.Session; -import javax.jms.TransactionRolledBackException; +import jakarta.jms.Connection; +import jakarta.jms.ConnectionFactory; +import jakarta.jms.JMSException; +import jakarta.jms.Session; +import jakarta.jms.TransactionRolledBackException; import org.springframework.beans.factory.InitializingBean; import org.springframework.lang.Nullable; @@ -38,7 +38,7 @@ import org.springframework.util.Assert; /** * {@link org.springframework.transaction.PlatformTransactionManager} implementation - * for a single JMS {@link javax.jms.ConnectionFactory}. Binds a JMS + * for a single JMS {@link jakarta.jms.ConnectionFactory}. Binds a JMS * Connection/Session pair from the specified ConnectionFactory to the thread, * potentially allowing for one thread-bound Session per ConnectionFactory. * @@ -52,12 +52,12 @@ import org.springframework.util.Assert; * *

      Application code is required to retrieve the transactional JMS Session via * {@link ConnectionFactoryUtils#getTransactionalSession} instead of a standard - * Java EE-style {@link ConnectionFactory#createConnection()} call with subsequent + * Jakarta EE-style {@link ConnectionFactory#createConnection()} call with subsequent * Session creation. Spring's {@link org.springframework.jms.core.JmsTemplate} * will autodetect a thread-bound Session and automatically participate in it. * *

      Alternatively, you can allow application code to work with the standard - * Java EE-style lookup pattern on a ConnectionFactory, for example for legacy code + * Jakarta EE-style lookup pattern on a ConnectionFactory, for example for legacy code * that is not aware of Spring at all. In that case, define a * {@link TransactionAwareConnectionFactoryProxy} for your target ConnectionFactory, * which will automatically participate in Spring-managed transactions. @@ -324,7 +324,7 @@ public class JmsTransactionManager extends AbstractPlatformTransactionManager * Create a JMS Connection via this template's ConnectionFactory. *

      This implementation uses JMS 1.1 API. * @return the new JMS Connection - * @throws javax.jms.JMSException if thrown by JMS API methods + * @throws jakarta.jms.JMSException if thrown by JMS API methods */ protected Connection createConnection() throws JMSException { return obtainConnectionFactory().createConnection(); @@ -335,7 +335,7 @@ public class JmsTransactionManager extends AbstractPlatformTransactionManager *

      This implementation uses JMS 1.1 API. * @param con the JMS Connection to create a Session for * @return the new JMS Session - * @throws javax.jms.JMSException if thrown by JMS API methods + * @throws jakarta.jms.JMSException if thrown by JMS API methods */ protected Session createSession(Connection con) throws JMSException { return con.createSession(true, Session.AUTO_ACKNOWLEDGE); diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/SessionProxy.java b/spring-jms/src/main/java/org/springframework/jms/connection/SessionProxy.java index f6443252b41..cd4ccbb5b80 100644 --- a/spring-jms/src/main/java/org/springframework/jms/connection/SessionProxy.java +++ b/spring-jms/src/main/java/org/springframework/jms/connection/SessionProxy.java @@ -16,17 +16,17 @@ package org.springframework.jms.connection; -import javax.jms.Session; +import jakarta.jms.Session; /** - * Subinterface of {@link javax.jms.Session} to be implemented by + * Subinterface of {@link jakarta.jms.Session} to be implemented by * Session proxies. Allows access to the underlying target Session. * * @author Juergen Hoeller * @since 2.0.4 * @see TransactionAwareConnectionFactoryProxy * @see CachingConnectionFactory - * @see ConnectionFactoryUtils#getTargetSession(javax.jms.Session) + * @see ConnectionFactoryUtils#getTargetSession(jakarta.jms.Session) */ public interface SessionProxy extends Session { diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/SingleConnectionFactory.java b/spring-jms/src/main/java/org/springframework/jms/connection/SingleConnectionFactory.java index 1a463c3b4fe..0c5e629022a 100644 --- a/spring-jms/src/main/java/org/springframework/jms/connection/SingleConnectionFactory.java +++ b/spring-jms/src/main/java/org/springframework/jms/connection/SingleConnectionFactory.java @@ -25,17 +25,16 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Set; -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.ExceptionListener; -import javax.jms.JMSContext; -import javax.jms.JMSException; -import javax.jms.QueueConnection; -import javax.jms.QueueConnectionFactory; -import javax.jms.Session; -import javax.jms.TopicConnection; -import javax.jms.TopicConnectionFactory; - +import jakarta.jms.Connection; +import jakarta.jms.ConnectionFactory; +import jakarta.jms.ExceptionListener; +import jakarta.jms.JMSContext; +import jakarta.jms.JMSException; +import jakarta.jms.QueueConnection; +import jakarta.jms.QueueConnectionFactory; +import jakarta.jms.Session; +import jakarta.jms.TopicConnection; +import jakarta.jms.TopicConnectionFactory; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -49,7 +48,7 @@ import org.springframework.util.ObjectUtils; /** * A JMS ConnectionFactory adapter that returns the same Connection * from all {@link #createConnection()} calls, and ignores calls to - * {@link javax.jms.Connection#close()}. According to the JMS Connection + * {@link jakarta.jms.Connection#close()}. According to the JMS Connection * model, this is perfectly thread-safe (in contrast to e.g. JDBC). The * shared Connection can be automatically recovered in case of an Exception. * @@ -170,7 +169,7 @@ public class SingleConnectionFactory implements ConnectionFactory, QueueConnecti *

      Note that client IDs need to be unique among all active Connections * of the underlying JMS provider. Furthermore, a client ID can only be * assigned if the original ConnectionFactory hasn't already assigned one. - * @see javax.jms.Connection#setClientID + * @see jakarta.jms.Connection#setClientID * @see #setTargetConnectionFactory */ public void setClientId(@Nullable String clientId) { @@ -245,7 +244,7 @@ public class SingleConnectionFactory implements ConnectionFactory, QueueConnecti @Override public Connection createConnection(String username, String password) throws JMSException { - throw new javax.jms.IllegalStateException( + throw new jakarta.jms.IllegalStateException( "SingleConnectionFactory does not support custom username and password"); } @@ -257,7 +256,7 @@ public class SingleConnectionFactory implements ConnectionFactory, QueueConnecti con = createConnection(); } if (!(con instanceof QueueConnection)) { - throw new javax.jms.IllegalStateException( + throw new jakarta.jms.IllegalStateException( "This SingleConnectionFactory does not hold a QueueConnection but rather: " + con); } return ((QueueConnection) con); @@ -265,7 +264,7 @@ public class SingleConnectionFactory implements ConnectionFactory, QueueConnecti @Override public QueueConnection createQueueConnection(String username, String password) throws JMSException { - throw new javax.jms.IllegalStateException( + throw new jakarta.jms.IllegalStateException( "SingleConnectionFactory does not support custom username and password"); } @@ -277,7 +276,7 @@ public class SingleConnectionFactory implements ConnectionFactory, QueueConnecti con = createConnection(); } if (!(con instanceof TopicConnection)) { - throw new javax.jms.IllegalStateException( + throw new jakarta.jms.IllegalStateException( "This SingleConnectionFactory does not hold a TopicConnection but rather: " + con); } return ((TopicConnection) con); @@ -285,7 +284,7 @@ public class SingleConnectionFactory implements ConnectionFactory, QueueConnecti @Override public TopicConnection createTopicConnection(String username, String password) throws JMSException { - throw new javax.jms.IllegalStateException( + throw new jakarta.jms.IllegalStateException( "SingleConnectionFactory does not support custom username and password"); } @@ -319,7 +318,7 @@ public class SingleConnectionFactory implements ConnectionFactory, QueueConnecti /** * Obtain an initialized shared Connection. * @return the Connection (never {@code null}) - * @throws javax.jms.JMSException if thrown by JMS API methods + * @throws jakarta.jms.JMSException if thrown by JMS API methods * @see #initConnection() */ protected Connection getConnection() throws JMSException { @@ -335,7 +334,7 @@ public class SingleConnectionFactory implements ConnectionFactory, QueueConnecti * Initialize the underlying shared Connection. *

      Closes and reinitializes the Connection if an underlying * Connection is present already. - * @throws javax.jms.JMSException if thrown by JMS API methods + * @throws jakarta.jms.JMSException if thrown by JMS API methods * @see #prepareConnection */ public void initConnection() throws JMSException { @@ -396,7 +395,7 @@ public class SingleConnectionFactory implements ConnectionFactory, QueueConnecti /** * Create a JMS Connection via this template's ConnectionFactory. * @return the new JMS Connection - * @throws javax.jms.JMSException if thrown by JMS API methods + * @throws jakarta.jms.JMSException if thrown by JMS API methods */ protected Connection doCreateConnection() throws JMSException { ConnectionFactory cf = getTargetConnectionFactory(); @@ -502,7 +501,7 @@ public class SingleConnectionFactory implements ConnectionFactory, QueueConnecti con.close(); } } - catch (javax.jms.IllegalStateException ex) { + catch (jakarta.jms.IllegalStateException ex) { logger.debug("Ignoring Connection state exception - assuming already closed: " + ex); } catch (Throwable ex) { @@ -569,7 +568,7 @@ public class SingleConnectionFactory implements ConnectionFactory, QueueConnecti return null; } else { - throw new javax.jms.IllegalStateException( + throw new jakarta.jms.IllegalStateException( "setClientID call not supported on proxy for shared Connection. " + "Set the 'clientId' property on the SingleConnectionFactory instead."); } @@ -590,7 +589,7 @@ public class SingleConnectionFactory implements ConnectionFactory, QueueConnecti return null; } else { - throw new javax.jms.IllegalStateException( + throw new jakarta.jms.IllegalStateException( "setExceptionListener call not supported on proxy for shared Connection. " + "Set the 'exceptionListener' property on the SingleConnectionFactory instead. " + "Alternatively, activate SingleConnectionFactory's 'reconnectOnException' feature, " + @@ -650,7 +649,7 @@ public class SingleConnectionFactory implements ConnectionFactory, QueueConnecti catch (Throwable ex) { logger.trace("Failed to close newly obtained JMS Session", ex); } - throw new javax.jms.IllegalStateException(msg); + throw new jakarta.jms.IllegalStateException(msg); } return session; } diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/SmartConnectionFactory.java b/spring-jms/src/main/java/org/springframework/jms/connection/SmartConnectionFactory.java index 222627a7f32..00eb4c6b1ea 100644 --- a/spring-jms/src/main/java/org/springframework/jms/connection/SmartConnectionFactory.java +++ b/spring-jms/src/main/java/org/springframework/jms/connection/SmartConnectionFactory.java @@ -16,11 +16,11 @@ package org.springframework.jms.connection; -import javax.jms.Connection; -import javax.jms.ConnectionFactory; +import jakarta.jms.Connection; +import jakarta.jms.ConnectionFactory; /** - * Extension of the {@code javax.jms.ConnectionFactory} interface, + * Extension of the {@code jakarta.jms.ConnectionFactory} interface, * indicating how to release Connections obtained from it. * * @author Juergen Hoeller @@ -32,7 +32,7 @@ public interface SmartConnectionFactory extends ConnectionFactory { * Should we stop the Connection, obtained from this ConnectionFactory? * @param con the Connection to check * @return whether a stop call is necessary - * @see javax.jms.Connection#stop() + * @see jakarta.jms.Connection#stop() */ boolean shouldStop(Connection con); diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/SynchedLocalTransactionFailedException.java b/spring-jms/src/main/java/org/springframework/jms/connection/SynchedLocalTransactionFailedException.java index 311de08a2aa..a4fbdb961f3 100644 --- a/spring-jms/src/main/java/org/springframework/jms/connection/SynchedLocalTransactionFailedException.java +++ b/spring-jms/src/main/java/org/springframework/jms/connection/SynchedLocalTransactionFailedException.java @@ -16,7 +16,7 @@ package org.springframework.jms.connection; -import javax.jms.JMSException; +import jakarta.jms.JMSException; import org.springframework.jms.JmsException; diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/TransactionAwareConnectionFactoryProxy.java b/spring-jms/src/main/java/org/springframework/jms/connection/TransactionAwareConnectionFactoryProxy.java index 3dbbfb5c732..2bac2fa55d0 100644 --- a/spring-jms/src/main/java/org/springframework/jms/connection/TransactionAwareConnectionFactoryProxy.java +++ b/spring-jms/src/main/java/org/springframework/jms/connection/TransactionAwareConnectionFactoryProxy.java @@ -23,27 +23,27 @@ import java.lang.reflect.Proxy; import java.util.ArrayList; import java.util.List; -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.JMSContext; -import javax.jms.JMSException; -import javax.jms.QueueConnection; -import javax.jms.QueueConnectionFactory; -import javax.jms.QueueSession; -import javax.jms.Session; -import javax.jms.TopicConnection; -import javax.jms.TopicConnectionFactory; -import javax.jms.TopicSession; -import javax.jms.TransactionInProgressException; +import jakarta.jms.Connection; +import jakarta.jms.ConnectionFactory; +import jakarta.jms.JMSContext; +import jakarta.jms.JMSException; +import jakarta.jms.QueueConnection; +import jakarta.jms.QueueConnectionFactory; +import jakarta.jms.QueueSession; +import jakarta.jms.Session; +import jakarta.jms.TopicConnection; +import jakarta.jms.TopicConnectionFactory; +import jakarta.jms.TopicSession; +import jakarta.jms.TransactionInProgressException; import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; /** - * Proxy for a target JMS {@link javax.jms.ConnectionFactory}, adding awareness of + * Proxy for a target JMS {@link jakarta.jms.ConnectionFactory}, adding awareness of * Spring-managed transactions. Similar to a transactional JNDI ConnectionFactory - * as provided by a Java EE application server. + * as provided by a Jakarta EE application server. * *

      Messaging code which should remain unaware of Spring's JMS support can work with * this proxy to seamlessly participate in Spring-managed transactions. Note that the @@ -164,7 +164,7 @@ public class TransactionAwareConnectionFactoryProxy public QueueConnection createQueueConnection() throws JMSException { ConnectionFactory target = getTargetConnectionFactory(); if (!(target instanceof QueueConnectionFactory)) { - throw new javax.jms.IllegalStateException("'targetConnectionFactory' is no QueueConnectionFactory"); + throw new jakarta.jms.IllegalStateException("'targetConnectionFactory' is no QueueConnectionFactory"); } QueueConnection targetConnection = ((QueueConnectionFactory) target).createQueueConnection(); return (QueueConnection) getTransactionAwareConnectionProxy(targetConnection); @@ -174,7 +174,7 @@ public class TransactionAwareConnectionFactoryProxy public QueueConnection createQueueConnection(String username, String password) throws JMSException { ConnectionFactory target = getTargetConnectionFactory(); if (!(target instanceof QueueConnectionFactory)) { - throw new javax.jms.IllegalStateException("'targetConnectionFactory' is no QueueConnectionFactory"); + throw new jakarta.jms.IllegalStateException("'targetConnectionFactory' is no QueueConnectionFactory"); } QueueConnection targetConnection = ((QueueConnectionFactory) target).createQueueConnection(username, password); return (QueueConnection) getTransactionAwareConnectionProxy(targetConnection); @@ -184,7 +184,7 @@ public class TransactionAwareConnectionFactoryProxy public TopicConnection createTopicConnection() throws JMSException { ConnectionFactory target = getTargetConnectionFactory(); if (!(target instanceof TopicConnectionFactory)) { - throw new javax.jms.IllegalStateException("'targetConnectionFactory' is no TopicConnectionFactory"); + throw new jakarta.jms.IllegalStateException("'targetConnectionFactory' is no TopicConnectionFactory"); } TopicConnection targetConnection = ((TopicConnectionFactory) target).createTopicConnection(); return (TopicConnection) getTransactionAwareConnectionProxy(targetConnection); @@ -194,7 +194,7 @@ public class TransactionAwareConnectionFactoryProxy public TopicConnection createTopicConnection(String username, String password) throws JMSException { ConnectionFactory target = getTargetConnectionFactory(); if (!(target instanceof TopicConnectionFactory)) { - throw new javax.jms.IllegalStateException("'targetConnectionFactory' is no TopicConnectionFactory"); + throw new jakarta.jms.IllegalStateException("'targetConnectionFactory' is no TopicConnectionFactory"); } TopicConnection targetConnection = ((TopicConnectionFactory) target).createTopicConnection(username, password); return (TopicConnection) getTransactionAwareConnectionProxy(targetConnection); diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/UserCredentialsConnectionFactoryAdapter.java b/spring-jms/src/main/java/org/springframework/jms/connection/UserCredentialsConnectionFactoryAdapter.java index f8d2e4b9b42..ef8dd8585fa 100644 --- a/spring-jms/src/main/java/org/springframework/jms/connection/UserCredentialsConnectionFactoryAdapter.java +++ b/spring-jms/src/main/java/org/springframework/jms/connection/UserCredentialsConnectionFactoryAdapter.java @@ -16,14 +16,14 @@ package org.springframework.jms.connection; -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.JMSContext; -import javax.jms.JMSException; -import javax.jms.QueueConnection; -import javax.jms.QueueConnectionFactory; -import javax.jms.TopicConnection; -import javax.jms.TopicConnectionFactory; +import jakarta.jms.Connection; +import jakarta.jms.ConnectionFactory; +import jakarta.jms.JMSContext; +import jakarta.jms.JMSException; +import jakarta.jms.QueueConnection; +import jakarta.jms.QueueConnectionFactory; +import jakarta.jms.TopicConnection; +import jakarta.jms.TopicConnectionFactory; import org.springframework.beans.factory.InitializingBean; import org.springframework.core.NamedThreadLocal; @@ -32,7 +32,7 @@ import org.springframework.util.Assert; import org.springframework.util.StringUtils; /** - * An adapter for a target JMS {@link javax.jms.ConnectionFactory}, applying the + * An adapter for a target JMS {@link jakarta.jms.ConnectionFactory}, applying the * given user credentials to every standard {@code createConnection()} call, * that is, implicitly invoking {@code createConnection(username, password)} * on the target. All other methods simply delegate to the corresponding methods @@ -179,8 +179,8 @@ public class UserCredentialsConnectionFactoryAdapter * @param username the username to use * @param password the password to use * @return the Connection - * @see javax.jms.ConnectionFactory#createConnection(String, String) - * @see javax.jms.ConnectionFactory#createConnection() + * @see jakarta.jms.ConnectionFactory#createConnection(String, String) + * @see jakarta.jms.ConnectionFactory#createConnection() */ protected Connection doCreateConnection(@Nullable String username, @Nullable String password) throws JMSException { ConnectionFactory target = obtainTargetConnectionFactory(); @@ -225,15 +225,15 @@ public class UserCredentialsConnectionFactoryAdapter * @param username the username to use * @param password the password to use * @return the Connection - * @see javax.jms.QueueConnectionFactory#createQueueConnection(String, String) - * @see javax.jms.QueueConnectionFactory#createQueueConnection() + * @see jakarta.jms.QueueConnectionFactory#createQueueConnection(String, String) + * @see jakarta.jms.QueueConnectionFactory#createQueueConnection() */ protected QueueConnection doCreateQueueConnection( @Nullable String username, @Nullable String password) throws JMSException { ConnectionFactory target = obtainTargetConnectionFactory(); if (!(target instanceof QueueConnectionFactory)) { - throw new javax.jms.IllegalStateException("'targetConnectionFactory' is not a QueueConnectionFactory"); + throw new jakarta.jms.IllegalStateException("'targetConnectionFactory' is not a QueueConnectionFactory"); } QueueConnectionFactory queueFactory = (QueueConnectionFactory) target; if (StringUtils.hasLength(username)) { @@ -277,15 +277,15 @@ public class UserCredentialsConnectionFactoryAdapter * @param username the username to use * @param password the password to use * @return the Connection - * @see javax.jms.TopicConnectionFactory#createTopicConnection(String, String) - * @see javax.jms.TopicConnectionFactory#createTopicConnection() + * @see jakarta.jms.TopicConnectionFactory#createTopicConnection(String, String) + * @see jakarta.jms.TopicConnectionFactory#createTopicConnection() */ protected TopicConnection doCreateTopicConnection( @Nullable String username, @Nullable String password) throws JMSException { ConnectionFactory target = obtainTargetConnectionFactory(); if (!(target instanceof TopicConnectionFactory)) { - throw new javax.jms.IllegalStateException("'targetConnectionFactory' is not a TopicConnectionFactory"); + throw new jakarta.jms.IllegalStateException("'targetConnectionFactory' is not a TopicConnectionFactory"); } TopicConnectionFactory queueFactory = (TopicConnectionFactory) target; if (StringUtils.hasLength(username)) { diff --git a/spring-jms/src/main/java/org/springframework/jms/core/BrowserCallback.java b/spring-jms/src/main/java/org/springframework/jms/core/BrowserCallback.java index 5142cd35080..1a076bad501 100644 --- a/spring-jms/src/main/java/org/springframework/jms/core/BrowserCallback.java +++ b/spring-jms/src/main/java/org/springframework/jms/core/BrowserCallback.java @@ -16,9 +16,9 @@ package org.springframework.jms.core; -import javax.jms.JMSException; -import javax.jms.QueueBrowser; -import javax.jms.Session; +import jakarta.jms.JMSException; +import jakarta.jms.QueueBrowser; +import jakarta.jms.Session; import org.springframework.lang.Nullable; @@ -39,13 +39,13 @@ import org.springframework.lang.Nullable; public interface BrowserCallback { /** - * Perform operations on the given {@link javax.jms.Session} and - * {@link javax.jms.QueueBrowser}. + * Perform operations on the given {@link jakarta.jms.Session} and + * {@link jakarta.jms.QueueBrowser}. * @param session the JMS {@code Session} object to use * @param browser the JMS {@code QueueBrowser} object to use * @return a result object from working with the {@code Session}, if any * (or {@code null} if none) - * @throws javax.jms.JMSException if thrown by JMS API methods + * @throws jakarta.jms.JMSException if thrown by JMS API methods */ @Nullable T doInJms(Session session, QueueBrowser browser) throws JMSException; diff --git a/spring-jms/src/main/java/org/springframework/jms/core/JmsMessageOperations.java b/spring-jms/src/main/java/org/springframework/jms/core/JmsMessageOperations.java index 50bba1b04ff..ebb821da62c 100644 --- a/spring-jms/src/main/java/org/springframework/jms/core/JmsMessageOperations.java +++ b/spring-jms/src/main/java/org/springframework/jms/core/JmsMessageOperations.java @@ -18,7 +18,7 @@ package org.springframework.jms.core; import java.util.Map; -import javax.jms.Destination; +import jakarta.jms.Destination; import org.springframework.lang.Nullable; import org.springframework.messaging.Message; @@ -31,7 +31,7 @@ import org.springframework.messaging.core.MessageSendingOperations; /** * A specialization of {@link MessageSendingOperations}, {@link MessageReceivingOperations} * and {@link MessageRequestReplyOperations} for JMS related operations that allow to specify - * a destination name rather than the actual {@link javax.jms.Destination}. + * a destination name rather than the actual {@link jakarta.jms.Destination}. * * @author Stephane Nicoll * @since 4.1 diff --git a/spring-jms/src/main/java/org/springframework/jms/core/JmsMessagingTemplate.java b/spring-jms/src/main/java/org/springframework/jms/core/JmsMessagingTemplate.java index 7eaa1bd8d98..0835ae2e9b1 100644 --- a/spring-jms/src/main/java/org/springframework/jms/core/JmsMessagingTemplate.java +++ b/spring-jms/src/main/java/org/springframework/jms/core/JmsMessagingTemplate.java @@ -18,10 +18,10 @@ package org.springframework.jms.core; import java.util.Map; -import javax.jms.ConnectionFactory; -import javax.jms.Destination; -import javax.jms.JMSException; -import javax.jms.Session; +import jakarta.jms.ConnectionFactory; +import jakarta.jms.Destination; +import jakarta.jms.JMSException; +import jakarta.jms.Session; import org.springframework.beans.factory.InitializingBean; import org.springframework.jms.InvalidDestinationException; @@ -123,7 +123,7 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate /** * Set the {@link MessageConverter} to use to convert a {@link Message} from - * the messaging to and from a {@link javax.jms.Message}. By default, a + * the messaging to and from a {@link jakarta.jms.Message}. By default, a * {@link MessagingMessageConverter} is defined using a {@link SimpleMessageConverter} * to convert the payload of the message. *

      Consider configuring a {@link MessagingMessageConverter} with a different @@ -139,7 +139,7 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate /** * Return the {@link MessageConverter} to use to convert a {@link Message} - * from the messaging to and from a {@link javax.jms.Message}. + * from the messaging to and from a {@link jakarta.jms.Message}. */ public MessageConverter getJmsMessageConverter() { return this.jmsMessageConverter; @@ -373,7 +373,7 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate @Nullable protected Message doReceive(Destination destination) { try { - javax.jms.Message jmsMessage = obtainJmsTemplate().receive(destination); + jakarta.jms.Message jmsMessage = obtainJmsTemplate().receive(destination); return convertJmsMessage(jmsMessage); } catch (JmsException ex) { @@ -384,7 +384,7 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate @Nullable protected Message doReceive(String destinationName) { try { - javax.jms.Message jmsMessage = obtainJmsTemplate().receive(destinationName); + jakarta.jms.Message jmsMessage = obtainJmsTemplate().receive(destinationName); return convertJmsMessage(jmsMessage); } catch (JmsException ex) { @@ -396,7 +396,7 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate @Nullable protected Message doSendAndReceive(Destination destination, Message requestMessage) { try { - javax.jms.Message jmsMessage = obtainJmsTemplate().sendAndReceive( + jakarta.jms.Message jmsMessage = obtainJmsTemplate().sendAndReceive( destination, createMessageCreator(requestMessage)); return convertJmsMessage(jmsMessage); } @@ -408,7 +408,7 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate @Nullable protected Message doSendAndReceive(String destinationName, Message requestMessage) { try { - javax.jms.Message jmsMessage = obtainJmsTemplate().sendAndReceive( + jakarta.jms.Message jmsMessage = obtainJmsTemplate().sendAndReceive( destinationName, createMessageCreator(requestMessage)); return convertJmsMessage(jmsMessage); } @@ -431,7 +431,7 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate } @Nullable - protected Message convertJmsMessage(@Nullable javax.jms.Message message) { + protected Message convertJmsMessage(@Nullable jakarta.jms.Message message) { if (message == null) { return null; } @@ -468,7 +468,7 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate } @Override - public javax.jms.Message createMessage(Session session) throws JMSException { + public jakarta.jms.Message createMessage(Session session) throws JMSException { try { return this.messageConverter.toMessage(this.message, session); } diff --git a/spring-jms/src/main/java/org/springframework/jms/core/JmsOperations.java b/spring-jms/src/main/java/org/springframework/jms/core/JmsOperations.java index 9b2cef401b9..845be02a12e 100644 --- a/spring-jms/src/main/java/org/springframework/jms/core/JmsOperations.java +++ b/spring-jms/src/main/java/org/springframework/jms/core/JmsOperations.java @@ -16,9 +16,9 @@ package org.springframework.jms.core; -import javax.jms.Destination; -import javax.jms.Message; -import javax.jms.Queue; +import jakarta.jms.Destination; +import jakarta.jms.Message; +import jakarta.jms.Queue; import org.springframework.jms.JmsException; import org.springframework.lang.Nullable; @@ -41,10 +41,10 @@ import org.springframework.lang.Nullable; * @author Stephane Nicoll * @since 1.1 * @see JmsTemplate - * @see javax.jms.Destination - * @see javax.jms.Session - * @see javax.jms.MessageProducer - * @see javax.jms.MessageConsumer + * @see jakarta.jms.Destination + * @see jakarta.jms.Session + * @see jakarta.jms.MessageProducer + * @see jakarta.jms.MessageConsumer */ public interface JmsOperations { diff --git a/spring-jms/src/main/java/org/springframework/jms/core/JmsTemplate.java b/spring-jms/src/main/java/org/springframework/jms/core/JmsTemplate.java index a190fe48dcf..cdbc1bc0bb5 100644 --- a/spring-jms/src/main/java/org/springframework/jms/core/JmsTemplate.java +++ b/spring-jms/src/main/java/org/springframework/jms/core/JmsTemplate.java @@ -16,18 +16,18 @@ package org.springframework.jms.core; -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.DeliveryMode; -import javax.jms.Destination; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageConsumer; -import javax.jms.MessageProducer; -import javax.jms.Queue; -import javax.jms.QueueBrowser; -import javax.jms.Session; -import javax.jms.TemporaryQueue; +import jakarta.jms.Connection; +import jakarta.jms.ConnectionFactory; +import jakarta.jms.DeliveryMode; +import jakarta.jms.Destination; +import jakarta.jms.JMSException; +import jakarta.jms.Message; +import jakarta.jms.MessageConsumer; +import jakarta.jms.MessageProducer; +import jakarta.jms.Queue; +import jakarta.jms.QueueBrowser; +import jakarta.jms.Session; +import jakarta.jms.TemporaryQueue; import org.springframework.jms.JmsException; import org.springframework.jms.connection.ConnectionFactoryUtils; @@ -50,7 +50,7 @@ import org.springframework.util.Assert; * domain. * *

      Default settings for JMS Sessions are "not transacted" and "auto-acknowledge". - * As defined by the Java EE specification, the transaction and acknowledgement + * As defined by the Jakarta EE specification, the transaction and acknowledgement * parameters are ignored when a JMS Session is created inside an active * transaction, no matter if a JTA transaction or a Spring-managed transaction. * To configure them for native JMS usage, specify appropriate values for @@ -70,7 +70,7 @@ import org.springframework.util.Assert; * {@link org.springframework.jms.connection.SingleConnectionFactory} as a * decorator for your target {@code ConnectionFactory}, reusing a single * JMS Connection in a thread-safe fashion; this is often good enough for the - * purpose of sending messages via this template. In a Java EE environment, + * purpose of sending messages via this template. In a Jakarta EE environment, * make sure that the {@code ConnectionFactory} is obtained from the * application's environment naming context via JNDI; application servers * typically expose pooled, transaction-aware factories there. @@ -83,8 +83,8 @@ import org.springframework.util.Assert; * @see #setPubSubDomain * @see #setDestinationResolver * @see #setMessageConverter - * @see javax.jms.MessageProducer - * @see javax.jms.MessageConsumer + * @see jakarta.jms.MessageProducer + * @see jakarta.jms.MessageConsumer */ public class JmsTemplate extends JmsDestinationAccessor implements JmsOperations { @@ -195,7 +195,7 @@ public class JmsTemplate extends JmsDestinationAccessor implements JmsOperations * @see #convertAndSend(Object) * @see #convertAndSend(Object, MessagePostProcessor) * @see #setDestinationResolver - * @see #setDefaultDestination(javax.jms.Destination) + * @see #setDefaultDestination(jakarta.jms.Destination) */ public void setDefaultDestinationName(@Nullable String destinationName) { this.defaultDestination = destinationName; @@ -254,7 +254,7 @@ public class JmsTemplate extends JmsDestinationAccessor implements JmsOperations * Set whether message IDs are enabled. Default is "true". *

      This is only a hint to the JMS producer. * See the JMS javadocs for details. - * @see javax.jms.MessageProducer#setDisableMessageID + * @see jakarta.jms.MessageProducer#setDisableMessageID */ public void setMessageIdEnabled(boolean messageIdEnabled) { this.messageIdEnabled = messageIdEnabled; @@ -271,7 +271,7 @@ public class JmsTemplate extends JmsDestinationAccessor implements JmsOperations * Set whether message timestamps are enabled. Default is "true". *

      This is only a hint to the JMS producer. * See the JMS javadocs for details. - * @see javax.jms.MessageProducer#setDisableMessageTimestamp + * @see jakarta.jms.MessageProducer#setDisableMessageTimestamp */ public void setMessageTimestampEnabled(boolean messageTimestampEnabled) { this.messageTimestampEnabled = messageTimestampEnabled; @@ -287,7 +287,7 @@ public class JmsTemplate extends JmsDestinationAccessor implements JmsOperations /** * Set whether to inhibit the delivery of messages published by its own connection. * Default is "false". - * @see javax.jms.Session#createConsumer(javax.jms.Destination, String, boolean) + * @see jakarta.jms.Session#createConsumer(jakarta.jms.Destination, String, boolean) */ public void setPubSubNoLocal(boolean pubSubNoLocal) { this.pubSubNoLocal = pubSubNoLocal; @@ -308,9 +308,9 @@ public class JmsTemplate extends JmsDestinationAccessor implements JmsOperations * to indicate that a receive operation should check if a message is * immediately available without blocking. * @see #receiveFromConsumer(MessageConsumer, long) - * @see javax.jms.MessageConsumer#receive(long) - * @see javax.jms.MessageConsumer#receiveNoWait() - * @see javax.jms.MessageConsumer#receive() + * @see jakarta.jms.MessageConsumer#receive(long) + * @see jakarta.jms.MessageConsumer#receiveNoWait() + * @see jakarta.jms.MessageConsumer#receive() */ public void setReceiveTimeout(long receiveTimeout) { this.receiveTimeout = receiveTimeout; @@ -388,8 +388,8 @@ public class JmsTemplate extends JmsDestinationAccessor implements JmsOperations * mode accordingly, to either "PERSISTENT" (2) or "NON_PERSISTENT" (1). *

      Default is "true" a.k.a. delivery mode "PERSISTENT". * @see #setDeliveryMode(int) - * @see javax.jms.DeliveryMode#PERSISTENT - * @see javax.jms.DeliveryMode#NON_PERSISTENT + * @see jakarta.jms.DeliveryMode#PERSISTENT + * @see jakarta.jms.DeliveryMode#NON_PERSISTENT */ public void setDeliveryPersistent(boolean deliveryPersistent) { this.deliveryMode = (deliveryPersistent ? DeliveryMode.PERSISTENT : DeliveryMode.NON_PERSISTENT); @@ -402,10 +402,10 @@ public class JmsTemplate extends JmsDestinationAccessor implements JmsOperations * this is only used when "isExplicitQosEnabled" equals "true". * @param deliveryMode the delivery mode to use * @see #isExplicitQosEnabled - * @see javax.jms.DeliveryMode#PERSISTENT - * @see javax.jms.DeliveryMode#NON_PERSISTENT - * @see javax.jms.Message#DEFAULT_DELIVERY_MODE - * @see javax.jms.MessageProducer#send(javax.jms.Message, int, int, long) + * @see jakarta.jms.DeliveryMode#PERSISTENT + * @see jakarta.jms.DeliveryMode#NON_PERSISTENT + * @see jakarta.jms.Message#DEFAULT_DELIVERY_MODE + * @see jakarta.jms.MessageProducer#send(jakarta.jms.Message, int, int, long) */ public void setDeliveryMode(int deliveryMode) { this.deliveryMode = deliveryMode; @@ -423,8 +423,8 @@ public class JmsTemplate extends JmsDestinationAccessor implements JmsOperations *

      Since a default value may be defined administratively, * this is only used when "isExplicitQosEnabled" equals "true". * @see #isExplicitQosEnabled - * @see javax.jms.Message#DEFAULT_PRIORITY - * @see javax.jms.MessageProducer#send(javax.jms.Message, int, int, long) + * @see jakarta.jms.Message#DEFAULT_PRIORITY + * @see jakarta.jms.MessageProducer#send(jakarta.jms.Message, int, int, long) */ public void setPriority(int priority) { this.priority = priority; @@ -443,8 +443,8 @@ public class JmsTemplate extends JmsDestinationAccessor implements JmsOperations * this is only used when "isExplicitQosEnabled" equals "true". * @param timeToLive the message's lifetime (in milliseconds) * @see #isExplicitQosEnabled - * @see javax.jms.Message#DEFAULT_TIME_TO_LIVE - * @see javax.jms.MessageProducer#send(javax.jms.Message, int, int, long) + * @see jakarta.jms.Message#DEFAULT_TIME_TO_LIVE + * @see jakarta.jms.MessageProducer#send(jakarta.jms.Message, int, int, long) */ public void setTimeToLive(long timeToLive) { this.timeToLive = timeToLive; diff --git a/spring-jms/src/main/java/org/springframework/jms/core/MessageCreator.java b/spring-jms/src/main/java/org/springframework/jms/core/MessageCreator.java index d14ec884a25..80cf2a7e85f 100644 --- a/spring-jms/src/main/java/org/springframework/jms/core/MessageCreator.java +++ b/spring-jms/src/main/java/org/springframework/jms/core/MessageCreator.java @@ -16,9 +16,9 @@ package org.springframework.jms.core; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.Session; +import jakarta.jms.JMSException; +import jakarta.jms.Message; +import jakarta.jms.Session; /** * Creates a JMS message given a {@link Session}. @@ -27,7 +27,7 @@ import javax.jms.Session; * of the {@link JmsTemplate} class. * *

      Implementations do not need to concern themselves with - * checked {@code JMSExceptions} (from the '{@code javax.jms}' + * checked {@code JMSExceptions} (from the '{@code jakarta.jms}' * package) that may be thrown from operations they attempt. The * {@code JmsTemplate} will catch and handle these * {@code JMSExceptions} appropriately. @@ -43,7 +43,7 @@ public interface MessageCreator { * @param session the JMS {@link Session} to be used to create the * {@code Message} (never {@code null}) * @return the {@code Message} to be sent - * @throws javax.jms.JMSException if thrown by JMS API methods + * @throws jakarta.jms.JMSException if thrown by JMS API methods */ Message createMessage(Session session) throws JMSException; diff --git a/spring-jms/src/main/java/org/springframework/jms/core/MessagePostProcessor.java b/spring-jms/src/main/java/org/springframework/jms/core/MessagePostProcessor.java index 84c4c5da944..962e5caf519 100644 --- a/spring-jms/src/main/java/org/springframework/jms/core/MessagePostProcessor.java +++ b/spring-jms/src/main/java/org/springframework/jms/core/MessagePostProcessor.java @@ -16,8 +16,8 @@ package org.springframework.jms.core; -import javax.jms.JMSException; -import javax.jms.Message; +import jakarta.jms.JMSException; +import jakarta.jms.Message; /** * To be used with JmsTemplate's send method that converts an object to a message. @@ -30,7 +30,7 @@ import javax.jms.Message; * @author Mark Pollack * @since 1.1 * @see JmsTemplate#convertAndSend(String, Object, MessagePostProcessor) - * @see JmsTemplate#convertAndSend(javax.jms.Destination, Object, MessagePostProcessor) + * @see JmsTemplate#convertAndSend(jakarta.jms.Destination, Object, MessagePostProcessor) * @see org.springframework.jms.support.converter.MessageConverter */ @FunctionalInterface @@ -42,7 +42,7 @@ public interface MessagePostProcessor { * @param message the JMS message from the MessageConverter * @return a post-processed variant of the message, or simply the incoming * message; never {@code null} - * @throws javax.jms.JMSException if thrown by JMS API methods + * @throws jakarta.jms.JMSException if thrown by JMS API methods */ Message postProcessMessage(Message message) throws JMSException; diff --git a/spring-jms/src/main/java/org/springframework/jms/core/ProducerCallback.java b/spring-jms/src/main/java/org/springframework/jms/core/ProducerCallback.java index 961ad4aa803..952d3a6d15a 100644 --- a/spring-jms/src/main/java/org/springframework/jms/core/ProducerCallback.java +++ b/spring-jms/src/main/java/org/springframework/jms/core/ProducerCallback.java @@ -16,9 +16,9 @@ package org.springframework.jms.core; -import javax.jms.JMSException; -import javax.jms.MessageProducer; -import javax.jms.Session; +import jakarta.jms.JMSException; +import jakarta.jms.MessageProducer; +import jakarta.jms.Session; import org.springframework.lang.Nullable; @@ -36,7 +36,7 @@ import org.springframework.lang.Nullable; * @since 1.1 * @param the result type * @see JmsTemplate#execute(ProducerCallback) - * @see JmsTemplate#execute(javax.jms.Destination, ProducerCallback) + * @see JmsTemplate#execute(jakarta.jms.Destination, ProducerCallback) * @see JmsTemplate#execute(String, ProducerCallback) */ @FunctionalInterface @@ -50,7 +50,7 @@ public interface ProducerCallback { * @param producer the JMS {@code MessageProducer} object to use * @return a result object from working with the {@code Session}, if any * (or {@code null} if none) - * @throws javax.jms.JMSException if thrown by JMS API methods + * @throws jakarta.jms.JMSException if thrown by JMS API methods */ @Nullable T doInJms(Session session, MessageProducer producer) throws JMSException; diff --git a/spring-jms/src/main/java/org/springframework/jms/core/SessionCallback.java b/spring-jms/src/main/java/org/springframework/jms/core/SessionCallback.java index 8bbd1fe31f6..99dfe64b0ca 100644 --- a/spring-jms/src/main/java/org/springframework/jms/core/SessionCallback.java +++ b/spring-jms/src/main/java/org/springframework/jms/core/SessionCallback.java @@ -16,8 +16,8 @@ package org.springframework.jms.core; -import javax.jms.JMSException; -import javax.jms.Session; +import jakarta.jms.JMSException; +import jakarta.jms.Session; import org.springframework.lang.Nullable; @@ -41,7 +41,7 @@ public interface SessionCallback { * @param session the JMS {@code Session} * @return a result object from working with the {@code Session}, if any * (or {@code null} if none) - * @throws javax.jms.JMSException if thrown by JMS API methods + * @throws jakarta.jms.JMSException if thrown by JMS API methods */ @Nullable T doInJms(Session session) throws JMSException; diff --git a/spring-jms/src/main/java/org/springframework/jms/core/support/JmsGatewaySupport.java b/spring-jms/src/main/java/org/springframework/jms/core/support/JmsGatewaySupport.java index 0ce0650a00c..f85c3db9925 100644 --- a/spring-jms/src/main/java/org/springframework/jms/core/support/JmsGatewaySupport.java +++ b/spring-jms/src/main/java/org/springframework/jms/core/support/JmsGatewaySupport.java @@ -16,8 +16,7 @@ package org.springframework.jms.core.support; -import javax.jms.ConnectionFactory; - +import jakarta.jms.ConnectionFactory; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -54,7 +53,7 @@ public abstract class JmsGatewaySupport implements InitializingBean { * Set the JMS connection factory to be used by the gateway. * Will automatically create a JmsTemplate for the given ConnectionFactory. * @see #createJmsTemplate - * @see #setConnectionFactory(javax.jms.ConnectionFactory) + * @see #setConnectionFactory(jakarta.jms.ConnectionFactory) */ public final void setConnectionFactory(ConnectionFactory connectionFactory) { this.jmsTemplate = createJmsTemplate(connectionFactory); @@ -83,7 +82,7 @@ public abstract class JmsGatewaySupport implements InitializingBean { /** * Set the JmsTemplate for the gateway. - * @see #setConnectionFactory(javax.jms.ConnectionFactory) + * @see #setConnectionFactory(jakarta.jms.ConnectionFactory) */ public final void setJmsTemplate(@Nullable JmsTemplate jmsTemplate) { this.jmsTemplate = jmsTemplate; diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/AbstractJmsListeningContainer.java b/spring-jms/src/main/java/org/springframework/jms/listener/AbstractJmsListeningContainer.java index b7e1734bb99..30ee11c812b 100644 --- a/spring-jms/src/main/java/org/springframework/jms/listener/AbstractJmsListeningContainer.java +++ b/spring-jms/src/main/java/org/springframework/jms/listener/AbstractJmsListeningContainer.java @@ -20,8 +20,8 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import javax.jms.Connection; -import javax.jms.JMSException; +import jakarta.jms.Connection; +import jakarta.jms.JMSException; import org.springframework.beans.factory.BeanNameAware; import org.springframework.beans.factory.DisposableBean; @@ -94,7 +94,7 @@ public abstract class AbstractJmsListeningContainer extends JmsDestinationAccess *

      Note that client IDs need to be unique among all active Connections * of the underlying JMS provider. Furthermore, a client ID can only be * assigned if the original ConnectionFactory hasn't already assigned one. - * @see javax.jms.Connection#setClientID + * @see jakarta.jms.Connection#setClientID * @see #setConnectionFactory */ public void setClientId(@Nullable String clientId) { @@ -191,7 +191,7 @@ public abstract class AbstractJmsListeningContainer extends JmsDestinationAccess /** * Initialize this container. - *

      Creates a JMS Connection, starts the {@link javax.jms.Connection} + *

      Creates a JMS Connection, starts the {@link jakarta.jms.Connection} * (if {@link #setAutoStartup(boolean) "autoStartup"} hasn't been turned off), * and calls {@link #doInitialize()}. * @throws org.springframework.jms.JmsException if startup failed @@ -439,7 +439,7 @@ public abstract class AbstractJmsListeningContainer extends JmsDestinationAccess /** * Start the shared Connection. * @throws JMSException if thrown by JMS API methods - * @see javax.jms.Connection#start() + * @see jakarta.jms.Connection#start() */ protected void startSharedConnection() throws JMSException { synchronized (this.sharedConnectionMonitor) { @@ -448,7 +448,7 @@ public abstract class AbstractJmsListeningContainer extends JmsDestinationAccess try { this.sharedConnection.start(); } - catch (javax.jms.IllegalStateException ex) { + catch (jakarta.jms.IllegalStateException ex) { logger.debug("Ignoring Connection start exception - assuming already started: " + ex); } } @@ -458,7 +458,7 @@ public abstract class AbstractJmsListeningContainer extends JmsDestinationAccess /** * Stop the shared Connection. * @throws JMSException if thrown by JMS API methods - * @see javax.jms.Connection#start() + * @see jakarta.jms.Connection#start() */ protected void stopSharedConnection() throws JMSException { synchronized (this.sharedConnectionMonitor) { @@ -467,7 +467,7 @@ public abstract class AbstractJmsListeningContainer extends JmsDestinationAccess try { this.sharedConnection.stop(); } - catch (javax.jms.IllegalStateException ex) { + catch (jakarta.jms.IllegalStateException ex) { logger.debug("Ignoring Connection stop exception - assuming already stopped: " + ex); } } diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/AbstractMessageListenerContainer.java b/spring-jms/src/main/java/org/springframework/jms/listener/AbstractMessageListenerContainer.java index 534e12285f0..eb4c7e4e46c 100644 --- a/spring-jms/src/main/java/org/springframework/jms/listener/AbstractMessageListenerContainer.java +++ b/spring-jms/src/main/java/org/springframework/jms/listener/AbstractMessageListenerContainer.java @@ -16,16 +16,16 @@ package org.springframework.jms.listener; -import javax.jms.Connection; -import javax.jms.Destination; -import javax.jms.ExceptionListener; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageConsumer; -import javax.jms.MessageListener; -import javax.jms.Queue; -import javax.jms.Session; -import javax.jms.Topic; +import jakarta.jms.Connection; +import jakarta.jms.Destination; +import jakarta.jms.ExceptionListener; +import jakarta.jms.JMSException; +import jakarta.jms.Message; +import jakarta.jms.MessageConsumer; +import jakarta.jms.MessageListener; +import jakarta.jms.Queue; +import jakarta.jms.Session; +import jakarta.jms.Topic; import org.springframework.jms.support.JmsUtils; import org.springframework.jms.support.QosSettings; @@ -35,12 +35,12 @@ import org.springframework.util.ErrorHandler; /** * Abstract base class for Spring message listener container implementations. - * Can either host a standard JMS {@link javax.jms.MessageListener} or Spring's + * Can either host a standard JMS {@link jakarta.jms.MessageListener} or Spring's * {@link SessionAwareMessageListener} for actual message processing. * *

      Usually holds a single JMS {@link Connection} that all listeners are supposed * to be registered on, which is the standard JMS way of managing listener sessions. - * Can alternatively also be used with a fresh Connection per listener, for Java EE + * Can alternatively also be used with a fresh Connection per listener, for Jakarta EE * style XA-aware JMS messaging. The actual registration process is up to concrete * subclasses. * @@ -99,7 +99,7 @@ import org.springframework.util.ErrorHandler; * supported by {@link DefaultMessageListenerContainer}, through specifying * an external "transactionManager" (typically a * {@link org.springframework.transaction.jta.JtaTransactionManager}, with - * a corresponding XA-aware JMS {@link javax.jms.ConnectionFactory} passed in + * a corresponding XA-aware JMS {@link jakarta.jms.ConnectionFactory} passed in * as "connectionFactory"). *

    * Note that XA transaction coordination adds significant runtime overhead, @@ -116,7 +116,7 @@ import org.springframework.util.ErrorHandler; *
  • Alternatively, specify a * {@link org.springframework.transaction.jta.JtaTransactionManager} as * "transactionManager" for a fully XA-aware JMS provider - typically when - * running on a Java EE server, but also for other environments with a JTA + * running on a Jakarta EE server, but also for other environments with a JTA * transaction manager present. This will give full "exactly-once" guarantees * without custom duplicate message checks, at the price of additional * runtime processing overhead. @@ -132,7 +132,7 @@ import org.springframework.util.ErrorHandler; * @author Stephane Nicoll * @since 2.0 * @see #setMessageListener - * @see javax.jms.MessageListener + * @see jakarta.jms.MessageListener * @see SessionAwareMessageListener * @see #handleListenerException * @see DefaultMessageListenerContainer @@ -222,7 +222,7 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen * container picking up the new destination immediately (works e.g. with * DefaultMessageListenerContainer, as long as the cache level is less than * CACHE_CONSUMER). However, this is considered advanced usage; use it with care! - * @see #setDestination(javax.jms.Destination) + * @see #setDestination(jakarta.jms.Destination) */ public void setDestinationName(@Nullable String destinationName) { this.destination = destinationName; @@ -280,7 +280,7 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen * CACHE_CONSUMER). However, this is considered advanced usage; use it with care! * @throws IllegalArgumentException if the supplied listener is not a * {@link MessageListener} or a {@link SessionAwareMessageListener} - * @see javax.jms.MessageListener + * @see jakarta.jms.MessageListener * @see SessionAwareMessageListener */ public void setMessageListener(@Nullable Object messageListener) { @@ -307,7 +307,7 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen * @param messageListener the message listener object to check * @throws IllegalArgumentException if the supplied listener is not a * {@link MessageListener} or a {@link SessionAwareMessageListener} - * @see javax.jms.MessageListener + * @see jakarta.jms.MessageListener * @see SessionAwareMessageListener */ protected void checkMessageListener(@Nullable Object messageListener) { @@ -449,7 +449,7 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen * Set whether to inhibit the delivery of messages published by its own connection. * Default is "false". * @since 4.1 - * @see javax.jms.Session#createConsumer(javax.jms.Destination, String, boolean) + * @see jakarta.jms.Session#createConsumer(jakarta.jms.Destination, String, boolean) */ public void setPubSubNoLocal(boolean pubSubNoLocal) { this.pubSubNoLocal = pubSubNoLocal; @@ -478,8 +478,8 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen } /** - * Return whether the Publish/Subscribe domain ({@link javax.jms.Topic Topics}) is used - * for replies. Otherwise, the Point-to-Point domain ({@link javax.jms.Queue Queues}) + * Return whether the Publish/Subscribe domain ({@link jakarta.jms.Topic Topics}) is used + * for replies. Otherwise, the Point-to-Point domain ({@link jakarta.jms.Queue Queues}) * is used. * @since 4.2 */ @@ -755,7 +755,7 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen * @param listener the JMS MessageListener to invoke * @param message the received JMS Message * @throws JMSException if thrown by JMS API methods - * @see javax.jms.MessageListener#onMessage + * @see jakarta.jms.MessageListener#onMessage */ protected void doInvokeListener(MessageListener listener, Message message) throws JMSException { listener.onMessage(message); @@ -765,7 +765,7 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen * Perform a commit or message acknowledgement, as appropriate. * @param session the JMS Session to commit * @param message the Message to acknowledge - * @throws javax.jms.JMSException in case of commit failure + * @throws jakarta.jms.JMSException in case of commit failure */ protected void commitIfNecessary(Session session, @Nullable Message message) throws JMSException { // Commit session or acknowledge message. @@ -784,7 +784,7 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen /** * Perform a rollback, if appropriate. * @param session the JMS Session to rollback - * @throws javax.jms.JMSException in case of a rollback error + * @throws jakarta.jms.JMSException in case of a rollback error */ protected void rollbackIfNecessary(Session session) throws JMSException { if (session.getTransacted()) { @@ -802,7 +802,7 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen * Perform a rollback, handling rollback exceptions properly. * @param session the JMS Session to rollback * @param ex the thrown application exception or error - * @throws javax.jms.JMSException in case of a rollback error + * @throws jakarta.jms.JMSException in case of a rollback error */ protected void rollbackOnExceptionIfNecessary(Session session, Throwable ex) throws JMSException { try { @@ -850,7 +850,7 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen * @param session the JMS Session to create a MessageConsumer for * @param destination the JMS Destination to create a MessageConsumer for * @return the new JMS MessageConsumer - * @throws javax.jms.JMSException if thrown by JMS API methods + * @throws jakarta.jms.JMSException if thrown by JMS API methods */ protected MessageConsumer createConsumer(Session session, Destination destination) throws JMSException { if (isPubSubDomain() && destination instanceof Topic) { diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/AbstractPollingMessageListenerContainer.java b/spring-jms/src/main/java/org/springframework/jms/listener/AbstractPollingMessageListenerContainer.java index 0a6287169a4..e681aaef1b1 100644 --- a/spring-jms/src/main/java/org/springframework/jms/listener/AbstractPollingMessageListenerContainer.java +++ b/spring-jms/src/main/java/org/springframework/jms/listener/AbstractPollingMessageListenerContainer.java @@ -16,12 +16,12 @@ package org.springframework.jms.listener; -import javax.jms.Connection; -import javax.jms.Destination; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageConsumer; -import javax.jms.Session; +import jakarta.jms.Connection; +import jakarta.jms.Destination; +import jakarta.jms.JMSException; +import jakarta.jms.Message; +import jakarta.jms.MessageConsumer; +import jakarta.jms.Session; import org.springframework.jms.connection.ConnectionFactoryUtils; import org.springframework.jms.connection.JmsResourceHolder; @@ -38,7 +38,7 @@ import org.springframework.util.Assert; /** * Base class for listener container implementations which are based on polling. - * Provides support for listener handling based on {@link javax.jms.MessageConsumer}, + * Provides support for listener handling based on {@link jakarta.jms.MessageConsumer}, * optionally participating in externally managed transactions. * *

    This listener container variant is built for repeated polling attempts, @@ -48,7 +48,7 @@ import org.springframework.util.Assert; * configured through the {@link #setReceiveTimeout "receiveTimeout"} property. * *

    The underlying mechanism is based on standard JMS MessageConsumer handling, - * which is perfectly compatible with both native JMS and JMS in a Java EE environment. + * which is perfectly compatible with both native JMS and JMS in a Jakarta EE environment. * Neither the JMS {@code MessageConsumer.setMessageListener} facility nor the JMS * ServerSessionPool facility is required. A further advantage of this approach is * full control over the listening process, allowing for custom scaling and throttling @@ -59,7 +59,7 @@ import org.springframework.util.Assert; * {@link org.springframework.transaction.PlatformTransactionManager} into the * {@link #setTransactionManager "transactionManager"} property. This will usually * be a {@link org.springframework.transaction.jta.JtaTransactionManager} in a - * Java EE environment, in combination with a JTA-aware JMS ConnectionFactory + * Jakarta EE environment, in combination with a JTA-aware JMS ConnectionFactory * obtained from JNDI (check your application server's documentation). * *

    This base class does not assume any specific mechanism for asynchronous @@ -165,9 +165,9 @@ public abstract class AbstractPollingMessageListenerContainer extends AbstractMe * discouraged since such a listener container cannot cleanly shut down. * A negative value such as -1 indicates a no-wait receive operation. * @see #receiveFromConsumer(MessageConsumer, long) - * @see javax.jms.MessageConsumer#receive(long) - * @see javax.jms.MessageConsumer#receiveNoWait() - * @see javax.jms.MessageConsumer#receive() + * @see jakarta.jms.MessageConsumer#receive(long) + * @see jakarta.jms.MessageConsumer#receiveNoWait() + * @see jakarta.jms.MessageConsumer#receive() * @see #setTransactionTimeout */ public void setReceiveTimeout(long receiveTimeout) { @@ -211,7 +211,7 @@ public abstract class AbstractPollingMessageListenerContainer extends AbstractMe * registering a MessageListener for the specified listener. * @param session the JMS Session to work on * @return the MessageConsumer - * @throws javax.jms.JMSException if thrown by JMS methods + * @throws jakarta.jms.JMSException if thrown by JMS methods * @see #receiveAndExecute */ protected MessageConsumer createListenerConsumer(Session session) throws JMSException { @@ -266,7 +266,7 @@ public abstract class AbstractPollingMessageListenerContainer extends AbstractMe * @param status the TransactionStatus (may be {@code null}) * @return whether a message has been received * @throws JMSException if thrown by JMS methods - * @see #doExecuteListener(javax.jms.Session, javax.jms.Message) + * @see #doExecuteListener(jakarta.jms.Session, jakarta.jms.Message) */ protected boolean doReceiveAndExecute(Object invoker, @Nullable Session session, @Nullable MessageConsumer consumer, @Nullable TransactionStatus status) throws JMSException { diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/DefaultMessageListenerContainer.java b/spring-jms/src/main/java/org/springframework/jms/listener/DefaultMessageListenerContainer.java index 856be8c914d..41fc11034f6 100644 --- a/spring-jms/src/main/java/org/springframework/jms/listener/DefaultMessageListenerContainer.java +++ b/spring-jms/src/main/java/org/springframework/jms/listener/DefaultMessageListenerContainer.java @@ -20,10 +20,10 @@ import java.util.HashSet; import java.util.Set; import java.util.concurrent.Executor; -import javax.jms.Connection; -import javax.jms.JMSException; -import javax.jms.MessageConsumer; -import javax.jms.Session; +import jakarta.jms.Connection; +import jakarta.jms.JMSException; +import jakarta.jms.MessageConsumer; +import jakarta.jms.Session; import org.springframework.core.Constants; import org.springframework.core.task.SimpleAsyncTaskExecutor; @@ -45,7 +45,7 @@ import org.springframework.util.backoff.FixedBackOff; * Message listener container variant that uses plain JMS client APIs, specifically * a loop of {@code MessageConsumer.receive()} calls that also allow for * transactional reception of messages (registering them with XA transactions). - * Designed to work in a native JMS environment as well as in a Java EE environment, + * Designed to work in a native JMS environment as well as in a Jakarta EE environment, * with only minimal differences in configuration. * *

    This is a simple but nevertheless powerful form of message listener container. @@ -62,7 +62,7 @@ import org.springframework.util.backoff.FixedBackOff; * abstraction. By default, the specified number of invoker tasks will be created * on startup, according to the {@link #setConcurrentConsumers "concurrentConsumers"} * setting. Specify an alternative {@code TaskExecutor} to integrate with an existing - * thread pool facility (such as a Java EE server's), for example using a + * thread pool facility (such as a Jakarta EE server's), for example using a * {@link org.springframework.scheduling.commonj.WorkManagerTaskExecutor CommonJ WorkManager}. * With a native JMS setup, each of those listener threads is going to use a * cached JMS {@code Session} and {@code MessageConsumer} (only refreshed in case @@ -73,11 +73,11 @@ import org.springframework.util.backoff.FixedBackOff; * {@link org.springframework.transaction.PlatformTransactionManager} into the * {@link #setTransactionManager "transactionManager"} property. This will usually * be a {@link org.springframework.transaction.jta.JtaTransactionManager} in a - * Java EE environment, in combination with a JTA-aware JMS {@code ConnectionFactory} - * obtained from JNDI (check your Java EE server's documentation). Note that this + * Jakarta EE environment, in combination with a JTA-aware JMS {@code ConnectionFactory} + * obtained from JNDI (check your Jakarta EE server's documentation). Note that this * listener container will automatically reobtain all JMS handles for each transaction * in case an external transaction manager is specified, for compatibility with - * all Java EE servers (in particular JBoss). This non-caching behavior can be + * all Jakarta EE servers (in particular JBoss). This non-caching behavior can be * overridden through the {@link #setCacheLevel "cacheLevel"} / * {@link #setCacheLevelName "cacheLevelName"} property, enforcing caching of * the {@code Connection} (or also {@code Session} and {@code MessageConsumer}) @@ -119,7 +119,7 @@ import org.springframework.util.backoff.FixedBackOff; * @since 2.0 * @see #setTransactionManager * @see #setCacheLevel - * @see javax.jms.MessageConsumer#receive(long) + * @see jakarta.jms.MessageConsumer#receive(long) * @see SimpleMessageListenerContainer * @see org.springframework.jms.listener.endpoint.JmsMessageEndpointManager */ @@ -219,7 +219,7 @@ public class DefaultMessageListenerContainer extends AbstractPollingMessageListe * of concurrent consumers. *

    Specify an alternative {@code TaskExecutor} for integration with an existing * thread pool. Note that this really only adds value if the threads are - * managed in a specific fashion, for example within a Java EE environment. + * managed in a specific fashion, for example within a Jakarta EE environment. * A plain thread pool does not add much value, as this listener container * will occupy a number of threads for its entire lifetime. * @see #setConcurrentConsumers @@ -273,7 +273,7 @@ public class DefaultMessageListenerContainer extends AbstractPollingMessageListe *

    Default is {@link #CACHE_NONE} if an external transaction manager has been specified * (to reobtain all resources freshly within the scope of the external transaction), * and {@link #CACHE_CONSUMER} otherwise (operating with local JMS resources). - *

    Some Java EE servers only register their JMS resources with an ongoing XA + *

    Some Jakarta EE servers only register their JMS resources with an ongoing XA * transaction in case of a freshly obtained JMS {@code Connection} and {@code Session}, * which is why this listener container by default does not cache any of those. * However, depending on the rules of your server with respect to the caching diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/LocallyExposedJmsResourceHolder.java b/spring-jms/src/main/java/org/springframework/jms/listener/LocallyExposedJmsResourceHolder.java index 2adad4f3cdb..c0148da51fc 100644 --- a/spring-jms/src/main/java/org/springframework/jms/listener/LocallyExposedJmsResourceHolder.java +++ b/spring-jms/src/main/java/org/springframework/jms/listener/LocallyExposedJmsResourceHolder.java @@ -16,7 +16,7 @@ package org.springframework.jms.listener; -import javax.jms.Session; +import jakarta.jms.Session; import org.springframework.jms.connection.JmsResourceHolder; diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/MessageListenerContainer.java b/spring-jms/src/main/java/org/springframework/jms/listener/MessageListenerContainer.java index 89bfe78daac..8610e2f7e4a 100644 --- a/spring-jms/src/main/java/org/springframework/jms/listener/MessageListenerContainer.java +++ b/spring-jms/src/main/java/org/springframework/jms/listener/MessageListenerContainer.java @@ -40,7 +40,7 @@ public interface MessageListenerContainer extends SmartLifecycle { /** * Return the {@link MessageConverter} that can be used to - * convert {@link javax.jms.Message}, if any. + * convert {@link jakarta.jms.Message}, if any. */ @Nullable MessageConverter getMessageConverter(); @@ -53,15 +53,15 @@ public interface MessageListenerContainer extends SmartLifecycle { DestinationResolver getDestinationResolver(); /** - * Return whether the Publish/Subscribe domain ({@link javax.jms.Topic Topics}) is used. - * Otherwise, the Point-to-Point domain ({@link javax.jms.Queue Queues}) is used. + * Return whether the Publish/Subscribe domain ({@link jakarta.jms.Topic Topics}) is used. + * Otherwise, the Point-to-Point domain ({@link jakarta.jms.Queue Queues}) is used. */ boolean isPubSubDomain(); /** * Return whether the reply destination uses Publish/Subscribe domain - * ({@link javax.jms.Topic Topics}). Otherwise, the Point-to-Point domain - * ({@link javax.jms.Queue Queues}) is used. + * ({@link jakarta.jms.Topic Topics}). Otherwise, the Point-to-Point domain + * ({@link jakarta.jms.Queue Queues}) is used. *

    By default, the value is identical to {@link #isPubSubDomain()}. */ boolean isReplyPubSubDomain(); diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/SessionAwareMessageListener.java b/spring-jms/src/main/java/org/springframework/jms/listener/SessionAwareMessageListener.java index af07dfae5a6..f2ba17487c0 100644 --- a/spring-jms/src/main/java/org/springframework/jms/listener/SessionAwareMessageListener.java +++ b/spring-jms/src/main/java/org/springframework/jms/listener/SessionAwareMessageListener.java @@ -16,12 +16,12 @@ package org.springframework.jms.listener; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.Session; +import jakarta.jms.JMSException; +import jakarta.jms.Message; +import jakarta.jms.Session; /** - * Variant of the standard JMS {@link javax.jms.MessageListener} interface, + * Variant of the standard JMS {@link jakarta.jms.MessageListener} interface, * offering not only the received Message but also the underlying * JMS Session object. The latter can be used to send reply messages, * without the need to access an external Connection/Session, @@ -40,7 +40,7 @@ import javax.jms.Session; * @see DefaultMessageListenerContainer * @see SimpleMessageListenerContainer * @see org.springframework.jms.listener.endpoint.JmsMessageEndpointManager - * @see javax.jms.MessageListener + * @see jakarta.jms.MessageListener */ @FunctionalInterface public interface SessionAwareMessageListener { diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/SimpleMessageListenerContainer.java b/spring-jms/src/main/java/org/springframework/jms/listener/SimpleMessageListenerContainer.java index 469dfd43c87..b45de7781a6 100644 --- a/spring-jms/src/main/java/org/springframework/jms/listener/SimpleMessageListenerContainer.java +++ b/spring-jms/src/main/java/org/springframework/jms/listener/SimpleMessageListenerContainer.java @@ -20,14 +20,14 @@ import java.util.HashSet; import java.util.Set; import java.util.concurrent.Executor; -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.Destination; -import javax.jms.ExceptionListener; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageConsumer; -import javax.jms.Session; +import jakarta.jms.Connection; +import jakarta.jms.ConnectionFactory; +import jakarta.jms.Destination; +import jakarta.jms.ExceptionListener; +import jakarta.jms.JMSException; +import jakarta.jms.Message; +import jakarta.jms.MessageConsumer; +import jakarta.jms.Session; import org.springframework.jms.support.JmsUtils; import org.springframework.lang.Nullable; @@ -59,7 +59,7 @@ import org.springframework.util.Assert; * * @author Juergen Hoeller * @since 2.0 - * @see javax.jms.MessageConsumer#setMessageListener + * @see jakarta.jms.MessageConsumer#setMessageListener * @see DefaultMessageListenerContainer * @see org.springframework.jms.listener.endpoint.JmsMessageEndpointManager */ @@ -174,7 +174,7 @@ public class SimpleMessageListenerContainer extends AbstractMessageListenerConta * underlying Session. As a consequence, it is not recommended to use * this setting with a {@link SessionAwareMessageListener}, at least not * if the latter performs actual work on the given Session. A standard - * {@link javax.jms.MessageListener} will work fine, in general. + * {@link jakarta.jms.MessageListener} will work fine, in general. * @see #setConcurrentConsumers * @see org.springframework.core.task.SimpleAsyncTaskExecutor * @see org.springframework.scheduling.commonj.WorkManagerTaskExecutor diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/SubscriptionNameProvider.java b/spring-jms/src/main/java/org/springframework/jms/listener/SubscriptionNameProvider.java index c8622a78c06..d1178618d9d 100644 --- a/spring-jms/src/main/java/org/springframework/jms/listener/SubscriptionNameProvider.java +++ b/spring-jms/src/main/java/org/springframework/jms/listener/SubscriptionNameProvider.java @@ -21,7 +21,7 @@ package org.springframework.jms.listener; * name for a durable subscription that they might be registered with. Otherwise * the listener class name will be used as a default subscription name. * - *

    Applies to {@link javax.jms.MessageListener} objects as well as to + *

    Applies to {@link jakarta.jms.MessageListener} objects as well as to * {@link SessionAwareMessageListener} objects and plain listener methods * (as supported by {@link org.springframework.jms.listener.adapter.MessageListenerAdapter}. * diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/adapter/AbstractAdaptableMessageListener.java b/spring-jms/src/main/java/org/springframework/jms/listener/adapter/AbstractAdaptableMessageListener.java index e4b9cd44261..0bfec387262 100644 --- a/spring-jms/src/main/java/org/springframework/jms/listener/adapter/AbstractAdaptableMessageListener.java +++ b/spring-jms/src/main/java/org/springframework/jms/listener/adapter/AbstractAdaptableMessageListener.java @@ -16,15 +16,14 @@ package org.springframework.jms.listener.adapter; -import javax.jms.BytesMessage; -import javax.jms.Destination; -import javax.jms.InvalidDestinationException; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageListener; -import javax.jms.MessageProducer; -import javax.jms.Session; - +import jakarta.jms.BytesMessage; +import jakarta.jms.Destination; +import jakarta.jms.InvalidDestinationException; +import jakarta.jms.JMSException; +import jakarta.jms.Message; +import jakarta.jms.MessageListener; +import jakarta.jms.MessageProducer; +import jakarta.jms.Session; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -96,7 +95,7 @@ public abstract class AbstractAdaptableMessageListener * "JMSReplyTo" field. *

    Alternatively, specify a JMS Destination object as "defaultResponseDestination". * @see #setDestinationResolver - * @see #setDefaultResponseDestination(javax.jms.Destination) + * @see #setDefaultResponseDestination(jakarta.jms.Destination) */ public void setDefaultResponseQueueName(String destinationName) { this.defaultResponseDestination = new DestinationNameHolder(destinationName, false); @@ -108,7 +107,7 @@ public abstract class AbstractAdaptableMessageListener * "JMSReplyTo" field. *

    Alternatively, specify a JMS Destination object as "defaultResponseDestination". * @see #setDestinationResolver - * @see #setDefaultResponseDestination(javax.jms.Destination) + * @see #setDefaultResponseDestination(jakarta.jms.Destination) */ public void setDefaultResponseTopicName(String destinationName) { this.defaultResponseDestination = new DestinationNameHolder(destinationName, true); @@ -139,9 +138,9 @@ public abstract class AbstractAdaptableMessageListener * listener method arguments, and objects returned from listener * methods back to JMS messages. *

    The default converter is a {@link SimpleMessageConverter}, which is able - * to handle {@link javax.jms.BytesMessage BytesMessages}, - * {@link javax.jms.TextMessage TextMessages} and - * {@link javax.jms.ObjectMessage ObjectMessages}. + * to handle {@link jakarta.jms.BytesMessage BytesMessages}, + * {@link jakarta.jms.TextMessage TextMessages} and + * {@link jakarta.jms.ObjectMessage ObjectMessages}. */ public void setMessageConverter(@Nullable MessageConverter messageConverter) { this.messageConverter = messageConverter; @@ -208,7 +207,7 @@ public abstract class AbstractAdaptableMessageListener * message listener container) for handling result objects as well. * @param message the incoming JMS message * @see #handleListenerException - * @see #onMessage(javax.jms.Message, javax.jms.Session) + * @see #onMessage(jakarta.jms.Message, jakarta.jms.Session) */ @Override public void onMessage(Message message) { @@ -230,7 +229,7 @@ public abstract class AbstractAdaptableMessageListener * In case of the Spring {@link SessionAwareMessageListener} mechanism, * exceptions get handled by the caller instead. * @param ex the exception to handle - * @see #onMessage(javax.jms.Message) + * @see #onMessage(jakarta.jms.Message) */ protected void handleListenerException(Throwable ex) { logger.error("Listener execution failed", ex); @@ -343,7 +342,7 @@ public abstract class AbstractAdaptableMessageListener * @param request the original incoming JMS message * @param response the outgoing JMS message about to be sent * @throws JMSException if thrown by JMS API methods - * @see javax.jms.Message#setJMSCorrelationID + * @see jakarta.jms.Message#setJMSCorrelationID */ protected void postProcessResponse(Message request, Message response) throws JMSException { String correlation = request.getJMSCorrelationID(); @@ -373,15 +372,15 @@ public abstract class AbstractAdaptableMessageListener * it is returned; if it is {@code null}, then the configured * {@link #resolveDefaultResponseDestination default response destination} * is returned; if this too is {@code null}, then an - * {@link javax.jms.InvalidDestinationException} is thrown. + * {@link jakarta.jms.InvalidDestinationException} is thrown. * @param request the original incoming JMS message * @param response the outgoing JMS message about to be sent * @param session the JMS Session to operate on * @return the response destination (never {@code null}) * @throws JMSException if thrown by JMS API methods - * @throws javax.jms.InvalidDestinationException if no {@link Destination} can be determined + * @throws jakarta.jms.InvalidDestinationException if no {@link Destination} can be determined * @see #setDefaultResponseDestination - * @see javax.jms.Message#getJMSReplyTo() + * @see jakarta.jms.Message#getJMSReplyTo() */ protected Destination getResponseDestination(Message request, Message response, Session session) throws JMSException { @@ -401,7 +400,7 @@ public abstract class AbstractAdaptableMessageListener * Resolve the default response destination into a JMS {@link Destination}, using this * accessor's {@link DestinationResolver} in case of a destination name. * @return the located {@link Destination} - * @throws javax.jms.JMSException if resolution failed + * @throws jakarta.jms.JMSException if resolution failed * @see #setDefaultResponseDestination * @see #setDefaultResponseQueueName * @see #setDefaultResponseTopicName @@ -426,8 +425,8 @@ public abstract class AbstractAdaptableMessageListener * @param session the JMS session to operate on * @throws JMSException if thrown by JMS API methods * @see #postProcessProducer - * @see javax.jms.Session#createProducer - * @see javax.jms.MessageProducer#send + * @see jakarta.jms.Session#createProducer + * @see jakarta.jms.MessageProducer#send */ protected void sendResponse(Session session, Destination destination, Message response) throws JMSException { MessageProducer producer = session.createProducer(destination); @@ -460,13 +459,13 @@ public abstract class AbstractAdaptableMessageListener /** * A {@link MessagingMessageConverter} that lazily invokes payload extraction and - * delegates it to {@link #extractMessage(javax.jms.Message)} in order to enforce + * delegates it to {@link #extractMessage(jakarta.jms.Message)} in order to enforce * backward compatibility. */ private class MessagingMessageConverterAdapter extends MessagingMessageConverter { @Override - public Object fromMessage(javax.jms.Message message) throws JMSException, MessageConversionException { + public Object fromMessage(jakarta.jms.Message message) throws JMSException, MessageConversionException { return new LazyResolutionMessage(message); } @@ -505,7 +504,7 @@ public abstract class AbstractAdaptableMessageListener protected class LazyResolutionMessage implements org.springframework.messaging.Message { - private final javax.jms.Message message; + private final jakarta.jms.Message message; @Nullable private Object payload; @@ -513,7 +512,7 @@ public abstract class AbstractAdaptableMessageListener @Nullable private MessageHeaders headers; - public LazyResolutionMessage(javax.jms.Message message) { + public LazyResolutionMessage(jakarta.jms.Message message) { this.message = message; } diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/adapter/JmsResponse.java b/spring-jms/src/main/java/org/springframework/jms/listener/adapter/JmsResponse.java index a1f425774e5..16564a3b6c2 100644 --- a/spring-jms/src/main/java/org/springframework/jms/listener/adapter/JmsResponse.java +++ b/spring-jms/src/main/java/org/springframework/jms/listener/adapter/JmsResponse.java @@ -16,9 +16,9 @@ package org.springframework.jms.listener.adapter; -import javax.jms.Destination; -import javax.jms.JMSException; -import javax.jms.Session; +import jakarta.jms.Destination; +import jakarta.jms.JMSException; +import jakarta.jms.Session; import org.springframework.jms.support.destination.DestinationResolver; import org.springframework.lang.Nullable; diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/adapter/MessageListenerAdapter.java b/spring-jms/src/main/java/org/springframework/jms/listener/adapter/MessageListenerAdapter.java index 2743b70439c..1cf7c230d83 100644 --- a/spring-jms/src/main/java/org/springframework/jms/listener/adapter/MessageListenerAdapter.java +++ b/spring-jms/src/main/java/org/springframework/jms/listener/adapter/MessageListenerAdapter.java @@ -18,10 +18,10 @@ package org.springframework.jms.listener.adapter; import java.lang.reflect.InvocationTargetException; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageListener; -import javax.jms.Session; +import jakarta.jms.JMSException; +import jakarta.jms.Message; +import jakarta.jms.MessageListener; +import jakarta.jms.Session; import org.springframework.jms.listener.SessionAwareMessageListener; import org.springframework.jms.listener.SubscriptionNameProvider; @@ -51,7 +51,7 @@ import org.springframework.util.ObjectUtils; * message content type such as {@code String} or byte array), it will get * wrapped in a JMS {@code Message} and sent to the response destination * (either the JMS "reply-to" destination or a - * {@link #setDefaultResponseDestination(javax.jms.Destination) specified default + * {@link #setDefaultResponseDestination(jakarta.jms.Destination) specified default * destination}). * *

    Note: The sending of response messages is only available when @@ -86,7 +86,7 @@ import org.springframework.util.ObjectUtils; * * This next example illustrates a {@code Message} delegate * that just consumes the {@code String} contents of - * {@link javax.jms.TextMessage TextMessages}. Notice also how the + * {@link jakarta.jms.TextMessage TextMessages}. Notice also how the * name of the {@code Message} handling method is different from the * {@link #ORIGINAL_DEFAULT_LISTENER_METHOD original} (this will have to * be configured in the attendant bean definition). Again, no {@code Message} @@ -98,9 +98,9 @@ import org.springframework.util.ObjectUtils; * * This final example illustrates a {@code Message} delegate * that just consumes the {@code String} contents of - * {@link javax.jms.TextMessage TextMessages}. Notice how the return type + * {@link jakarta.jms.TextMessage TextMessages}. Notice how the return type * of this method is {@code String}: This will result in the configured - * {@link MessageListenerAdapter} sending a {@link javax.jms.TextMessage} in response. + * {@link MessageListenerAdapter} sending a {@link jakarta.jms.TextMessage} in response. * *

    public interface ResponsiveTextMessageContentDelegate {
      *    String handleMessage(String text);
    diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/adapter/MessagingMessageListenerAdapter.java b/spring-jms/src/main/java/org/springframework/jms/listener/adapter/MessagingMessageListenerAdapter.java
    index 91072e40cb5..c858d2b1519 100644
    --- a/spring-jms/src/main/java/org/springframework/jms/listener/adapter/MessagingMessageListenerAdapter.java
    +++ b/spring-jms/src/main/java/org/springframework/jms/listener/adapter/MessagingMessageListenerAdapter.java
    @@ -16,8 +16,8 @@
     
     package org.springframework.jms.listener.adapter;
     
    -import javax.jms.JMSException;
    -import javax.jms.Session;
    +import jakarta.jms.JMSException;
    +import jakarta.jms.Session;
     
     import org.springframework.core.MethodParameter;
     import org.springframework.jms.support.JmsHeaderMapper;
    @@ -31,14 +31,14 @@ import org.springframework.messaging.support.MessageBuilder;
     import org.springframework.util.Assert;
     
     /**
    - * A {@link javax.jms.MessageListener} adapter that invokes a configurable
    + * A {@link jakarta.jms.MessageListener} adapter that invokes a configurable
      * {@link InvocableHandlerMethod}.
      *
    - * 

    Wraps the incoming {@link javax.jms.Message} to Spring's {@link Message} + *

    Wraps the incoming {@link jakarta.jms.Message} to Spring's {@link Message} * abstraction, copying the JMS standard headers using a configurable * {@link JmsHeaderMapper}. * - *

    The original {@link javax.jms.Message} and the {@link javax.jms.Session} + *

    The original {@link jakarta.jms.Message} and the {@link jakarta.jms.Session} * are provided as additional arguments so that these can be injected as * method arguments if necessary. * @@ -56,7 +56,7 @@ public class MessagingMessageListenerAdapter extends AbstractAdaptableMessageLis /** * Set the {@link InvocableHandlerMethod} to use to invoke the method - * processing an incoming {@link javax.jms.Message}. + * processing an incoming {@link jakarta.jms.Message}. */ public void setHandlerMethod(InvocableHandlerMethod handlerMethod) { this.handlerMethod = handlerMethod; @@ -69,7 +69,7 @@ public class MessagingMessageListenerAdapter extends AbstractAdaptableMessageLis @Override - public void onMessage(javax.jms.Message jmsMessage, @Nullable Session session) throws JMSException { + public void onMessage(jakarta.jms.Message jmsMessage, @Nullable Session session) throws JMSException { Message message = toMessagingMessage(jmsMessage); if (logger.isDebugEnabled()) { logger.debug("Processing [" + message + "]"); @@ -94,7 +94,7 @@ public class MessagingMessageListenerAdapter extends AbstractAdaptableMessageLis AbstractMessageSendingTemplate.CONVERSION_HINT_HEADER, returnType).build(); } - protected Message toMessagingMessage(javax.jms.Message jmsMessage) { + protected Message toMessagingMessage(jakarta.jms.Message jmsMessage) { try { return (Message) getMessagingMessageConverter().fromMessage(jmsMessage); } @@ -108,7 +108,7 @@ public class MessagingMessageListenerAdapter extends AbstractAdaptableMessageLis * with a dedicated error message. */ @Nullable - private Object invokeHandler(javax.jms.Message jmsMessage, @Nullable Session session, Message message) { + private Object invokeHandler(jakarta.jms.Message jmsMessage, @Nullable Session session, Message message) { InvocableHandlerMethod handlerMethod = getHandlerMethod(); try { return handlerMethod.invoke(message, jmsMessage, session); diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/DefaultJmsActivationSpecFactory.java b/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/DefaultJmsActivationSpecFactory.java index 1702070063b..810d848138c 100644 --- a/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/DefaultJmsActivationSpecFactory.java +++ b/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/DefaultJmsActivationSpecFactory.java @@ -16,9 +16,8 @@ package org.springframework.jms.listener.endpoint; -import javax.jms.Session; -import javax.resource.spi.ResourceAdapter; - +import jakarta.jms.Session; +import jakarta.resource.spi.ResourceAdapter; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsActivationSpecConfig.java b/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsActivationSpecConfig.java index ba2f6da68a9..9109654e2ff 100644 --- a/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsActivationSpecConfig.java +++ b/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsActivationSpecConfig.java @@ -16,7 +16,7 @@ package org.springframework.jms.listener.endpoint; -import javax.jms.Session; +import jakarta.jms.Session; import org.springframework.core.Constants; import org.springframework.jms.support.QosSettings; @@ -36,11 +36,11 @@ import org.springframework.lang.Nullable; * @since 2.5 * @see JmsActivationSpecFactory * @see JmsMessageEndpointManager#setActivationSpecConfig - * @see javax.resource.spi.ResourceAdapter#endpointActivation + * @see jakarta.resource.spi.ResourceAdapter#endpointActivation */ public class JmsActivationSpecConfig { - /** Constants instance for {@code javax.jms.Session}. */ + /** Constants instance for {@code jakarta.jms.Session}. */ private static final Constants sessionConstants = new Constants(Session.class); @@ -184,10 +184,10 @@ public class JmsActivationSpecConfig { * supports "SESSION_TRANSACTED" in the form of RA-managed transactions * (automatically translated by Spring's {@link DefaultJmsActivationSpecFactory}. * @param constantName the name of the {@link Session} acknowledge mode constant - * @see javax.jms.Session#AUTO_ACKNOWLEDGE - * @see javax.jms.Session#CLIENT_ACKNOWLEDGE - * @see javax.jms.Session#DUPS_OK_ACKNOWLEDGE - * @see javax.jms.Session#SESSION_TRANSACTED + * @see jakarta.jms.Session#AUTO_ACKNOWLEDGE + * @see jakarta.jms.Session#CLIENT_ACKNOWLEDGE + * @see jakarta.jms.Session#DUPS_OK_ACKNOWLEDGE + * @see jakarta.jms.Session#SESSION_TRANSACTED * @see StandardJmsActivationSpecFactory * @see DefaultJmsActivationSpecFactory */ @@ -197,10 +197,10 @@ public class JmsActivationSpecConfig { /** * Set the JMS acknowledgement mode to use. - * @see javax.jms.Session#AUTO_ACKNOWLEDGE - * @see javax.jms.Session#CLIENT_ACKNOWLEDGE - * @see javax.jms.Session#DUPS_OK_ACKNOWLEDGE - * @see javax.jms.Session#SESSION_TRANSACTED + * @see jakarta.jms.Session#AUTO_ACKNOWLEDGE + * @see jakarta.jms.Session#CLIENT_ACKNOWLEDGE + * @see jakarta.jms.Session#DUPS_OK_ACKNOWLEDGE + * @see jakarta.jms.Session#SESSION_TRANSACTED */ public void setAcknowledgeMode(int acknowledgeMode) { this.acknowledgeMode = acknowledgeMode; diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsActivationSpecFactory.java b/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsActivationSpecFactory.java index 2ef3bcbb5d3..2be2e2a2046 100644 --- a/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsActivationSpecFactory.java +++ b/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsActivationSpecFactory.java @@ -16,8 +16,8 @@ package org.springframework.jms.listener.endpoint; -import javax.resource.spi.ActivationSpec; -import javax.resource.spi.ResourceAdapter; +import jakarta.resource.spi.ActivationSpec; +import jakarta.resource.spi.ResourceAdapter; /** * Strategy interface for creating JCA 1.5 ActivationSpec objects @@ -32,7 +32,7 @@ import javax.resource.spi.ResourceAdapter; * @since 2.5 * @see JmsActivationSpecConfig * @see JmsMessageEndpointManager#setActivationSpecFactory - * @see javax.resource.spi.ResourceAdapter#endpointActivation + * @see jakarta.resource.spi.ResourceAdapter#endpointActivation */ public interface JmsActivationSpecFactory { diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsMessageEndpointFactory.java b/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsMessageEndpointFactory.java index c27867f6f5b..5151aaa3cb6 100644 --- a/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsMessageEndpointFactory.java +++ b/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsMessageEndpointFactory.java @@ -16,10 +16,10 @@ package org.springframework.jms.listener.endpoint; -import javax.jms.Message; -import javax.jms.MessageListener; -import javax.resource.ResourceException; -import javax.resource.spi.UnavailableException; +import jakarta.jms.Message; +import jakarta.jms.MessageListener; +import jakarta.resource.ResourceException; +import jakarta.resource.spi.UnavailableException; import org.springframework.jca.endpoint.AbstractMessageEndpointFactory; import org.springframework.lang.Nullable; @@ -27,9 +27,9 @@ import org.springframework.util.Assert; /** * JMS-specific implementation of the JCA 1.7 - * {@link javax.resource.spi.endpoint.MessageEndpointFactory} interface, + * {@link jakarta.resource.spi.endpoint.MessageEndpointFactory} interface, * providing transaction management capabilities for a JMS listener object - * (e.g. a {@link javax.jms.MessageListener} object). + * (e.g. a {@link jakarta.jms.MessageListener} object). * *

    Uses a static endpoint implementation, simply wrapping the * specified message listener object and exposing all of its implemented @@ -38,7 +38,7 @@ import org.springframework.util.Assert; *

    Typically used with Spring's {@link JmsMessageEndpointManager}, * but not tied to it. As a consequence, this endpoint factory could * also be used with programmatic endpoint management on a native - * {@link javax.resource.spi.ResourceAdapter} instance. + * {@link jakarta.resource.spi.ResourceAdapter} instance. * * @author Juergen Hoeller * @author Stephane Nicoll diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsMessageEndpointManager.java b/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsMessageEndpointManager.java index 518736f59e2..72a4f99fab3 100644 --- a/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsMessageEndpointManager.java +++ b/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsMessageEndpointManager.java @@ -16,8 +16,8 @@ package org.springframework.jms.listener.endpoint; -import javax.jms.MessageListener; -import javax.resource.ResourceException; +import jakarta.jms.MessageListener; +import jakarta.resource.ResourceException; import org.springframework.beans.factory.BeanNameAware; import org.springframework.jca.endpoint.GenericMessageEndpointManager; @@ -37,15 +37,15 @@ import org.springframework.lang.Nullable; * object for activating the endpoint. * *

    NOTE: This JCA-based endpoint manager supports standard JMS - * {@link javax.jms.MessageListener} endpoints only. It does not support + * {@link jakarta.jms.MessageListener} endpoints only. It does not support * Spring's {@link org.springframework.jms.listener.SessionAwareMessageListener} * variant, simply because the JCA endpoint management contract does not allow - * for obtaining the current JMS {@link javax.jms.Session}. + * for obtaining the current JMS {@link jakarta.jms.Session}. * * @author Juergen Hoeller * @author Stephane Nicoll * @since 2.5 - * @see javax.jms.MessageListener + * @see jakarta.jms.MessageListener * @see #setActivationSpecConfig * @see JmsActivationSpecConfig * @see JmsActivationSpecFactory @@ -86,7 +86,7 @@ public class JmsMessageEndpointManager extends GenericMessageEndpointManager * invocations, enlisting the endpoint resource in each such transaction. *

    The passed-in object may be a transaction manager which implements * Spring's {@link org.springframework.transaction.jta.TransactionFactory} - * interface, or a plain {@link javax.transaction.TransactionManager}. + * interface, or a plain {@link jakarta.transaction.TransactionManager}. *

    If no transaction manager is specified, the endpoint invocation * will simply not be wrapped in an XA transaction. Consult your * resource provider's ActivationSpec documentation for the local diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/StandardJmsActivationSpecFactory.java b/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/StandardJmsActivationSpecFactory.java index 632a1251316..f93eef25952 100644 --- a/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/StandardJmsActivationSpecFactory.java +++ b/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/StandardJmsActivationSpecFactory.java @@ -18,12 +18,12 @@ package org.springframework.jms.listener.endpoint; import java.util.Map; -import javax.jms.JMSException; -import javax.jms.Queue; -import javax.jms.Session; -import javax.jms.Topic; -import javax.resource.spi.ActivationSpec; -import javax.resource.spi.ResourceAdapter; +import jakarta.jms.JMSException; +import jakarta.jms.Queue; +import jakarta.jms.Session; +import jakarta.jms.Topic; +import jakarta.resource.spi.ActivationSpec; +import jakarta.resource.spi.ResourceAdapter; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanWrapper; @@ -193,11 +193,11 @@ public class StandardJmsActivationSpecFactory implements JmsActivationSpecFactor * having been requested. * @param bw the BeanWrapper wrapping the ActivationSpec object * @param ackMode the configured acknowledge mode - * (according to the constants in {@link javax.jms.Session} - * @see javax.jms.Session#AUTO_ACKNOWLEDGE - * @see javax.jms.Session#DUPS_OK_ACKNOWLEDGE - * @see javax.jms.Session#CLIENT_ACKNOWLEDGE - * @see javax.jms.Session#SESSION_TRANSACTED + * (according to the constants in {@link jakarta.jms.Session} + * @see jakarta.jms.Session#AUTO_ACKNOWLEDGE + * @see jakarta.jms.Session#DUPS_OK_ACKNOWLEDGE + * @see jakarta.jms.Session#CLIENT_ACKNOWLEDGE + * @see jakarta.jms.Session#SESSION_TRANSACTED */ protected void applyAcknowledgeMode(BeanWrapper bw, int ackMode) { if (ackMode == Session.SESSION_TRANSACTED) { diff --git a/spring-jms/src/main/java/org/springframework/jms/support/JmsAccessor.java b/spring-jms/src/main/java/org/springframework/jms/support/JmsAccessor.java index 305fc824983..5e8e19c7505 100644 --- a/spring-jms/src/main/java/org/springframework/jms/support/JmsAccessor.java +++ b/spring-jms/src/main/java/org/springframework/jms/support/JmsAccessor.java @@ -16,11 +16,10 @@ package org.springframework.jms.support; -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.JMSException; -import javax.jms.Session; - +import jakarta.jms.Connection; +import jakarta.jms.ConnectionFactory; +import jakarta.jms.JMSException; +import jakarta.jms.Session; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -47,7 +46,7 @@ import org.springframework.util.Assert; */ public abstract class JmsAccessor implements InitializingBean { - /** Constants instance for {@code javax.jms.Session}. */ + /** Constants instance for {@code jakarta.jms.Session}. */ private static final Constants sessionConstants = new Constants(Session.class); @@ -95,7 +94,7 @@ public abstract class JmsAccessor implements InitializingBean { * Default is "false". *

    Note that within a JTA transaction, the parameters passed to * {@code create(Queue/Topic)Session(boolean transacted, int acknowledgeMode)} - * method are not taken into account. Depending on the Java EE transaction context, + * method are not taken into account. Depending on the Jakarta EE transaction context, * the container makes its own decisions on these values. Analogously, these * parameters are not taken into account within a locally managed transaction * either, since the accessor operates on an existing JMS Session in this case. @@ -106,7 +105,7 @@ public abstract class JmsAccessor implements InitializingBean { * transaction being managed alongside the main transaction (which might * be a native JDBC transaction), with the JMS transaction committing * right after the main transaction. - * @see javax.jms.Connection#createSession(boolean, int) + * @see jakarta.jms.Connection#createSession(boolean, int) */ public void setSessionTransacted(boolean sessionTransacted) { this.sessionTransacted = sessionTransacted; @@ -127,10 +126,10 @@ public abstract class JmsAccessor implements InitializingBean { *

    If you want to use vendor-specific extensions to the acknowledgment mode, * use {@link #setSessionAcknowledgeMode(int)} instead. * @param constantName the name of the {@link Session} acknowledge mode constant - * @see javax.jms.Session#AUTO_ACKNOWLEDGE - * @see javax.jms.Session#CLIENT_ACKNOWLEDGE - * @see javax.jms.Session#DUPS_OK_ACKNOWLEDGE - * @see javax.jms.Connection#createSession(boolean, int) + * @see jakarta.jms.Session#AUTO_ACKNOWLEDGE + * @see jakarta.jms.Session#CLIENT_ACKNOWLEDGE + * @see jakarta.jms.Session#DUPS_OK_ACKNOWLEDGE + * @see jakarta.jms.Connection#createSession(boolean, int) */ public void setSessionAcknowledgeModeName(String constantName) { setSessionAcknowledgeMode(sessionConstants.asNumber(constantName).intValue()); @@ -147,10 +146,10 @@ public abstract class JmsAccessor implements InitializingBean { * the container makes its own decisions on these values. See section 17.3.5 * of the EJB spec. * @param sessionAcknowledgeMode the acknowledgement mode constant - * @see javax.jms.Session#AUTO_ACKNOWLEDGE - * @see javax.jms.Session#CLIENT_ACKNOWLEDGE - * @see javax.jms.Session#DUPS_OK_ACKNOWLEDGE - * @see javax.jms.Connection#createSession(boolean, int) + * @see jakarta.jms.Session#AUTO_ACKNOWLEDGE + * @see jakarta.jms.Session#CLIENT_ACKNOWLEDGE + * @see jakarta.jms.Session#DUPS_OK_ACKNOWLEDGE + * @see jakarta.jms.Connection#createSession(boolean, int) */ public void setSessionAcknowledgeMode(int sessionAcknowledgeMode) { this.sessionAcknowledgeMode = sessionAcknowledgeMode; @@ -172,7 +171,7 @@ public abstract class JmsAccessor implements InitializingBean { /** - * Convert the specified checked {@link javax.jms.JMSException JMSException} to + * Convert the specified checked {@link jakarta.jms.JMSException JMSException} to * a Spring runtime {@link org.springframework.jms.JmsException JmsException} * equivalent. *

    The default implementation delegates to the @@ -190,7 +189,7 @@ public abstract class JmsAccessor implements InitializingBean { *

    This implementation uses JMS 1.1 API. * @return the new JMS Connection * @throws JMSException if thrown by JMS API methods - * @see javax.jms.ConnectionFactory#createConnection() + * @see jakarta.jms.ConnectionFactory#createConnection() */ protected Connection createConnection() throws JMSException { return obtainConnectionFactory().createConnection(); @@ -202,7 +201,7 @@ public abstract class JmsAccessor implements InitializingBean { * @param con the JMS Connection to create a Session for * @return the new JMS Session * @throws JMSException if thrown by JMS API methods - * @see javax.jms.Connection#createSession(boolean, int) + * @see jakarta.jms.Connection#createSession(boolean, int) */ protected Session createSession(Connection con) throws JMSException { return con.createSession(isSessionTransacted(), getSessionAcknowledgeMode()); @@ -213,9 +212,9 @@ public abstract class JmsAccessor implements InitializingBean { *

    This implementation uses JMS 1.1 API. * @param session the JMS Session to check * @return whether the given Session is in client acknowledge mode - * @throws javax.jms.JMSException if thrown by JMS API methods - * @see javax.jms.Session#getAcknowledgeMode() - * @see javax.jms.Session#CLIENT_ACKNOWLEDGE + * @throws jakarta.jms.JMSException if thrown by JMS API methods + * @see jakarta.jms.Session#getAcknowledgeMode() + * @see jakarta.jms.Session#CLIENT_ACKNOWLEDGE */ protected boolean isClientAcknowledge(Session session) throws JMSException { return (session.getAcknowledgeMode() == Session.CLIENT_ACKNOWLEDGE); diff --git a/spring-jms/src/main/java/org/springframework/jms/support/JmsHeaderMapper.java b/spring-jms/src/main/java/org/springframework/jms/support/JmsHeaderMapper.java index 3914d61bede..75e4d4fa327 100644 --- a/spring-jms/src/main/java/org/springframework/jms/support/JmsHeaderMapper.java +++ b/spring-jms/src/main/java/org/springframework/jms/support/JmsHeaderMapper.java @@ -16,13 +16,13 @@ package org.springframework.jms.support; -import javax.jms.Message; +import jakarta.jms.Message; import org.springframework.messaging.support.HeaderMapper; /** * Strategy interface for mapping {@link org.springframework.messaging.Message} - * headers to an outbound JMS {@link javax.jms.Message} (e.g. to configure JMS + * headers to an outbound JMS {@link jakarta.jms.Message} (e.g. to configure JMS * properties) or extracting messaging header values from an inbound JMS Message. * * @author Mark Fisher diff --git a/spring-jms/src/main/java/org/springframework/jms/support/JmsHeaders.java b/spring-jms/src/main/java/org/springframework/jms/support/JmsHeaders.java index f4e5c028e7a..a2e7867e92f 100644 --- a/spring-jms/src/main/java/org/springframework/jms/support/JmsHeaders.java +++ b/spring-jms/src/main/java/org/springframework/jms/support/JmsHeaders.java @@ -37,53 +37,53 @@ public interface JmsHeaders { * Correlation ID for the message. This may be the {@link #MESSAGE_ID} of * the message that this message replies to. It may also be an * application-specific identifier. - * @see javax.jms.Message#getJMSCorrelationID() + * @see jakarta.jms.Message#getJMSCorrelationID() */ String CORRELATION_ID = PREFIX + "correlationId"; /** * Name of the destination (topic or queue) of the message. *

    Read-only value. - * @see javax.jms.Message#getJMSDestination() - * @see javax.jms.Destination - * @see javax.jms.Queue - * @see javax.jms.Topic + * @see jakarta.jms.Message#getJMSDestination() + * @see jakarta.jms.Destination + * @see jakarta.jms.Queue + * @see jakarta.jms.Topic */ String DESTINATION = PREFIX + "destination"; /** * Distribution mode. *

    Read-only value. - * @see javax.jms.Message#getJMSDeliveryMode() - * @see javax.jms.DeliveryMode + * @see jakarta.jms.Message#getJMSDeliveryMode() + * @see jakarta.jms.DeliveryMode */ String DELIVERY_MODE = PREFIX + "deliveryMode"; /** * Message expiration date and time. *

    Read-only value. - * @see javax.jms.Message#getJMSExpiration() + * @see jakarta.jms.Message#getJMSExpiration() */ String EXPIRATION = PREFIX + "expiration"; /** * Unique identifier for a message. *

    Read-only value. - * @see javax.jms.Message#getJMSMessageID() + * @see jakarta.jms.Message#getJMSMessageID() */ String MESSAGE_ID = PREFIX + "messageId"; /** * The message priority level. *

    Read-only value. - * @see javax.jms.Message#getJMSPriority() + * @see jakarta.jms.Message#getJMSPriority() */ String PRIORITY = PREFIX + "priority"; /** * Name of the destination (topic or queue) the message replies should * be sent to. - * @see javax.jms.Message#getJMSReplyTo() + * @see jakarta.jms.Message#getJMSReplyTo() */ String REPLY_TO = PREFIX + "replyTo"; @@ -91,21 +91,21 @@ public interface JmsHeaders { * Specify if the message was resent. This occurs when a message * consumer fails to acknowledge the message reception. *

    Read-only value. - * @see javax.jms.Message#getJMSRedelivered() + * @see jakarta.jms.Message#getJMSRedelivered() */ String REDELIVERED = PREFIX + "redelivered"; /** * Message type label. This type is a string value describing the message * in a functional manner. - * @see javax.jms.Message#getJMSType() + * @see jakarta.jms.Message#getJMSType() */ String TYPE = PREFIX + "type"; /** * Date and time of the message sending operation. *

    Read-only value. - * @see javax.jms.Message#getJMSTimestamp() + * @see jakarta.jms.Message#getJMSTimestamp() */ String TIMESTAMP = PREFIX + "timestamp"; diff --git a/spring-jms/src/main/java/org/springframework/jms/support/JmsMessageHeaderAccessor.java b/spring-jms/src/main/java/org/springframework/jms/support/JmsMessageHeaderAccessor.java index c7ccdf4e96c..3523c7808ba 100644 --- a/spring-jms/src/main/java/org/springframework/jms/support/JmsMessageHeaderAccessor.java +++ b/spring-jms/src/main/java/org/springframework/jms/support/JmsMessageHeaderAccessor.java @@ -19,7 +19,7 @@ package org.springframework.jms.support; import java.util.List; import java.util.Map; -import javax.jms.Destination; +import jakarta.jms.Destination; import org.springframework.lang.Nullable; import org.springframework.messaging.Message; diff --git a/spring-jms/src/main/java/org/springframework/jms/support/JmsUtils.java b/spring-jms/src/main/java/org/springframework/jms/support/JmsUtils.java index 3f33ba10211..4d6b136264c 100644 --- a/spring-jms/src/main/java/org/springframework/jms/support/JmsUtils.java +++ b/spring-jms/src/main/java/org/springframework/jms/support/JmsUtils.java @@ -16,14 +16,13 @@ package org.springframework.jms.support; -import javax.jms.Connection; -import javax.jms.JMSException; -import javax.jms.MessageConsumer; -import javax.jms.MessageProducer; -import javax.jms.QueueBrowser; -import javax.jms.QueueRequestor; -import javax.jms.Session; - +import jakarta.jms.Connection; +import jakarta.jms.JMSException; +import jakarta.jms.MessageConsumer; +import jakarta.jms.MessageProducer; +import jakarta.jms.QueueBrowser; +import jakarta.jms.QueueRequestor; +import jakarta.jms.Session; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -85,7 +84,7 @@ public abstract class JmsUtils { con.close(); } } - catch (javax.jms.IllegalStateException ex) { + catch (jakarta.jms.IllegalStateException ex) { logger.debug("Ignoring Connection state exception - assuming already closed: " + ex); } catch (JMSException ex) { @@ -217,7 +216,7 @@ public abstract class JmsUtils { try { session.commit(); } - catch (javax.jms.TransactionInProgressException | javax.jms.IllegalStateException ex) { + catch (jakarta.jms.TransactionInProgressException | jakarta.jms.IllegalStateException ex) { // Ignore -> can only happen in case of a JTA transaction. } } @@ -232,7 +231,7 @@ public abstract class JmsUtils { try { session.rollback(); } - catch (javax.jms.TransactionInProgressException | javax.jms.IllegalStateException ex) { + catch (jakarta.jms.TransactionInProgressException | jakarta.jms.IllegalStateException ex) { // Ignore -> can only happen in case of a JTA transaction. } } @@ -242,7 +241,7 @@ public abstract class JmsUtils { * incorporating a linked exception's message if appropriate. * @param ex the JMSException to build a message for * @return the descriptive message String - * @see javax.jms.JMSException#getLinkedException() + * @see jakarta.jms.JMSException#getLinkedException() */ public static String buildExceptionMessage(JMSException ex) { String message = ex.getMessage(); @@ -262,7 +261,7 @@ public abstract class JmsUtils { } /** - * Convert the specified checked {@link javax.jms.JMSException JMSException} to a + * Convert the specified checked {@link jakarta.jms.JMSException JMSException} to a * Spring runtime {@link org.springframework.jms.JmsException JmsException} equivalent. * @param ex the original checked JMSException to convert * @return the Spring runtime JmsException wrapping the given exception @@ -270,41 +269,41 @@ public abstract class JmsUtils { public static JmsException convertJmsAccessException(JMSException ex) { Assert.notNull(ex, "JMSException must not be null"); - if (ex instanceof javax.jms.IllegalStateException) { - return new org.springframework.jms.IllegalStateException((javax.jms.IllegalStateException) ex); + if (ex instanceof jakarta.jms.IllegalStateException) { + return new org.springframework.jms.IllegalStateException((jakarta.jms.IllegalStateException) ex); } - if (ex instanceof javax.jms.InvalidClientIDException) { - return new InvalidClientIDException((javax.jms.InvalidClientIDException) ex); + if (ex instanceof jakarta.jms.InvalidClientIDException) { + return new InvalidClientIDException((jakarta.jms.InvalidClientIDException) ex); } - if (ex instanceof javax.jms.InvalidDestinationException) { - return new InvalidDestinationException((javax.jms.InvalidDestinationException) ex); + if (ex instanceof jakarta.jms.InvalidDestinationException) { + return new InvalidDestinationException((jakarta.jms.InvalidDestinationException) ex); } - if (ex instanceof javax.jms.InvalidSelectorException) { - return new InvalidSelectorException((javax.jms.InvalidSelectorException) ex); + if (ex instanceof jakarta.jms.InvalidSelectorException) { + return new InvalidSelectorException((jakarta.jms.InvalidSelectorException) ex); } - if (ex instanceof javax.jms.JMSSecurityException) { - return new JmsSecurityException((javax.jms.JMSSecurityException) ex); + if (ex instanceof jakarta.jms.JMSSecurityException) { + return new JmsSecurityException((jakarta.jms.JMSSecurityException) ex); } - if (ex instanceof javax.jms.MessageEOFException) { - return new MessageEOFException((javax.jms.MessageEOFException) ex); + if (ex instanceof jakarta.jms.MessageEOFException) { + return new MessageEOFException((jakarta.jms.MessageEOFException) ex); } - if (ex instanceof javax.jms.MessageFormatException) { - return new MessageFormatException((javax.jms.MessageFormatException) ex); + if (ex instanceof jakarta.jms.MessageFormatException) { + return new MessageFormatException((jakarta.jms.MessageFormatException) ex); } - if (ex instanceof javax.jms.MessageNotReadableException) { - return new MessageNotReadableException((javax.jms.MessageNotReadableException) ex); + if (ex instanceof jakarta.jms.MessageNotReadableException) { + return new MessageNotReadableException((jakarta.jms.MessageNotReadableException) ex); } - if (ex instanceof javax.jms.MessageNotWriteableException) { - return new MessageNotWriteableException((javax.jms.MessageNotWriteableException) ex); + if (ex instanceof jakarta.jms.MessageNotWriteableException) { + return new MessageNotWriteableException((jakarta.jms.MessageNotWriteableException) ex); } - if (ex instanceof javax.jms.ResourceAllocationException) { - return new ResourceAllocationException((javax.jms.ResourceAllocationException) ex); + if (ex instanceof jakarta.jms.ResourceAllocationException) { + return new ResourceAllocationException((jakarta.jms.ResourceAllocationException) ex); } - if (ex instanceof javax.jms.TransactionInProgressException) { - return new TransactionInProgressException((javax.jms.TransactionInProgressException) ex); + if (ex instanceof jakarta.jms.TransactionInProgressException) { + return new TransactionInProgressException((jakarta.jms.TransactionInProgressException) ex); } - if (ex instanceof javax.jms.TransactionRolledBackException) { - return new TransactionRolledBackException((javax.jms.TransactionRolledBackException) ex); + if (ex instanceof jakarta.jms.TransactionRolledBackException) { + return new TransactionRolledBackException((jakarta.jms.TransactionRolledBackException) ex); } // fallback diff --git a/spring-jms/src/main/java/org/springframework/jms/support/QosSettings.java b/spring-jms/src/main/java/org/springframework/jms/support/QosSettings.java index f19a6970e42..2cd329fff70 100644 --- a/spring-jms/src/main/java/org/springframework/jms/support/QosSettings.java +++ b/spring-jms/src/main/java/org/springframework/jms/support/QosSettings.java @@ -16,7 +16,7 @@ package org.springframework.jms.support; -import javax.jms.Message; +import jakarta.jms.Message; import org.springframework.lang.Nullable; @@ -59,10 +59,10 @@ public class QosSettings { * Set the delivery mode to use when sending a message. * Default is the JMS Message default: "PERSISTENT". * @param deliveryMode the delivery mode to use - * @see javax.jms.DeliveryMode#PERSISTENT - * @see javax.jms.DeliveryMode#NON_PERSISTENT - * @see javax.jms.Message#DEFAULT_DELIVERY_MODE - * @see javax.jms.MessageProducer#send(javax.jms.Message, int, int, long) + * @see jakarta.jms.DeliveryMode#PERSISTENT + * @see jakarta.jms.DeliveryMode#NON_PERSISTENT + * @see jakarta.jms.Message#DEFAULT_DELIVERY_MODE + * @see jakarta.jms.MessageProducer#send(jakarta.jms.Message, int, int, long) */ public void setDeliveryMode(int deliveryMode) { this.deliveryMode = deliveryMode; @@ -77,8 +77,8 @@ public class QosSettings { /** * Set the priority of a message when sending. - * @see javax.jms.Message#DEFAULT_PRIORITY - * @see javax.jms.MessageProducer#send(javax.jms.Message, int, int, long) + * @see jakarta.jms.Message#DEFAULT_PRIORITY + * @see jakarta.jms.MessageProducer#send(jakarta.jms.Message, int, int, long) */ public void setPriority(int priority) { this.priority = priority; @@ -94,8 +94,8 @@ public class QosSettings { /** * Set the time-to-live of the message when sending. * @param timeToLive the message's lifetime (in milliseconds) - * @see javax.jms.Message#DEFAULT_TIME_TO_LIVE - * @see javax.jms.MessageProducer#send(javax.jms.Message, int, int, long) + * @see jakarta.jms.Message#DEFAULT_TIME_TO_LIVE + * @see jakarta.jms.MessageProducer#send(jakarta.jms.Message, int, int, long) */ public void setTimeToLive(long timeToLive) { this.timeToLive = timeToLive; diff --git a/spring-jms/src/main/java/org/springframework/jms/support/SimpleJmsHeaderMapper.java b/spring-jms/src/main/java/org/springframework/jms/support/SimpleJmsHeaderMapper.java index 36569911c69..43d53cf3ffc 100644 --- a/spring-jms/src/main/java/org/springframework/jms/support/SimpleJmsHeaderMapper.java +++ b/spring-jms/src/main/java/org/springframework/jms/support/SimpleJmsHeaderMapper.java @@ -23,9 +23,9 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; -import javax.jms.Destination; -import javax.jms.JMSException; -import javax.jms.Message; +import jakarta.jms.Destination; +import jakarta.jms.JMSException; +import jakarta.jms.Message; import org.springframework.messaging.MessageHeaders; import org.springframework.messaging.support.AbstractHeaderMapper; @@ -61,7 +61,7 @@ public class SimpleJmsHeaderMapper extends AbstractHeaderMapper impleme @Override - public void fromHeaders(MessageHeaders headers, javax.jms.Message jmsMessage) { + public void fromHeaders(MessageHeaders headers, jakarta.jms.Message jmsMessage) { try { Object jmsCorrelationId = headers.get(JmsHeaders.CORRELATION_ID); if (jmsCorrelationId instanceof Number) { @@ -125,7 +125,7 @@ public class SimpleJmsHeaderMapper extends AbstractHeaderMapper impleme } @Override - public MessageHeaders toHeaders(javax.jms.Message jmsMessage) { + public MessageHeaders toHeaders(jakarta.jms.Message jmsMessage) { Map headers = new HashMap<>(); try { try { diff --git a/spring-jms/src/main/java/org/springframework/jms/support/converter/MappingJackson2MessageConverter.java b/spring-jms/src/main/java/org/springframework/jms/support/converter/MappingJackson2MessageConverter.java index 401f5c0cb5e..7b6c3370aed 100644 --- a/spring-jms/src/main/java/org/springframework/jms/support/converter/MappingJackson2MessageConverter.java +++ b/spring-jms/src/main/java/org/springframework/jms/support/converter/MappingJackson2MessageConverter.java @@ -24,18 +24,17 @@ import java.io.UnsupportedEncodingException; import java.util.HashMap; import java.util.Map; -import javax.jms.BytesMessage; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.Session; -import javax.jms.TextMessage; - import com.fasterxml.jackson.annotation.JsonView; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.JavaType; import com.fasterxml.jackson.databind.MapperFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; +import jakarta.jms.BytesMessage; +import jakarta.jms.JMSException; +import jakarta.jms.Message; +import jakarta.jms.Session; +import jakarta.jms.TextMessage; import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.core.MethodParameter; @@ -212,7 +211,7 @@ public class MappingJackson2MessageConverter implements SmartMessageConverter, B * @param session the Session to use for creating a JMS Message * @param jsonView the view to use to filter the content * @return the JMS Message - * @throws javax.jms.JMSException if thrown by JMS API methods + * @throws jakarta.jms.JMSException if thrown by JMS API methods * @throws MessageConversionException in case of conversion failure * @since 4.3 */ @@ -343,7 +342,7 @@ public class MappingJackson2MessageConverter implements SmartMessageConverter, B * @param object the payload object to set a type id for * @param message the JMS Message on which to set the type id property * @throws JMSException if thrown by JMS methods - * @see #getJavaTypeForMessage(javax.jms.Message) + * @see #getJavaTypeForMessage(jakarta.jms.Message) * @see #setTypeIdPropertyName(String) * @see #setTypeIdMappings(java.util.Map) */ @@ -445,7 +444,7 @@ public class MappingJackson2MessageConverter implements SmartMessageConverter, B * a different strategy, e.g. doing some heuristics based on message origin. * @param message the JMS Message from which to get the type id property * @throws JMSException if thrown by JMS methods - * @see #setTypeIdOnMessage(Object, javax.jms.Message) + * @see #setTypeIdOnMessage(Object, jakarta.jms.Message) * @see #setTypeIdPropertyName(String) * @see #setTypeIdMappings(java.util.Map) */ diff --git a/spring-jms/src/main/java/org/springframework/jms/support/converter/MarshallingMessageConverter.java b/spring-jms/src/main/java/org/springframework/jms/support/converter/MarshallingMessageConverter.java index 99c38631fda..b420ec92c6b 100644 --- a/spring-jms/src/main/java/org/springframework/jms/support/converter/MarshallingMessageConverter.java +++ b/spring-jms/src/main/java/org/springframework/jms/support/converter/MarshallingMessageConverter.java @@ -22,16 +22,17 @@ import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; -import javax.jms.BytesMessage; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.Session; -import javax.jms.TextMessage; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; +import jakarta.jms.BytesMessage; +import jakarta.jms.JMSException; +import jakarta.jms.Message; +import jakarta.jms.Session; +import jakarta.jms.TextMessage; + import org.springframework.beans.factory.InitializingBean; import org.springframework.lang.Nullable; import org.springframework.oxm.Marshaller; @@ -144,8 +145,8 @@ public class MarshallingMessageConverter implements MessageConverter, Initializi /** - * This implementation marshals the given object to a {@link javax.jms.TextMessage} or - * {@link javax.jms.BytesMessage}. The desired message type can be defined by setting + * This implementation marshals the given object to a {@link jakarta.jms.TextMessage} or + * {@link jakarta.jms.BytesMessage}. The desired message type can be defined by setting * the {@link #setTargetType "marshalTo"} property. * @see #marshalToTextMessage * @see #marshalToBytesMessage diff --git a/spring-jms/src/main/java/org/springframework/jms/support/converter/MessageConversionException.java b/spring-jms/src/main/java/org/springframework/jms/support/converter/MessageConversionException.java index 837b19bb04c..e6ba699751d 100644 --- a/spring-jms/src/main/java/org/springframework/jms/support/converter/MessageConversionException.java +++ b/spring-jms/src/main/java/org/springframework/jms/support/converter/MessageConversionException.java @@ -21,7 +21,7 @@ import org.springframework.lang.Nullable; /** * Thrown by {@link MessageConverter} implementations when the conversion - * of an object to/from a {@link javax.jms.Message} fails. + * of an object to/from a {@link jakarta.jms.Message} fails. * * @author Mark Pollack * @since 1.1 diff --git a/spring-jms/src/main/java/org/springframework/jms/support/converter/MessageConverter.java b/spring-jms/src/main/java/org/springframework/jms/support/converter/MessageConverter.java index b4c75ab0233..433123d1953 100644 --- a/spring-jms/src/main/java/org/springframework/jms/support/converter/MessageConverter.java +++ b/spring-jms/src/main/java/org/springframework/jms/support/converter/MessageConverter.java @@ -16,9 +16,9 @@ package org.springframework.jms.support.converter; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.Session; +import jakarta.jms.JMSException; +import jakarta.jms.Message; +import jakarta.jms.Session; /** * Strategy interface that specifies a converter between Java objects and JMS messages. @@ -42,7 +42,7 @@ public interface MessageConverter { * @param object the object to convert * @param session the Session to use for creating a JMS Message * @return the JMS Message - * @throws javax.jms.JMSException if thrown by JMS API methods + * @throws jakarta.jms.JMSException if thrown by JMS API methods * @throws MessageConversionException in case of conversion failure */ Message toMessage(Object object, Session session) throws JMSException, MessageConversionException; @@ -51,7 +51,7 @@ public interface MessageConverter { * Convert from a JMS Message to a Java object. * @param message the message to convert * @return the converted Java object - * @throws javax.jms.JMSException if thrown by JMS API methods + * @throws jakarta.jms.JMSException if thrown by JMS API methods * @throws MessageConversionException in case of conversion failure */ Object fromMessage(Message message) throws JMSException, MessageConversionException; diff --git a/spring-jms/src/main/java/org/springframework/jms/support/converter/MessageType.java b/spring-jms/src/main/java/org/springframework/jms/support/converter/MessageType.java index edaea0e38cd..98b46c77bbc 100644 --- a/spring-jms/src/main/java/org/springframework/jms/support/converter/MessageType.java +++ b/spring-jms/src/main/java/org/springframework/jms/support/converter/MessageType.java @@ -18,8 +18,8 @@ package org.springframework.jms.support.converter; /** * Constants that indicate a target message type to convert to: a - * {@link javax.jms.TextMessage}, a {@link javax.jms.BytesMessage}, - * a {@link javax.jms.MapMessage} or an {@link javax.jms.ObjectMessage}. + * {@link jakarta.jms.TextMessage}, a {@link jakarta.jms.BytesMessage}, + * a {@link jakarta.jms.MapMessage} or an {@link jakarta.jms.ObjectMessage}. * * @author Juergen Hoeller * @since 3.0 @@ -28,22 +28,22 @@ package org.springframework.jms.support.converter; public enum MessageType { /** - * A {@link javax.jms.TextMessage}. + * A {@link jakarta.jms.TextMessage}. */ TEXT, /** - * A {@link javax.jms.BytesMessage}. + * A {@link jakarta.jms.BytesMessage}. */ BYTES, /** - * A {@link javax.jms.MapMessage}. + * A {@link jakarta.jms.MapMessage}. */ MAP, /** - * A {@link javax.jms.ObjectMessage}. + * A {@link jakarta.jms.ObjectMessage}. */ OBJECT diff --git a/spring-jms/src/main/java/org/springframework/jms/support/converter/MessagingMessageConverter.java b/spring-jms/src/main/java/org/springframework/jms/support/converter/MessagingMessageConverter.java index 441f306d728..98e8ad02639 100644 --- a/spring-jms/src/main/java/org/springframework/jms/support/converter/MessagingMessageConverter.java +++ b/spring-jms/src/main/java/org/springframework/jms/support/converter/MessagingMessageConverter.java @@ -18,8 +18,8 @@ package org.springframework.jms.support.converter; import java.util.Map; -import javax.jms.JMSException; -import javax.jms.Session; +import jakarta.jms.JMSException; +import jakarta.jms.Session; import org.springframework.beans.factory.InitializingBean; import org.springframework.jms.support.JmsHeaderMapper; @@ -33,7 +33,7 @@ import org.springframework.util.Assert; /** * Convert a {@link Message} from the messaging abstraction to and from a - * {@link javax.jms.Message} using an underlying {@link MessageConverter} + * {@link jakarta.jms.Message} using an underlying {@link MessageConverter} * for the payload and a {@link org.springframework.jms.support.JmsHeaderMapper} * to map the JMS headers to and from standard message headers. * @@ -100,7 +100,7 @@ public class MessagingMessageConverter implements MessageConverter, Initializing @Override - public javax.jms.Message toMessage(Object object, Session session) throws JMSException, MessageConversionException { + public jakarta.jms.Message toMessage(Object object, Session session) throws JMSException, MessageConversionException { if (!(object instanceof Message)) { throw new IllegalArgumentException("Could not convert [" + object + "] - only [" + Message.class.getName() + "] is handled by this converter"); @@ -108,14 +108,14 @@ public class MessagingMessageConverter implements MessageConverter, Initializing Message input = (Message) object; MessageHeaders headers = input.getHeaders(); Object conversionHint = headers.get(AbstractMessagingTemplate.CONVERSION_HINT_HEADER); - javax.jms.Message reply = createMessageForPayload(input.getPayload(), session, conversionHint); + jakarta.jms.Message reply = createMessageForPayload(input.getPayload(), session, conversionHint); this.headerMapper.fromHeaders(headers, reply); return reply; } @SuppressWarnings("unchecked") @Override - public Object fromMessage(javax.jms.Message message) throws JMSException, MessageConversionException { + public Object fromMessage(jakarta.jms.Message message) throws JMSException, MessageConversionException { Map mappedHeaders = extractHeaders(message); Object convertedObject = extractPayload(message); MessageBuilder builder = (convertedObject instanceof org.springframework.messaging.Message ? @@ -125,9 +125,9 @@ public class MessagingMessageConverter implements MessageConverter, Initializing } /** - * Extract the payload of the specified {@link javax.jms.Message}. + * Extract the payload of the specified {@link jakarta.jms.Message}. */ - protected Object extractPayload(javax.jms.Message message) throws JMSException { + protected Object extractPayload(jakarta.jms.Message message) throws JMSException { return this.payloadConverter.fromMessage(message); } @@ -138,13 +138,13 @@ public class MessagingMessageConverter implements MessageConverter, Initializing * @since 4.3 * @see MessageConverter#toMessage(Object, Session) */ - protected javax.jms.Message createMessageForPayload( + protected jakarta.jms.Message createMessageForPayload( Object payload, Session session, @Nullable Object conversionHint) throws JMSException { return this.payloadConverter.toMessage(payload, session); } - protected final MessageHeaders extractHeaders(javax.jms.Message message) { + protected final MessageHeaders extractHeaders(jakarta.jms.Message message) { return this.headerMapper.toHeaders(message); } diff --git a/spring-jms/src/main/java/org/springframework/jms/support/converter/SimpleMessageConverter.java b/spring-jms/src/main/java/org/springframework/jms/support/converter/SimpleMessageConverter.java index 4c28352000b..deab9e8677f 100644 --- a/spring-jms/src/main/java/org/springframework/jms/support/converter/SimpleMessageConverter.java +++ b/spring-jms/src/main/java/org/springframework/jms/support/converter/SimpleMessageConverter.java @@ -21,13 +21,13 @@ import java.util.Enumeration; import java.util.HashMap; import java.util.Map; -import javax.jms.BytesMessage; -import javax.jms.JMSException; -import javax.jms.MapMessage; -import javax.jms.Message; -import javax.jms.ObjectMessage; -import javax.jms.Session; -import javax.jms.TextMessage; +import jakarta.jms.BytesMessage; +import jakarta.jms.JMSException; +import jakarta.jms.MapMessage; +import jakarta.jms.Message; +import jakarta.jms.ObjectMessage; +import jakarta.jms.Session; +import jakarta.jms.TextMessage; import org.springframework.util.ObjectUtils; @@ -37,9 +37,9 @@ import org.springframework.util.ObjectUtils; * by {@link org.springframework.jms.core.JmsTemplate}, for * {@code convertAndSend} and {@code receiveAndConvert} operations. * - *

    Converts a String to a {@link javax.jms.TextMessage}, a byte array to a - * {@link javax.jms.BytesMessage}, a Map to a {@link javax.jms.MapMessage}, and - * a Serializable object to a {@link javax.jms.ObjectMessage} (or vice versa). + *

    Converts a String to a {@link jakarta.jms.TextMessage}, a byte array to a + * {@link jakarta.jms.BytesMessage}, a Map to a {@link jakarta.jms.MapMessage}, and + * a Serializable object to a {@link jakarta.jms.ObjectMessage} (or vice versa). * * @author Juergen Hoeller * @since 1.1 @@ -117,7 +117,7 @@ public class SimpleMessageConverter implements MessageConverter { * @param session current JMS session * @return the resulting message * @throws JMSException if thrown by JMS methods - * @see javax.jms.Session#createTextMessage + * @see jakarta.jms.Session#createTextMessage */ protected TextMessage createMessageForString(String text, Session session) throws JMSException { return session.createTextMessage(text); @@ -129,7 +129,7 @@ public class SimpleMessageConverter implements MessageConverter { * @param session current JMS session * @return the resulting message * @throws JMSException if thrown by JMS methods - * @see javax.jms.Session#createBytesMessage + * @see jakarta.jms.Session#createBytesMessage */ protected BytesMessage createMessageForByteArray(byte[] bytes, Session session) throws JMSException { BytesMessage message = session.createBytesMessage(); @@ -143,7 +143,7 @@ public class SimpleMessageConverter implements MessageConverter { * @param session current JMS session * @return the resulting message * @throws JMSException if thrown by JMS methods - * @see javax.jms.Session#createMapMessage + * @see jakarta.jms.Session#createMapMessage */ protected MapMessage createMessageForMap(Map map, Session session) throws JMSException { MapMessage message = session.createMapMessage(); @@ -164,7 +164,7 @@ public class SimpleMessageConverter implements MessageConverter { * @param session current JMS session * @return the resulting message * @throws JMSException if thrown by JMS methods - * @see javax.jms.Session#createObjectMessage + * @see jakarta.jms.Session#createObjectMessage */ protected ObjectMessage createMessageForSerializable(Serializable object, Session session) throws JMSException { return session.createObjectMessage(object); diff --git a/spring-jms/src/main/java/org/springframework/jms/support/converter/SmartMessageConverter.java b/spring-jms/src/main/java/org/springframework/jms/support/converter/SmartMessageConverter.java index 8ae6a894484..ab180e4eceb 100644 --- a/spring-jms/src/main/java/org/springframework/jms/support/converter/SmartMessageConverter.java +++ b/spring-jms/src/main/java/org/springframework/jms/support/converter/SmartMessageConverter.java @@ -16,9 +16,9 @@ package org.springframework.jms.support.converter; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.Session; +import jakarta.jms.JMSException; +import jakarta.jms.Message; +import jakarta.jms.Session; import org.springframework.lang.Nullable; @@ -43,7 +43,7 @@ public interface SmartMessageConverter extends MessageConverter { * @param conversionHint an extra object passed to the {@link MessageConverter}, * e.g. the associated {@code MethodParameter} (may be {@code null}} * @return the JMS Message - * @throws javax.jms.JMSException if thrown by JMS API methods + * @throws jakarta.jms.JMSException if thrown by JMS API methods * @throws MessageConversionException in case of conversion failure * @see #toMessage(Object, Session) */ diff --git a/spring-jms/src/main/java/org/springframework/jms/support/destination/BeanFactoryDestinationResolver.java b/spring-jms/src/main/java/org/springframework/jms/support/destination/BeanFactoryDestinationResolver.java index 0a7d5beaf3d..291e7a3d079 100644 --- a/spring-jms/src/main/java/org/springframework/jms/support/destination/BeanFactoryDestinationResolver.java +++ b/spring-jms/src/main/java/org/springframework/jms/support/destination/BeanFactoryDestinationResolver.java @@ -16,9 +16,9 @@ package org.springframework.jms.support.destination; -import javax.jms.Destination; -import javax.jms.JMSException; -import javax.jms.Session; +import jakarta.jms.Destination; +import jakarta.jms.JMSException; +import jakarta.jms.Session; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; @@ -30,7 +30,7 @@ import org.springframework.util.Assert; * {@link DestinationResolver} implementation based on a Spring {@link BeanFactory}. * *

    Will lookup Spring managed beans identified by bean name, - * expecting them to be of type {@code javax.jms.Destination}. + * expecting them to be of type {@code jakarta.jms.Destination}. * * @author Juergen Hoeller * @since 2.5 @@ -57,7 +57,7 @@ public class BeanFactoryDestinationResolver implements DestinationResolver, Bean * replaced by the {@link BeanFactory} that creates it (c.f. the * {@link BeanFactoryAware} contract). So only use this constructor if you * are using this class outside the context of a Spring IoC container. - * @param beanFactory the bean factory to be used to lookup {@link javax.jms.Destination Destination} + * @param beanFactory the bean factory to be used to lookup {@link jakarta.jms.Destination Destination} */ public BeanFactoryDestinationResolver(BeanFactory beanFactory) { Assert.notNull(beanFactory, "BeanFactory is required"); diff --git a/spring-jms/src/main/java/org/springframework/jms/support/destination/DestinationResolver.java b/spring-jms/src/main/java/org/springframework/jms/support/destination/DestinationResolver.java index 7767f3d2ccd..ddc273729ab 100644 --- a/spring-jms/src/main/java/org/springframework/jms/support/destination/DestinationResolver.java +++ b/spring-jms/src/main/java/org/springframework/jms/support/destination/DestinationResolver.java @@ -16,9 +16,9 @@ package org.springframework.jms.support.destination; -import javax.jms.Destination; -import javax.jms.JMSException; -import javax.jms.Session; +import jakarta.jms.Destination; +import jakarta.jms.JMSException; +import jakarta.jms.Session; import org.springframework.lang.Nullable; @@ -51,7 +51,7 @@ public interface DestinationResolver { * @param destinationName the name of the destination * @param pubSubDomain {@code true} if the domain is pub-sub, {@code false} if P2P * @return the JMS destination (either a topic or a queue) - * @throws javax.jms.JMSException if the JMS Session failed to resolve the destination + * @throws jakarta.jms.JMSException if the JMS Session failed to resolve the destination * @throws DestinationResolutionException in case of general destination resolution failure */ Destination resolveDestinationName(@Nullable Session session, String destinationName, boolean pubSubDomain) diff --git a/spring-jms/src/main/java/org/springframework/jms/support/destination/DynamicDestinationResolver.java b/spring-jms/src/main/java/org/springframework/jms/support/destination/DynamicDestinationResolver.java index 80d69145f9a..0a1d885f7ef 100644 --- a/spring-jms/src/main/java/org/springframework/jms/support/destination/DynamicDestinationResolver.java +++ b/spring-jms/src/main/java/org/springframework/jms/support/destination/DynamicDestinationResolver.java @@ -16,11 +16,11 @@ package org.springframework.jms.support.destination; -import javax.jms.Destination; -import javax.jms.JMSException; -import javax.jms.Queue; -import javax.jms.Session; -import javax.jms.Topic; +import jakarta.jms.Destination; +import jakarta.jms.JMSException; +import jakarta.jms.Queue; +import jakarta.jms.Session; +import jakarta.jms.Topic; import org.springframework.lang.Nullable; import org.springframework.util.Assert; @@ -31,8 +31,8 @@ import org.springframework.util.Assert; * * @author Juergen Hoeller * @since 1.1 - * @see javax.jms.Session#createQueue - * @see javax.jms.Session#createTopic + * @see jakarta.jms.Session#createQueue + * @see jakarta.jms.Session#createTopic */ public class DynamicDestinationResolver implements DestinationResolver { @@ -42,9 +42,9 @@ public class DynamicDestinationResolver implements DestinationResolver { * @param destinationName the name of the destination * @param pubSubDomain {@code true} if the domain is pub-sub, {@code false} if P2P * @return the JMS destination (either a topic or a queue) - * @throws javax.jms.JMSException if resolution failed - * @see #resolveTopic(javax.jms.Session, String) - * @see #resolveQueue(javax.jms.Session, String) + * @throws jakarta.jms.JMSException if resolution failed + * @see #resolveTopic(jakarta.jms.Session, String) + * @see #resolveQueue(jakarta.jms.Session, String) */ @Override public Destination resolveDestinationName(@Nullable Session session, String destinationName, boolean pubSubDomain) @@ -66,7 +66,7 @@ public class DynamicDestinationResolver implements DestinationResolver { * @param session the current JMS Session * @param topicName the name of the desired {@link Topic} * @return the JMS {@link Topic} - * @throws javax.jms.JMSException if resolution failed + * @throws jakarta.jms.JMSException if resolution failed * @see Session#createTopic(String) */ protected Topic resolveTopic(Session session, String topicName) throws JMSException { @@ -78,7 +78,7 @@ public class DynamicDestinationResolver implements DestinationResolver { * @param session the current JMS Session * @param queueName the name of the desired {@link Queue} * @return the JMS {@link Queue} - * @throws javax.jms.JMSException if resolution failed + * @throws jakarta.jms.JMSException if resolution failed * @see Session#createQueue(String) */ protected Queue resolveQueue(Session session, String queueName) throws JMSException { diff --git a/spring-jms/src/main/java/org/springframework/jms/support/destination/JmsDestinationAccessor.java b/spring-jms/src/main/java/org/springframework/jms/support/destination/JmsDestinationAccessor.java index 56953b02a7d..6711e7030f7 100644 --- a/spring-jms/src/main/java/org/springframework/jms/support/destination/JmsDestinationAccessor.java +++ b/spring-jms/src/main/java/org/springframework/jms/support/destination/JmsDestinationAccessor.java @@ -16,11 +16,11 @@ package org.springframework.jms.support.destination; -import javax.jms.Destination; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageConsumer; -import javax.jms.Session; +import jakarta.jms.Destination; +import jakarta.jms.JMSException; +import jakarta.jms.Message; +import jakarta.jms.MessageConsumer; +import jakarta.jms.Session; import org.springframework.jms.support.JmsAccessor; import org.springframework.lang.Nullable; @@ -62,7 +62,7 @@ public abstract class JmsDestinationAccessor extends JmsAccessor { /** * Set the {@link DestinationResolver} that is to be used to resolve - * {@link javax.jms.Destination} references for this accessor. + * {@link jakarta.jms.Destination} references for this accessor. *

    The default resolver is a DynamicDestinationResolver. Specify a * JndiDestinationResolver for resolving destination names as JNDI locations. * @see org.springframework.jms.support.destination.DynamicDestinationResolver @@ -85,8 +85,8 @@ public abstract class JmsDestinationAccessor extends JmsAccessor { * Default is Point-to-Point (Queues). *

    This setting primarily indicates what type of destination to resolve * if dynamic destinations are enabled. - * @param pubSubDomain "true" for the Publish/Subscribe domain ({@link javax.jms.Topic Topics}), - * "false" for the Point-to-Point domain ({@link javax.jms.Queue Queues}) + * @param pubSubDomain "true" for the Publish/Subscribe domain ({@link jakarta.jms.Topic Topics}), + * "false" for the Point-to-Point domain ({@link jakarta.jms.Queue Queues}) * @see #setDestinationResolver */ public void setPubSubDomain(boolean pubSubDomain) { @@ -94,8 +94,8 @@ public abstract class JmsDestinationAccessor extends JmsAccessor { } /** - * Return whether the Publish/Subscribe domain ({@link javax.jms.Topic Topics}) is used. - * Otherwise, the Point-to-Point domain ({@link javax.jms.Queue Queues}) is used. + * Return whether the Publish/Subscribe domain ({@link jakarta.jms.Topic Topics}) is used. + * Otherwise, the Point-to-Point domain ({@link jakarta.jms.Queue Queues}) is used. */ public boolean isPubSubDomain() { return this.pubSubDomain; @@ -108,7 +108,7 @@ public abstract class JmsDestinationAccessor extends JmsAccessor { * @param session the current JMS {@link Session} * @param destinationName the name of the destination * @return the located {@link Destination} - * @throws javax.jms.JMSException if resolution failed + * @throws jakarta.jms.JMSException if resolution failed * @see #setDestinationResolver */ protected Destination resolveDestinationName(Session session, String destinationName) throws JMSException { diff --git a/spring-jms/src/main/java/org/springframework/jms/support/destination/JndiDestinationResolver.java b/spring-jms/src/main/java/org/springframework/jms/support/destination/JndiDestinationResolver.java index 86e0e7da2ad..b27d883a088 100644 --- a/spring-jms/src/main/java/org/springframework/jms/support/destination/JndiDestinationResolver.java +++ b/spring-jms/src/main/java/org/springframework/jms/support/destination/JndiDestinationResolver.java @@ -19,13 +19,14 @@ package org.springframework.jms.support.destination; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import javax.jms.Destination; -import javax.jms.JMSException; -import javax.jms.Queue; -import javax.jms.Session; -import javax.jms.Topic; import javax.naming.NamingException; +import jakarta.jms.Destination; +import jakarta.jms.JMSException; +import jakarta.jms.Queue; +import jakarta.jms.Session; +import jakarta.jms.Topic; + import org.springframework.jndi.JndiLocatorSupport; import org.springframework.lang.Nullable; import org.springframework.util.Assert; diff --git a/spring-jms/src/main/resources/org/springframework/jms/config/spring-jms.xsd b/spring-jms/src/main/resources/org/springframework/jms/config/spring-jms.xsd index f454160fa58..e38673903d8 100644 --- a/spring-jms/src/main/resources/org/springframework/jms/config/spring-jms.xsd +++ b/spring-jms/src/main/resources/org/springframework/jms/config/spring-jms.xsd @@ -151,7 +151,7 @@ ]]> - + @@ -178,7 +178,7 @@ A reference to the DestinationResolver strategy for resolving destination names. Default is a DynamicDestinationResolver, using the JMS provider's queue/topic name resolution. Alternatively, specify a reference to a JndiDestinationResolver - (typically in a Java EE environment). + (typically in a Jakarta EE environment). ]]> @@ -260,7 +260,7 @@ The cache level for JMS resources: "none", "connection", "session", "consumer" or "auto". By default ("auto"), the cache level will effectively be "consumer", unless an external transaction manager has been specified - in which case the - effective default will be "none" (assuming Java EE-style transaction management + effective default will be "none" (assuming Jakarta EE-style transaction management where the given ConnectionFactory is an XA-aware pool). ]]> @@ -411,7 +411,7 @@ ]]> - + @@ -435,7 +435,7 @@ @@ -516,7 +516,7 @@ diff --git a/spring-jms/src/test/java/org/springframework/jca/StubActivationSpec.java b/spring-jms/src/test/java/org/springframework/jca/StubActivationSpec.java index 41950530e37..f7df15458d5 100644 --- a/spring-jms/src/test/java/org/springframework/jca/StubActivationSpec.java +++ b/spring-jms/src/test/java/org/springframework/jca/StubActivationSpec.java @@ -16,10 +16,10 @@ package org.springframework.jca; -import javax.resource.ResourceException; -import javax.resource.spi.ActivationSpec; -import javax.resource.spi.InvalidPropertyException; -import javax.resource.spi.ResourceAdapter; +import jakarta.resource.ResourceException; +import jakarta.resource.spi.ActivationSpec; +import jakarta.resource.spi.InvalidPropertyException; +import jakarta.resource.spi.ResourceAdapter; /** * @author Juergen Hoeller diff --git a/spring-jms/src/test/java/org/springframework/jca/StubResourceAdapter.java b/spring-jms/src/test/java/org/springframework/jca/StubResourceAdapter.java index 787f6250a52..5f751395e1a 100644 --- a/spring-jms/src/test/java/org/springframework/jca/StubResourceAdapter.java +++ b/spring-jms/src/test/java/org/springframework/jca/StubResourceAdapter.java @@ -16,14 +16,15 @@ package org.springframework.jca; -import javax.resource.ResourceException; -import javax.resource.spi.ActivationSpec; -import javax.resource.spi.BootstrapContext; -import javax.resource.spi.ResourceAdapter; -import javax.resource.spi.ResourceAdapterInternalException; -import javax.resource.spi.endpoint.MessageEndpointFactory; import javax.transaction.xa.XAResource; +import jakarta.resource.ResourceException; +import jakarta.resource.spi.ActivationSpec; +import jakarta.resource.spi.BootstrapContext; +import jakarta.resource.spi.ResourceAdapter; +import jakarta.resource.spi.ResourceAdapterInternalException; +import jakarta.resource.spi.endpoint.MessageEndpointFactory; + /** * @author Juergen Hoeller */ diff --git a/spring-jms/src/test/java/org/springframework/jms/StubConnectionFactory.java b/spring-jms/src/test/java/org/springframework/jms/StubConnectionFactory.java index a8df4ed3774..a85c43aefe9 100644 --- a/spring-jms/src/test/java/org/springframework/jms/StubConnectionFactory.java +++ b/spring-jms/src/test/java/org/springframework/jms/StubConnectionFactory.java @@ -16,10 +16,10 @@ package org.springframework.jms; -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.JMSContext; -import javax.jms.JMSException; +import jakarta.jms.Connection; +import jakarta.jms.ConnectionFactory; +import jakarta.jms.JMSContext; +import jakarta.jms.JMSException; /** * A stub implementation of the JMS ConnectionFactory for testing. diff --git a/spring-jms/src/test/java/org/springframework/jms/StubQueue.java b/spring-jms/src/test/java/org/springframework/jms/StubQueue.java index c529a2c066b..34e10a51143 100644 --- a/spring-jms/src/test/java/org/springframework/jms/StubQueue.java +++ b/spring-jms/src/test/java/org/springframework/jms/StubQueue.java @@ -16,10 +16,10 @@ package org.springframework.jms; -import javax.jms.Queue; +import jakarta.jms.Queue; /** - * Stub implementation of the {@link javax.jms.Queue} interface. + * Stub implementation of the {@link jakarta.jms.Queue} interface. * * @author Rick Evans */ diff --git a/spring-jms/src/test/java/org/springframework/jms/StubTextMessage.java b/spring-jms/src/test/java/org/springframework/jms/StubTextMessage.java index cb4d0ee6f12..3276634761b 100644 --- a/spring-jms/src/test/java/org/springframework/jms/StubTextMessage.java +++ b/spring-jms/src/test/java/org/springframework/jms/StubTextMessage.java @@ -19,9 +19,9 @@ package org.springframework.jms; import java.util.Enumeration; import java.util.concurrent.ConcurrentHashMap; -import javax.jms.Destination; -import javax.jms.JMSException; -import javax.jms.TextMessage; +import jakarta.jms.Destination; +import jakarta.jms.JMSException; +import jakarta.jms.TextMessage; /** * Stub JMS Message implementation intended for testing purposes only. diff --git a/spring-jms/src/test/java/org/springframework/jms/StubTopic.java b/spring-jms/src/test/java/org/springframework/jms/StubTopic.java index 2621b9aea18..c11b925dc49 100644 --- a/spring-jms/src/test/java/org/springframework/jms/StubTopic.java +++ b/spring-jms/src/test/java/org/springframework/jms/StubTopic.java @@ -16,7 +16,7 @@ package org.springframework.jms; -import javax.jms.Topic; +import jakarta.jms.Topic; /** * Stub implementation of the {@link Topic} interface. diff --git a/spring-jms/src/test/java/org/springframework/jms/annotation/AbstractJmsAnnotationDrivenTests.java b/spring-jms/src/test/java/org/springframework/jms/annotation/AbstractJmsAnnotationDrivenTests.java index d0986f527dc..8ac5af2c956 100644 --- a/spring-jms/src/test/java/org/springframework/jms/annotation/AbstractJmsAnnotationDrivenTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/annotation/AbstractJmsAnnotationDrivenTests.java @@ -18,9 +18,8 @@ package org.springframework.jms.annotation; import java.lang.reflect.Method; -import javax.jms.JMSException; -import javax.jms.Session; - +import jakarta.jms.JMSException; +import jakarta.jms.Session; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContext; diff --git a/spring-jms/src/test/java/org/springframework/jms/annotation/AnnotationDrivenNamespaceTests.java b/spring-jms/src/test/java/org/springframework/jms/annotation/AnnotationDrivenNamespaceTests.java index f2d84d307b2..e4d28bcd3a4 100644 --- a/spring-jms/src/test/java/org/springframework/jms/annotation/AnnotationDrivenNamespaceTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/annotation/AnnotationDrivenNamespaceTests.java @@ -16,9 +16,8 @@ package org.springframework.jms.annotation; -import javax.jms.JMSException; -import javax.jms.MessageListener; - +import jakarta.jms.JMSException; +import jakarta.jms.MessageListener; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContext; diff --git a/spring-jms/src/test/java/org/springframework/jms/annotation/EnableJmsTests.java b/spring-jms/src/test/java/org/springframework/jms/annotation/EnableJmsTests.java index 1bdc0d20c0e..1a1d61c5235 100644 --- a/spring-jms/src/test/java/org/springframework/jms/annotation/EnableJmsTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/annotation/EnableJmsTests.java @@ -19,9 +19,8 @@ package org.springframework.jms.annotation; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; -import javax.jms.JMSException; -import javax.jms.MessageListener; - +import jakarta.jms.JMSException; +import jakarta.jms.MessageListener; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.BeanCreationException; diff --git a/spring-jms/src/test/java/org/springframework/jms/config/JmsListenerContainerFactoryIntegrationTests.java b/spring-jms/src/test/java/org/springframework/jms/config/JmsListenerContainerFactoryIntegrationTests.java index f1efec4d74a..b84fb7060c2 100644 --- a/spring-jms/src/test/java/org/springframework/jms/config/JmsListenerContainerFactoryIntegrationTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/config/JmsListenerContainerFactoryIntegrationTests.java @@ -20,12 +20,11 @@ import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageListener; -import javax.jms.Session; -import javax.jms.TextMessage; - +import jakarta.jms.JMSException; +import jakarta.jms.Message; +import jakarta.jms.MessageListener; +import jakarta.jms.Session; +import jakarta.jms.TextMessage; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-jms/src/test/java/org/springframework/jms/config/JmsListenerContainerFactoryTests.java b/spring-jms/src/test/java/org/springframework/jms/config/JmsListenerContainerFactoryTests.java index 865a0edc08f..c1cba94e1a7 100644 --- a/spring-jms/src/test/java/org/springframework/jms/config/JmsListenerContainerFactoryTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/config/JmsListenerContainerFactoryTests.java @@ -16,11 +16,10 @@ package org.springframework.jms.config; -import javax.jms.ConnectionFactory; -import javax.jms.MessageListener; -import javax.jms.Session; -import javax.transaction.TransactionManager; - +import jakarta.jms.ConnectionFactory; +import jakarta.jms.MessageListener; +import jakarta.jms.Session; +import jakarta.transaction.TransactionManager; import org.junit.jupiter.api.Test; import org.springframework.beans.DirectFieldAccessor; diff --git a/spring-jms/src/test/java/org/springframework/jms/config/JmsListenerEndpointTests.java b/spring-jms/src/test/java/org/springframework/jms/config/JmsListenerEndpointTests.java index fa93a7f257c..0f66f2393a7 100644 --- a/spring-jms/src/test/java/org/springframework/jms/config/JmsListenerEndpointTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/config/JmsListenerEndpointTests.java @@ -16,8 +16,7 @@ package org.springframework.jms.config; -import javax.jms.MessageListener; - +import jakarta.jms.MessageListener; import org.junit.jupiter.api.Test; import org.springframework.beans.DirectFieldAccessor; diff --git a/spring-jms/src/test/java/org/springframework/jms/config/JmsNamespaceHandlerTests.java b/spring-jms/src/test/java/org/springframework/jms/config/JmsNamespaceHandlerTests.java index 43b9a1a6ca5..658ecf62ab4 100644 --- a/spring-jms/src/test/java/org/springframework/jms/config/JmsNamespaceHandlerTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/config/JmsNamespaceHandlerTests.java @@ -21,11 +21,10 @@ import java.util.Iterator; import java.util.Map; import java.util.Set; -import javax.jms.ConnectionFactory; -import javax.jms.Message; -import javax.jms.MessageListener; -import javax.jms.TextMessage; - +import jakarta.jms.ConnectionFactory; +import jakarta.jms.Message; +import jakarta.jms.MessageListener; +import jakarta.jms.TextMessage; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-jms/src/test/java/org/springframework/jms/config/MethodJmsListenerEndpointTests.java b/spring-jms/src/test/java/org/springframework/jms/config/MethodJmsListenerEndpointTests.java index 4e74d2dc409..8e1c3ecd510 100644 --- a/spring-jms/src/test/java/org/springframework/jms/config/MethodJmsListenerEndpointTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/config/MethodJmsListenerEndpointTests.java @@ -22,14 +22,13 @@ import java.util.Arrays; import java.util.HashMap; import java.util.Map; -import javax.jms.Destination; -import javax.jms.InvalidDestinationException; -import javax.jms.JMSException; -import javax.jms.ObjectMessage; -import javax.jms.QueueSender; -import javax.jms.Session; -import javax.jms.TextMessage; - +import jakarta.jms.Destination; +import jakarta.jms.InvalidDestinationException; +import jakarta.jms.JMSException; +import jakarta.jms.ObjectMessage; +import jakarta.jms.QueueSender; +import jakarta.jms.Session; +import jakarta.jms.TextMessage; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInfo; @@ -127,7 +126,7 @@ class MethodJmsListenerEndpointTests { @Test void resolveMessageAndSession() throws JMSException { - MessagingMessageListenerAdapter listener = createDefaultInstance(javax.jms.Message.class, Session.class); + MessagingMessageListenerAdapter listener = createDefaultInstance(jakarta.jms.Message.class, Session.class); Session session = mock(Session.class); listener.onMessage(createSimpleJmsTextMessage("test"), session); @@ -521,7 +520,7 @@ class MethodJmsListenerEndpointTests { private final Map invocations = new HashMap<>(); - public void resolveMessageAndSession(javax.jms.Message message, Session session) { + public void resolveMessageAndSession(jakarta.jms.Message message, Session session) { this.invocations.put("resolveMessageAndSession", true); assertThat(message).as("Message not injected").isNotNull(); assertThat(session).as("Session not injected").isNotNull(); diff --git a/spring-jms/src/test/java/org/springframework/jms/config/SimpleJmsListenerEndpointTests.java b/spring-jms/src/test/java/org/springframework/jms/config/SimpleJmsListenerEndpointTests.java index b8ef640a60c..0ba4c762cb5 100644 --- a/spring-jms/src/test/java/org/springframework/jms/config/SimpleJmsListenerEndpointTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/config/SimpleJmsListenerEndpointTests.java @@ -16,8 +16,7 @@ package org.springframework.jms.config; -import javax.jms.MessageListener; - +import jakarta.jms.MessageListener; import org.junit.jupiter.api.Test; import org.springframework.jms.listener.SimpleMessageListenerContainer; diff --git a/spring-jms/src/test/java/org/springframework/jms/connection/JmsTransactionManagerTests.java b/spring-jms/src/test/java/org/springframework/jms/connection/JmsTransactionManagerTests.java index ae0878a29df..3b9897df3ff 100644 --- a/spring-jms/src/test/java/org/springframework/jms/connection/JmsTransactionManagerTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/connection/JmsTransactionManagerTests.java @@ -16,14 +16,13 @@ package org.springframework.jms.connection; -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.Destination; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageProducer; -import javax.jms.Session; - +import jakarta.jms.Connection; +import jakarta.jms.ConnectionFactory; +import jakarta.jms.Destination; +import jakarta.jms.JMSException; +import jakarta.jms.Message; +import jakarta.jms.MessageProducer; +import jakarta.jms.Session; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; diff --git a/spring-jms/src/test/java/org/springframework/jms/connection/SingleConnectionFactoryTests.java b/spring-jms/src/test/java/org/springframework/jms/connection/SingleConnectionFactoryTests.java index 85a6126dde2..110ffa2b106 100644 --- a/spring-jms/src/test/java/org/springframework/jms/connection/SingleConnectionFactoryTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/connection/SingleConnectionFactoryTests.java @@ -16,18 +16,17 @@ package org.springframework.jms.connection; -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.ExceptionListener; -import javax.jms.JMSException; -import javax.jms.QueueConnection; -import javax.jms.QueueConnectionFactory; -import javax.jms.QueueSession; -import javax.jms.Session; -import javax.jms.TopicConnection; -import javax.jms.TopicConnectionFactory; -import javax.jms.TopicSession; - +import jakarta.jms.Connection; +import jakarta.jms.ConnectionFactory; +import jakarta.jms.ExceptionListener; +import jakarta.jms.JMSException; +import jakarta.jms.QueueConnection; +import jakarta.jms.QueueConnectionFactory; +import jakarta.jms.QueueSession; +import jakarta.jms.Session; +import jakarta.jms.TopicConnection; +import jakarta.jms.TopicConnectionFactory; +import jakarta.jms.TopicSession; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; diff --git a/spring-jms/src/test/java/org/springframework/jms/connection/TestConnection.java b/spring-jms/src/test/java/org/springframework/jms/connection/TestConnection.java index 3cef4288d49..99ebfa92ff9 100644 --- a/spring-jms/src/test/java/org/springframework/jms/connection/TestConnection.java +++ b/spring-jms/src/test/java/org/springframework/jms/connection/TestConnection.java @@ -16,15 +16,15 @@ package org.springframework.jms.connection; -import javax.jms.Connection; -import javax.jms.ConnectionConsumer; -import javax.jms.ConnectionMetaData; -import javax.jms.Destination; -import javax.jms.ExceptionListener; -import javax.jms.JMSException; -import javax.jms.ServerSessionPool; -import javax.jms.Session; -import javax.jms.Topic; +import jakarta.jms.Connection; +import jakarta.jms.ConnectionConsumer; +import jakarta.jms.ConnectionMetaData; +import jakarta.jms.Destination; +import jakarta.jms.ExceptionListener; +import jakarta.jms.JMSException; +import jakarta.jms.ServerSessionPool; +import jakarta.jms.Session; +import jakarta.jms.Topic; /** * @author Juergen Hoeller diff --git a/spring-jms/src/test/java/org/springframework/jms/connection/TestExceptionListener.java b/spring-jms/src/test/java/org/springframework/jms/connection/TestExceptionListener.java index 57b77ad160a..1e95a8c98b4 100644 --- a/spring-jms/src/test/java/org/springframework/jms/connection/TestExceptionListener.java +++ b/spring-jms/src/test/java/org/springframework/jms/connection/TestExceptionListener.java @@ -16,8 +16,8 @@ package org.springframework.jms.connection; -import javax.jms.ExceptionListener; -import javax.jms.JMSException; +import jakarta.jms.ExceptionListener; +import jakarta.jms.JMSException; /** * @author Juergen Hoeller diff --git a/spring-jms/src/test/java/org/springframework/jms/core/JmsMessagingTemplateTests.java b/spring-jms/src/test/java/org/springframework/jms/core/JmsMessagingTemplateTests.java index 96148ab15f4..10b63329467 100644 --- a/spring-jms/src/test/java/org/springframework/jms/core/JmsMessagingTemplateTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/core/JmsMessagingTemplateTests.java @@ -20,13 +20,12 @@ import java.io.Writer; import java.util.HashMap; import java.util.Map; -import javax.jms.Destination; -import javax.jms.JMSException; -import javax.jms.MessageFormatException; -import javax.jms.MessageNotWriteableException; -import javax.jms.Session; -import javax.jms.TextMessage; - +import jakarta.jms.Destination; +import jakarta.jms.JMSException; +import jakarta.jms.MessageFormatException; +import jakarta.jms.MessageNotWriteableException; +import jakarta.jms.Session; +import jakarta.jms.TextMessage; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -237,7 +236,7 @@ public class JmsMessagingTemplateTests { public void convertAndSendCustomJmsMessageConverter() throws JMSException { this.messagingTemplate.setJmsMessageConverter(new SimpleMessageConverter() { @Override - public javax.jms.Message toMessage(Object object, Session session) + public jakarta.jms.Message toMessage(Object object, Session session) throws JMSException, org.springframework.jms.support.converter.MessageConversionException { throw new org.springframework.jms.support.converter.MessageConversionException("Test exception"); } @@ -275,7 +274,7 @@ public class JmsMessagingTemplateTests { @Test public void receive() { Destination destination = new Destination() {}; - javax.jms.Message jmsMessage = createJmsTextMessage(); + jakarta.jms.Message jmsMessage = createJmsTextMessage(); given(this.jmsTemplate.receive(destination)).willReturn(jmsMessage); Message message = this.messagingTemplate.receive(destination); @@ -285,7 +284,7 @@ public class JmsMessagingTemplateTests { @Test public void receiveName() { - javax.jms.Message jmsMessage = createJmsTextMessage(); + jakarta.jms.Message jmsMessage = createJmsTextMessage(); given(this.jmsTemplate.receive("myQueue")).willReturn(jmsMessage); Message message = this.messagingTemplate.receive("myQueue"); @@ -297,7 +296,7 @@ public class JmsMessagingTemplateTests { public void receiveDefaultDestination() { Destination destination = new Destination() {}; this.messagingTemplate.setDefaultDestination(destination); - javax.jms.Message jmsMessage = createJmsTextMessage(); + jakarta.jms.Message jmsMessage = createJmsTextMessage(); given(this.jmsTemplate.receive(destination)).willReturn(jmsMessage); Message message = this.messagingTemplate.receive(); @@ -308,7 +307,7 @@ public class JmsMessagingTemplateTests { @Test public void receiveDefaultDestinationName() { this.messagingTemplate.setDefaultDestinationName("myQueue"); - javax.jms.Message jmsMessage = createJmsTextMessage(); + jakarta.jms.Message jmsMessage = createJmsTextMessage(); given(this.jmsTemplate.receive("myQueue")).willReturn(jmsMessage); Message message = this.messagingTemplate.receive(); @@ -325,7 +324,7 @@ public class JmsMessagingTemplateTests { @Test public void receiveAndConvert() { Destination destination = new Destination() {}; - javax.jms.Message jmsMessage = createJmsTextMessage("my Payload"); + jakarta.jms.Message jmsMessage = createJmsTextMessage("my Payload"); given(this.jmsTemplate.receive(destination)).willReturn(jmsMessage); String payload = this.messagingTemplate.receiveAndConvert(destination, String.class); @@ -335,7 +334,7 @@ public class JmsMessagingTemplateTests { @Test public void receiveAndConvertName() { - javax.jms.Message jmsMessage = createJmsTextMessage("my Payload"); + jakarta.jms.Message jmsMessage = createJmsTextMessage("my Payload"); given(this.jmsTemplate.receive("myQueue")).willReturn(jmsMessage); String payload = this.messagingTemplate.receiveAndConvert("myQueue", String.class); @@ -347,7 +346,7 @@ public class JmsMessagingTemplateTests { public void receiveAndConvertDefaultDestination() { Destination destination = new Destination() {}; this.messagingTemplate.setDefaultDestination(destination); - javax.jms.Message jmsMessage = createJmsTextMessage("my Payload"); + jakarta.jms.Message jmsMessage = createJmsTextMessage("my Payload"); given(this.jmsTemplate.receive(destination)).willReturn(jmsMessage); String payload = this.messagingTemplate.receiveAndConvert(String.class); @@ -358,7 +357,7 @@ public class JmsMessagingTemplateTests { @Test public void receiveAndConvertDefaultDestinationName() { this.messagingTemplate.setDefaultDestinationName("myQueue"); - javax.jms.Message jmsMessage = createJmsTextMessage("my Payload"); + jakarta.jms.Message jmsMessage = createJmsTextMessage("my Payload"); given(this.jmsTemplate.receive("myQueue")).willReturn(jmsMessage); String payload = this.messagingTemplate.receiveAndConvert(String.class); @@ -368,7 +367,7 @@ public class JmsMessagingTemplateTests { @Test public void receiveAndConvertWithConversion() { - javax.jms.Message jmsMessage = createJmsTextMessage("123"); + jakarta.jms.Message jmsMessage = createJmsTextMessage("123"); given(this.jmsTemplate.receive("myQueue")).willReturn(jmsMessage); this.messagingTemplate.setMessageConverter(new GenericMessageConverter()); @@ -380,7 +379,7 @@ public class JmsMessagingTemplateTests { @Test public void receiveAndConvertNoConverter() { - javax.jms.Message jmsMessage = createJmsTextMessage("Hello"); + jakarta.jms.Message jmsMessage = createJmsTextMessage("Hello"); given(this.jmsTemplate.receive("myQueue")).willReturn(jmsMessage); assertThatExceptionOfType(org.springframework.messaging.converter.MessageConversionException.class).isThrownBy(() -> @@ -398,7 +397,7 @@ public class JmsMessagingTemplateTests { public void sendAndReceive() { Destination destination = new Destination() {}; Message request = createTextMessage(); - javax.jms.Message replyJmsMessage = createJmsTextMessage(); + jakarta.jms.Message replyJmsMessage = createJmsTextMessage(); given(this.jmsTemplate.sendAndReceive(eq(destination), any())).willReturn(replyJmsMessage); Message actual = this.messagingTemplate.sendAndReceive(destination, request); @@ -409,7 +408,7 @@ public class JmsMessagingTemplateTests { @Test public void sendAndReceiveName() { Message request = createTextMessage(); - javax.jms.Message replyJmsMessage = createJmsTextMessage(); + jakarta.jms.Message replyJmsMessage = createJmsTextMessage(); given(this.jmsTemplate.sendAndReceive(eq("myQueue"), any())).willReturn(replyJmsMessage); Message actual = this.messagingTemplate.sendAndReceive("myQueue", request); @@ -422,7 +421,7 @@ public class JmsMessagingTemplateTests { Destination destination = new Destination() {}; this.messagingTemplate.setDefaultDestination(destination); Message request = createTextMessage(); - javax.jms.Message replyJmsMessage = createJmsTextMessage(); + jakarta.jms.Message replyJmsMessage = createJmsTextMessage(); given(this.jmsTemplate.sendAndReceive(eq(destination), any())).willReturn(replyJmsMessage); Message actual = this.messagingTemplate.sendAndReceive(request); @@ -434,7 +433,7 @@ public class JmsMessagingTemplateTests { public void sendAndReceiveDefaultDestinationName() { this.messagingTemplate.setDefaultDestinationName("myQueue"); Message request = createTextMessage(); - javax.jms.Message replyJmsMessage = createJmsTextMessage(); + jakarta.jms.Message replyJmsMessage = createJmsTextMessage(); given(this.jmsTemplate.sendAndReceive(eq("myQueue"), any())).willReturn(replyJmsMessage); Message actual = this.messagingTemplate.sendAndReceive(request); @@ -453,7 +452,7 @@ public class JmsMessagingTemplateTests { @Test public void convertSendAndReceivePayload() throws JMSException { Destination destination = new Destination() {}; - javax.jms.Message replyJmsMessage = createJmsTextMessage("My reply"); + jakarta.jms.Message replyJmsMessage = createJmsTextMessage("My reply"); given(this.jmsTemplate.sendAndReceive(eq(destination), any())).willReturn(replyJmsMessage); String reply = this.messagingTemplate.convertSendAndReceive(destination, "my Payload", String.class); @@ -463,7 +462,7 @@ public class JmsMessagingTemplateTests { @Test public void convertSendAndReceivePayloadName() throws JMSException { - javax.jms.Message replyJmsMessage = createJmsTextMessage("My reply"); + jakarta.jms.Message replyJmsMessage = createJmsTextMessage("My reply"); given(this.jmsTemplate.sendAndReceive(eq("myQueue"), any())).willReturn(replyJmsMessage); String reply = this.messagingTemplate.convertSendAndReceive("myQueue", "my Payload", String.class); @@ -475,7 +474,7 @@ public class JmsMessagingTemplateTests { public void convertSendAndReceiveDefaultDestination() throws JMSException { Destination destination = new Destination() {}; this.messagingTemplate.setDefaultDestination(destination); - javax.jms.Message replyJmsMessage = createJmsTextMessage("My reply"); + jakarta.jms.Message replyJmsMessage = createJmsTextMessage("My reply"); given(this.jmsTemplate.sendAndReceive(eq(destination), any())).willReturn(replyJmsMessage); String reply = this.messagingTemplate.convertSendAndReceive("my Payload", String.class); @@ -486,7 +485,7 @@ public class JmsMessagingTemplateTests { @Test public void convertSendAndReceiveDefaultDestinationName() throws JMSException { this.messagingTemplate.setDefaultDestinationName("myQueue"); - javax.jms.Message replyJmsMessage = createJmsTextMessage("My reply"); + jakarta.jms.Message replyJmsMessage = createJmsTextMessage("My reply"); given(this.jmsTemplate.sendAndReceive(eq("myQueue"), any())).willReturn(replyJmsMessage); String reply = this.messagingTemplate.convertSendAndReceive("my Payload", String.class); @@ -515,7 +514,7 @@ public class JmsMessagingTemplateTests { @Test public void convertMessageConversionExceptionOnReceive() throws JMSException { - javax.jms.Message message = createJmsTextMessage(); + jakarta.jms.Message message = createJmsTextMessage(); MessageConverter messageConverter = mock(MessageConverter.class); willThrow(org.springframework.jms.support.converter.MessageConversionException.class) .given(messageConverter).fromMessage(message); @@ -611,7 +610,7 @@ public class JmsMessagingTemplateTests { return createTextMessage("Hello"); } - private javax.jms.Message createJmsTextMessage(String payload) { + private jakarta.jms.Message createJmsTextMessage(String payload) { try { StubTextMessage jmsMessage = new StubTextMessage(payload); jmsMessage.setStringProperty("foo", "bar"); @@ -622,7 +621,7 @@ public class JmsMessagingTemplateTests { } } - private javax.jms.Message createJmsTextMessage() { + private jakarta.jms.Message createJmsTextMessage() { return createJmsTextMessage("Hello"); } @@ -650,7 +649,7 @@ public class JmsMessagingTemplateTests { given(mock.createTextMessage(any())).willAnswer( (Answer) invocation -> new StubTextMessage((String) invocation.getArguments()[0])); - javax.jms.Message message = creator.createMessage(mock); + jakarta.jms.Message message = creator.createMessage(mock); verify(mock).createTextMessage(any()); return (TextMessage) message; } diff --git a/spring-jms/src/test/java/org/springframework/jms/core/JmsTemplateTests.java b/spring-jms/src/test/java/org/springframework/jms/core/JmsTemplateTests.java index 0690e7d349d..9f82be855f9 100644 --- a/spring-jms/src/test/java/org/springframework/jms/core/JmsTemplateTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/core/JmsTemplateTests.java @@ -20,20 +20,20 @@ import java.io.PrintWriter; import java.io.StringWriter; import java.util.List; -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.DeliveryMode; -import javax.jms.Destination; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageConsumer; -import javax.jms.MessageProducer; -import javax.jms.Queue; -import javax.jms.Session; -import javax.jms.TemporaryQueue; -import javax.jms.TextMessage; import javax.naming.Context; +import jakarta.jms.Connection; +import jakarta.jms.ConnectionFactory; +import jakarta.jms.DeliveryMode; +import jakarta.jms.Destination; +import jakarta.jms.JMSException; +import jakarta.jms.Message; +import jakarta.jms.MessageConsumer; +import jakarta.jms.MessageProducer; +import jakarta.jms.Queue; +import jakarta.jms.Session; +import jakarta.jms.TemporaryQueue; +import jakarta.jms.TextMessage; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -721,67 +721,67 @@ class JmsTemplateTests { @Test void testIllegalStateException() throws Exception { - doTestJmsException(new javax.jms.IllegalStateException(""), org.springframework.jms.IllegalStateException.class); + doTestJmsException(new jakarta.jms.IllegalStateException(""), org.springframework.jms.IllegalStateException.class); } @Test void testInvalidClientIDException() throws Exception { - doTestJmsException(new javax.jms.InvalidClientIDException(""), InvalidClientIDException.class); + doTestJmsException(new jakarta.jms.InvalidClientIDException(""), InvalidClientIDException.class); } @Test void testInvalidDestinationException() throws Exception { - doTestJmsException(new javax.jms.InvalidDestinationException(""), InvalidDestinationException.class); + doTestJmsException(new jakarta.jms.InvalidDestinationException(""), InvalidDestinationException.class); } @Test void testInvalidSelectorException() throws Exception { - doTestJmsException(new javax.jms.InvalidSelectorException(""), InvalidSelectorException.class); + doTestJmsException(new jakarta.jms.InvalidSelectorException(""), InvalidSelectorException.class); } @Test void testJmsSecurityException() throws Exception { - doTestJmsException(new javax.jms.JMSSecurityException(""), JmsSecurityException.class); + doTestJmsException(new jakarta.jms.JMSSecurityException(""), JmsSecurityException.class); } @Test void testMessageEOFException() throws Exception { - doTestJmsException(new javax.jms.MessageEOFException(""), MessageEOFException.class); + doTestJmsException(new jakarta.jms.MessageEOFException(""), MessageEOFException.class); } @Test void testMessageFormatException() throws Exception { - doTestJmsException(new javax.jms.MessageFormatException(""), MessageFormatException.class); + doTestJmsException(new jakarta.jms.MessageFormatException(""), MessageFormatException.class); } @Test void testMessageNotReadableException() throws Exception { - doTestJmsException(new javax.jms.MessageNotReadableException(""), MessageNotReadableException.class); + doTestJmsException(new jakarta.jms.MessageNotReadableException(""), MessageNotReadableException.class); } @Test void testMessageNotWriteableException() throws Exception { - doTestJmsException(new javax.jms.MessageNotWriteableException(""), MessageNotWriteableException.class); + doTestJmsException(new jakarta.jms.MessageNotWriteableException(""), MessageNotWriteableException.class); } @Test void testResourceAllocationException() throws Exception { - doTestJmsException(new javax.jms.ResourceAllocationException(""), ResourceAllocationException.class); + doTestJmsException(new jakarta.jms.ResourceAllocationException(""), ResourceAllocationException.class); } @Test void testTransactionInProgressException() throws Exception { - doTestJmsException(new javax.jms.TransactionInProgressException(""), TransactionInProgressException.class); + doTestJmsException(new jakarta.jms.TransactionInProgressException(""), TransactionInProgressException.class); } @Test void testTransactionRolledBackException() throws Exception { - doTestJmsException(new javax.jms.TransactionRolledBackException(""), TransactionRolledBackException.class); + doTestJmsException(new jakarta.jms.TransactionRolledBackException(""), TransactionRolledBackException.class); } @Test void testUncategorizedJmsException() throws Exception { - doTestJmsException(new javax.jms.JMSException(""), UncategorizedJmsException.class); + doTestJmsException(new jakarta.jms.JMSException(""), UncategorizedJmsException.class); } protected void doTestJmsException(JMSException original, Class thrownExceptionClass) throws Exception { diff --git a/spring-jms/src/test/java/org/springframework/jms/core/JmsTemplateTransactedTests.java b/spring-jms/src/test/java/org/springframework/jms/core/JmsTemplateTransactedTests.java index db51d87d132..e23fe83228f 100644 --- a/spring-jms/src/test/java/org/springframework/jms/core/JmsTemplateTransactedTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/core/JmsTemplateTransactedTests.java @@ -16,8 +16,7 @@ package org.springframework.jms.core; -import javax.jms.Session; - +import jakarta.jms.Session; import org.junit.jupiter.api.BeforeEach; import static org.mockito.BDDMockito.given; diff --git a/spring-jms/src/test/java/org/springframework/jms/core/support/JmsGatewaySupportTests.java b/spring-jms/src/test/java/org/springframework/jms/core/support/JmsGatewaySupportTests.java index b4b7d3ab445..ead313c5396 100644 --- a/spring-jms/src/test/java/org/springframework/jms/core/support/JmsGatewaySupportTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/core/support/JmsGatewaySupportTests.java @@ -18,8 +18,7 @@ package org.springframework.jms.core.support; import java.util.ArrayList; import java.util.List; -import javax.jms.ConnectionFactory; - +import jakarta.jms.ConnectionFactory; import org.junit.jupiter.api.Test; import org.springframework.jms.core.JmsTemplate; diff --git a/spring-jms/src/test/java/org/springframework/jms/listener/DefaultMessageListenerContainerTests.java b/spring-jms/src/test/java/org/springframework/jms/listener/DefaultMessageListenerContainerTests.java index 4a83e858a33..66d638143f0 100644 --- a/spring-jms/src/test/java/org/springframework/jms/listener/DefaultMessageListenerContainerTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/listener/DefaultMessageListenerContainerTests.java @@ -19,11 +19,10 @@ package org.springframework.jms.listener; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.Destination; -import javax.jms.JMSException; - +import jakarta.jms.Connection; +import jakarta.jms.ConnectionFactory; +import jakarta.jms.Destination; +import jakarta.jms.JMSException; import org.junit.jupiter.api.Test; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; diff --git a/spring-jms/src/test/java/org/springframework/jms/listener/MessageListenerContainerIntegrationTests.java b/spring-jms/src/test/java/org/springframework/jms/listener/MessageListenerContainerIntegrationTests.java deleted file mode 100644 index 306c88394f4..00000000000 --- a/spring-jms/src/test/java/org/springframework/jms/listener/MessageListenerContainerIntegrationTests.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright 2002-2021 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jms.listener; - -import java.util.HashSet; -import java.util.Set; -import java.util.concurrent.CopyOnWriteArraySet; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; - -import javax.jms.JMSException; -import javax.jms.Session; -import javax.jms.TextMessage; - -import org.apache.activemq.ActiveMQConnectionFactory; -import org.junit.jupiter.api.Test; - -import org.springframework.jms.core.JmsTemplate; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * @author Juergen Hoeller - * @since 5.3.5 - */ -public class MessageListenerContainerIntegrationTests { - - @Test - public void simpleMessageListenerContainer() throws InterruptedException { - SimpleMessageListenerContainer mlc = new SimpleMessageListenerContainer(); - - testMessageListenerContainer(mlc); - } - - @Test - public void defaultMessageListenerContainer() throws InterruptedException { - DefaultMessageListenerContainer mlc = new DefaultMessageListenerContainer(); - - testMessageListenerContainer(mlc); - } - - @Test - public void defaultMessageListenerContainerWithMaxMessagesPerTask() throws InterruptedException { - DefaultMessageListenerContainer mlc = new DefaultMessageListenerContainer(); - mlc.setConcurrentConsumers(1); - mlc.setMaxConcurrentConsumers(2); - mlc.setMaxMessagesPerTask(1); - - testMessageListenerContainer(mlc); - } - - @Test - public void defaultMessageListenerContainerWithIdleReceivesPerTaskLimit() throws InterruptedException { - DefaultMessageListenerContainer mlc = new DefaultMessageListenerContainer(); - mlc.setConcurrentConsumers(1); - mlc.setMaxConcurrentConsumers(2); - mlc.setIdleReceivesPerTaskLimit(1); - - testMessageListenerContainer(mlc); - } - - private void testMessageListenerContainer(AbstractMessageListenerContainer mlc) throws InterruptedException { - ActiveMQConnectionFactory aqcf = new ActiveMQConnectionFactory("vm://localhost?broker.persistent=false"); - TestMessageListener tml = new TestMessageListener(); - - mlc.setConnectionFactory(aqcf); - mlc.setMessageListener(tml); - mlc.setDestinationName("test"); - mlc.afterPropertiesSet(); - mlc.start(); - - JmsTemplate jt = new JmsTemplate(aqcf); - jt.setDefaultDestinationName("test"); - - Set messages = new HashSet<>(); - messages.add("text1"); - messages.add("text2"); - for (String message : messages) { - jt.convertAndSend(message); - } - assertThat(tml.result()).isEqualTo(messages); - - mlc.destroy(); - } - - - private static class TestMessageListener implements SessionAwareMessageListener { - - private final CountDownLatch latch = new CountDownLatch(2); - - private final Set messages = new CopyOnWriteArraySet<>(); - - @Override - public void onMessage(TextMessage message, Session session) throws JMSException { - this.messages.add(message.getText()); - this.latch.countDown(); - } - - public Set result() throws InterruptedException { - assertThat(this.latch.await(5, TimeUnit.SECONDS)).isTrue(); - return this.messages; - } - } - -} diff --git a/spring-jms/src/test/java/org/springframework/jms/listener/SimpleMessageListenerContainerTests.java b/spring-jms/src/test/java/org/springframework/jms/listener/SimpleMessageListenerContainerTests.java index 76bd754e2cc..7b001de2ab2 100644 --- a/spring-jms/src/test/java/org/springframework/jms/listener/SimpleMessageListenerContainerTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/listener/SimpleMessageListenerContainerTests.java @@ -19,15 +19,14 @@ package org.springframework.jms.listener; import java.util.HashSet; import java.util.Set; -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.ExceptionListener; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageConsumer; -import javax.jms.MessageListener; -import javax.jms.Session; - +import jakarta.jms.Connection; +import jakarta.jms.ConnectionFactory; +import jakarta.jms.ExceptionListener; +import jakarta.jms.JMSException; +import jakarta.jms.Message; +import jakarta.jms.MessageConsumer; +import jakarta.jms.MessageListener; +import jakarta.jms.Session; import org.junit.jupiter.api.Test; import org.springframework.context.support.GenericApplicationContext; diff --git a/spring-jms/src/test/java/org/springframework/jms/listener/adapter/JmsResponseTests.java b/spring-jms/src/test/java/org/springframework/jms/listener/adapter/JmsResponseTests.java index b373b061a9b..c32fc0dd14e 100644 --- a/spring-jms/src/test/java/org/springframework/jms/listener/adapter/JmsResponseTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/listener/adapter/JmsResponseTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,10 +16,9 @@ package org.springframework.jms.listener.adapter; -import javax.jms.Destination; -import javax.jms.JMSException; -import javax.jms.Session; - +import jakarta.jms.Destination; +import jakarta.jms.JMSException; +import jakarta.jms.Session; import org.junit.jupiter.api.Test; import org.springframework.jms.support.destination.DestinationResolver; @@ -54,7 +53,7 @@ public class JmsResponseTests { } @Test - public void createWithNulResponse() { + public void createWithNullResponse() { assertThatIllegalArgumentException().isThrownBy(() -> JmsResponse.forQueue(null, "myQueue")); } diff --git a/spring-jms/src/test/java/org/springframework/jms/listener/adapter/MessageDelegate.java b/spring-jms/src/test/java/org/springframework/jms/listener/adapter/MessageDelegate.java index 7138f269868..3c8f4de9cec 100644 --- a/spring-jms/src/test/java/org/springframework/jms/listener/adapter/MessageDelegate.java +++ b/spring-jms/src/test/java/org/springframework/jms/listener/adapter/MessageDelegate.java @@ -16,10 +16,10 @@ package org.springframework.jms.listener.adapter; -import javax.jms.BytesMessage; -import javax.jms.MapMessage; -import javax.jms.ObjectMessage; -import javax.jms.TextMessage; +import jakarta.jms.BytesMessage; +import jakarta.jms.MapMessage; +import jakarta.jms.ObjectMessage; +import jakarta.jms.TextMessage; /** * See the MessageListenerAdapterTests class for usage. diff --git a/spring-jms/src/test/java/org/springframework/jms/listener/adapter/MessageListenerAdapterTests.java b/spring-jms/src/test/java/org/springframework/jms/listener/adapter/MessageListenerAdapterTests.java index ceeab1c3b36..751ca9c27a2 100644 --- a/spring-jms/src/test/java/org/springframework/jms/listener/adapter/MessageListenerAdapterTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/listener/adapter/MessageListenerAdapterTests.java @@ -19,18 +19,17 @@ package org.springframework.jms.listener.adapter; import java.io.ByteArrayInputStream; import java.io.Serializable; -import javax.jms.BytesMessage; -import javax.jms.InvalidDestinationException; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageProducer; -import javax.jms.ObjectMessage; -import javax.jms.Queue; -import javax.jms.QueueSender; -import javax.jms.QueueSession; -import javax.jms.Session; -import javax.jms.TextMessage; - +import jakarta.jms.BytesMessage; +import jakarta.jms.InvalidDestinationException; +import jakarta.jms.JMSException; +import jakarta.jms.Message; +import jakarta.jms.MessageProducer; +import jakarta.jms.ObjectMessage; +import jakarta.jms.Queue; +import jakarta.jms.QueueSender; +import jakarta.jms.QueueSession; +import jakarta.jms.Session; +import jakarta.jms.TextMessage; import org.junit.jupiter.api.Test; import org.mockito.stubbing.Answer; diff --git a/spring-jms/src/test/java/org/springframework/jms/listener/adapter/MessagingMessageListenerAdapterTests.java b/spring-jms/src/test/java/org/springframework/jms/listener/adapter/MessagingMessageListenerAdapterTests.java index 4a984a256e3..03f44a70f30 100644 --- a/spring-jms/src/test/java/org/springframework/jms/listener/adapter/MessagingMessageListenerAdapterTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/listener/adapter/MessagingMessageListenerAdapterTests.java @@ -20,16 +20,15 @@ import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; -import javax.jms.DeliveryMode; -import javax.jms.Destination; -import javax.jms.JMSException; -import javax.jms.MessageProducer; -import javax.jms.Queue; -import javax.jms.Session; -import javax.jms.TextMessage; -import javax.jms.Topic; - import com.fasterxml.jackson.annotation.JsonView; +import jakarta.jms.DeliveryMode; +import jakarta.jms.Destination; +import jakarta.jms.JMSException; +import jakarta.jms.MessageProducer; +import jakarta.jms.Queue; +import jakarta.jms.Session; +import jakarta.jms.TextMessage; +import jakarta.jms.Topic; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -85,7 +84,7 @@ public class MessagingMessageListenerAdapterTests { Session session = mock(Session.class); given(session.createTextMessage("Response")).willReturn(new StubTextMessage("Response")); MessagingMessageListenerAdapter listener = getSimpleInstance("echo", Message.class); - javax.jms.Message replyMessage = listener.buildMessage(session, result); + jakarta.jms.Message replyMessage = listener.buildMessage(session, result); verify(session).createTextMessage("Response"); assertThat(replyMessage).as("reply should never be null").isNotNull(); @@ -97,7 +96,7 @@ public class MessagingMessageListenerAdapterTests { @Test public void exceptionInListener() { - javax.jms.Message message = new StubTextMessage("foo"); + jakarta.jms.Message message = new StubTextMessage("foo"); Session session = mock(Session.class); MessagingMessageListenerAdapter listener = getSimpleInstance("fail", String.class); assertThatExceptionOfType(ListenerExecutionFailedException.class) @@ -109,7 +108,7 @@ public class MessagingMessageListenerAdapterTests { @Test public void exceptionInInvocation() { - javax.jms.Message message = new StubTextMessage("foo"); + jakarta.jms.Message message = new StubTextMessage("foo"); Session session = mock(Session.class); MessagingMessageListenerAdapter listener = getSimpleInstance("wrongParam", Integer.class); @@ -120,7 +119,7 @@ public class MessagingMessageListenerAdapterTests { @Test public void payloadConversionLazilyInvoked() throws JMSException { - javax.jms.Message jmsMessage = mock(javax.jms.Message.class); + jakarta.jms.Message jmsMessage = mock(jakarta.jms.Message.class); MessageConverter messageConverter = mock(MessageConverter.class); given(messageConverter.fromMessage(jmsMessage)).willReturn("FooBar"); MessagingMessageListenerAdapter listener = getSimpleInstance("simple", Message.class); @@ -133,7 +132,7 @@ public class MessagingMessageListenerAdapterTests { @Test public void headerConversionLazilyInvoked() throws JMSException { - javax.jms.Message jmsMessage = mock(javax.jms.Message.class); + jakarta.jms.Message jmsMessage = mock(jakarta.jms.Message.class); given(jmsMessage.getPropertyNames()).willThrow(new IllegalArgumentException("Header failure")); MessagingMessageListenerAdapter listener = getSimpleInstance("simple", Message.class); Message message = listener.toMessagingMessage(jmsMessage); @@ -146,7 +145,7 @@ public class MessagingMessageListenerAdapterTests { @Test public void incomingMessageUsesMessageConverter() throws JMSException { - javax.jms.Message jmsMessage = mock(javax.jms.Message.class); + jakarta.jms.Message jmsMessage = mock(jakarta.jms.Message.class); Session session = mock(Session.class); MessageConverter messageConverter = mock(MessageConverter.class); given(messageConverter.fromMessage(jmsMessage)).willReturn("FooBar"); @@ -167,7 +166,7 @@ public class MessagingMessageListenerAdapterTests { Message result = MessageBuilder.withPayload("Response").build(); MessagingMessageListenerAdapter listener = getSimpleInstance("echo", Message.class); listener.setMessageConverter(messageConverter); - javax.jms.Message replyMessage = listener.buildMessage(session, result); + jakarta.jms.Message replyMessage = listener.buildMessage(session, result); verify(messageConverter, times(1)).toMessage("Response", session); assertThat(replyMessage).as("reply should never be null").isNotNull(); @@ -186,7 +185,7 @@ public class MessagingMessageListenerAdapterTests { given(session.createProducer(replyDestination)).willReturn(messageProducer); MessagingMessageListenerAdapter listener = getPayloadInstance("Response", "replyPayloadToQueue", Message.class); - listener.onMessage(mock(javax.jms.Message.class), session); + listener.onMessage(mock(jakarta.jms.Message.class), session); verify(session).createQueue("queueOut"); verify(session).createTextMessage("Response"); @@ -209,11 +208,11 @@ public class MessagingMessageListenerAdapterTests { QosSettings settings = new QosSettings(); settings.setTimeToLive(6000); listener.setResponseQosSettings(settings); - listener.onMessage(mock(javax.jms.Message.class), session); + listener.onMessage(mock(jakarta.jms.Message.class), session); verify(session).createQueue("queueOut"); verify(session).createTextMessage("Response"); - verify(messageProducer).send(responseMessage, javax.jms.Message.DEFAULT_DELIVERY_MODE, - javax.jms.Message.DEFAULT_PRIORITY, 6000); + verify(messageProducer).send(responseMessage, jakarta.jms.Message.DEFAULT_DELIVERY_MODE, + jakarta.jms.Message.DEFAULT_PRIORITY, 6000); verify(messageProducer).close(); } @@ -231,7 +230,7 @@ public class MessagingMessageListenerAdapterTests { MessagingMessageListenerAdapter listener = getPayloadInstance("Response", "replyPayloadToQueue", Message.class); QosSettings settings = new QosSettings(DeliveryMode.NON_PERSISTENT, 6, 6000); listener.setResponseQosSettings(settings); - listener.onMessage(mock(javax.jms.Message.class), session); + listener.onMessage(mock(jakarta.jms.Message.class), session); verify(session).createQueue("queueOut"); verify(session).createTextMessage("Response"); verify(messageProducer).send(responseMessage, DeliveryMode.NON_PERSISTENT, 6, 6000); @@ -250,7 +249,7 @@ public class MessagingMessageListenerAdapterTests { given(session.createProducer(replyDestination)).willReturn(messageProducer); MessagingMessageListenerAdapter listener = getPayloadInstance("Response", "replyPayloadToTopic", Message.class); - listener.onMessage(mock(javax.jms.Message.class), session); + listener.onMessage(mock(jakarta.jms.Message.class), session); verify(session).createTopic("topicOut"); verify(session).createTextMessage("Response"); @@ -267,7 +266,7 @@ public class MessagingMessageListenerAdapterTests { given(session.createProducer(sharedReplyDestination)).willReturn(messageProducer); MessagingMessageListenerAdapter listener = getPayloadInstance("Response", "replyPayloadToDestination", Message.class); - listener.onMessage(mock(javax.jms.Message.class), session); + listener.onMessage(mock(jakarta.jms.Message.class), session); verify(session, times(0)).createQueue(anyString()); verify(session).createTextMessage("Response"); @@ -288,7 +287,7 @@ public class MessagingMessageListenerAdapterTests { MessagingMessageListenerAdapter listener = getPayloadInstance("Response", "replyPayloadNoDestination", Message.class); listener.setDefaultResponseDestination(replyDestination); - listener.onMessage(mock(javax.jms.Message.class), session); + listener.onMessage(mock(jakarta.jms.Message.class), session); verify(session, times(0)).createQueue(anyString()); verify(session).createTextMessage("Response"); @@ -331,7 +330,7 @@ public class MessagingMessageListenerAdapterTests { messageConverter.setTargetType(MessageType.TEXT); listener.setMessageConverter(messageConverter); listener.setDefaultResponseDestination(replyDestination); - listener.onMessage(mock(javax.jms.Message.class), session); + listener.onMessage(mock(jakarta.jms.Message.class), session); verify(session, times(0)).createQueue(anyString()); verify(session).createTextMessage(replyContent); @@ -358,7 +357,7 @@ public class MessagingMessageListenerAdapterTests { Method method = ReflectionUtils.findMethod(SampleBean.class, methodName, parameterTypes); MessagingMessageListenerAdapter adapter = new MessagingMessageListenerAdapter() { @Override - protected Object extractMessage(javax.jms.Message message) { + protected Object extractMessage(jakarta.jms.Message message) { return payload; } }; diff --git a/spring-jms/src/test/java/org/springframework/jms/listener/adapter/ResponsiveJmsTextMessageReturningMessageDelegate.java b/spring-jms/src/test/java/org/springframework/jms/listener/adapter/ResponsiveJmsTextMessageReturningMessageDelegate.java index 1ad04534840..0fcecaed3d9 100644 --- a/spring-jms/src/test/java/org/springframework/jms/listener/adapter/ResponsiveJmsTextMessageReturningMessageDelegate.java +++ b/spring-jms/src/test/java/org/springframework/jms/listener/adapter/ResponsiveJmsTextMessageReturningMessageDelegate.java @@ -16,7 +16,7 @@ package org.springframework.jms.listener.adapter; -import javax.jms.TextMessage; +import jakarta.jms.TextMessage; /** * See the MessageListenerAdapterTests class for usage. diff --git a/spring-jms/src/test/java/org/springframework/jms/listener/adapter/ResponsiveMessageDelegate.java b/spring-jms/src/test/java/org/springframework/jms/listener/adapter/ResponsiveMessageDelegate.java index c162dc09814..fe4b6970c93 100644 --- a/spring-jms/src/test/java/org/springframework/jms/listener/adapter/ResponsiveMessageDelegate.java +++ b/spring-jms/src/test/java/org/springframework/jms/listener/adapter/ResponsiveMessageDelegate.java @@ -19,10 +19,10 @@ package org.springframework.jms.listener.adapter; import java.io.Serializable; import java.util.Map; -import javax.jms.BytesMessage; -import javax.jms.MapMessage; -import javax.jms.ObjectMessage; -import javax.jms.TextMessage; +import jakarta.jms.BytesMessage; +import jakarta.jms.MapMessage; +import jakarta.jms.ObjectMessage; +import jakarta.jms.TextMessage; /** * See the MessageListenerAdapterTests class for usage. diff --git a/spring-jms/src/test/java/org/springframework/jms/listener/endpoint/DefaultJmsActivationSpecFactoryTests.java b/spring-jms/src/test/java/org/springframework/jms/listener/endpoint/DefaultJmsActivationSpecFactoryTests.java index 32e9400b7c1..0540c97ea30 100644 --- a/spring-jms/src/test/java/org/springframework/jms/listener/endpoint/DefaultJmsActivationSpecFactoryTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/listener/endpoint/DefaultJmsActivationSpecFactoryTests.java @@ -16,9 +16,8 @@ package org.springframework.jms.listener.endpoint; -import javax.jms.Destination; -import javax.jms.Session; - +import jakarta.jms.Destination; +import jakarta.jms.Session; import org.junit.jupiter.api.Test; import org.springframework.jca.StubResourceAdapter; diff --git a/spring-jms/src/test/java/org/springframework/jms/listener/endpoint/StubJmsActivationSpec.java b/spring-jms/src/test/java/org/springframework/jms/listener/endpoint/StubJmsActivationSpec.java index c9d16c4e04b..b648e7f8daa 100644 --- a/spring-jms/src/test/java/org/springframework/jms/listener/endpoint/StubJmsActivationSpec.java +++ b/spring-jms/src/test/java/org/springframework/jms/listener/endpoint/StubJmsActivationSpec.java @@ -16,7 +16,7 @@ package org.springframework.jms.listener.endpoint; -import javax.jms.Destination; +import jakarta.jms.Destination; import org.springframework.jca.StubActivationSpec; diff --git a/spring-jms/src/test/java/org/springframework/jms/listener/endpoint/StubJmsActivationSpecFactory.java b/spring-jms/src/test/java/org/springframework/jms/listener/endpoint/StubJmsActivationSpecFactory.java index 17e4aafd554..735070cc5db 100644 --- a/spring-jms/src/test/java/org/springframework/jms/listener/endpoint/StubJmsActivationSpecFactory.java +++ b/spring-jms/src/test/java/org/springframework/jms/listener/endpoint/StubJmsActivationSpecFactory.java @@ -16,8 +16,8 @@ package org.springframework.jms.listener.endpoint; -import javax.resource.spi.ActivationSpec; -import javax.resource.spi.ResourceAdapter; +import jakarta.resource.spi.ActivationSpec; +import jakarta.resource.spi.ResourceAdapter; import org.springframework.jca.StubActivationSpec; diff --git a/spring-jms/src/test/java/org/springframework/jms/support/JmsAccessorTests.java b/spring-jms/src/test/java/org/springframework/jms/support/JmsAccessorTests.java index bb1710043e5..1e2f4b66763 100644 --- a/spring-jms/src/test/java/org/springframework/jms/support/JmsAccessorTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/support/JmsAccessorTests.java @@ -16,8 +16,7 @@ package org.springframework.jms.support; -import javax.jms.Session; - +import jakarta.jms.Session; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; diff --git a/spring-jms/src/test/java/org/springframework/jms/support/JmsMessageHeaderAccessorTests.java b/spring-jms/src/test/java/org/springframework/jms/support/JmsMessageHeaderAccessorTests.java index 2255f34ea5d..939cb6aa29b 100644 --- a/spring-jms/src/test/java/org/springframework/jms/support/JmsMessageHeaderAccessorTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/support/JmsMessageHeaderAccessorTests.java @@ -18,9 +18,8 @@ package org.springframework.jms.support; import java.util.Map; -import javax.jms.Destination; -import javax.jms.JMSException; - +import jakarta.jms.Destination; +import jakarta.jms.JMSException; import org.junit.jupiter.api.Test; import org.springframework.jms.StubTextMessage; diff --git a/spring-jms/src/test/java/org/springframework/jms/support/SimpleJmsHeaderMapperTests.java b/spring-jms/src/test/java/org/springframework/jms/support/SimpleJmsHeaderMapperTests.java index 8839696b4d3..331fdaa0a56 100644 --- a/spring-jms/src/test/java/org/springframework/jms/support/SimpleJmsHeaderMapperTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/support/SimpleJmsHeaderMapperTests.java @@ -19,10 +19,9 @@ package org.springframework.jms.support; import java.util.Date; import java.util.Map; -import javax.jms.DeliveryMode; -import javax.jms.Destination; -import javax.jms.JMSException; - +import jakarta.jms.DeliveryMode; +import jakarta.jms.Destination; +import jakarta.jms.JMSException; import org.junit.jupiter.api.Test; import org.springframework.jms.StubTextMessage; @@ -51,7 +50,7 @@ public class SimpleJmsHeaderMapperTests { Message message = initBuilder() .setHeader(JmsHeaders.REPLY_TO, replyTo).build(); - javax.jms.Message jmsMessage = new StubTextMessage(); + jakarta.jms.Message jmsMessage = new StubTextMessage(); mapper.fromHeaders(message.getHeaders(), jmsMessage); assertThat(jmsMessage.getJMSReplyTo()).isNotNull(); assertThat(jmsMessage.getJMSReplyTo()).isSameAs(replyTo); @@ -61,7 +60,7 @@ public class SimpleJmsHeaderMapperTests { public void JmsReplyToIgnoredIfIncorrectType() throws JMSException { Message message = initBuilder() .setHeader(JmsHeaders.REPLY_TO, "not-a-destination").build(); - javax.jms.Message jmsMessage = new StubTextMessage(); + jakarta.jms.Message jmsMessage = new StubTextMessage(); mapper.fromHeaders(message.getHeaders(), jmsMessage); assertThat(jmsMessage.getJMSReplyTo()).isNull(); } @@ -71,7 +70,7 @@ public class SimpleJmsHeaderMapperTests { String jmsCorrelationId = "ABC-123"; Message message = initBuilder() .setHeader(JmsHeaders.CORRELATION_ID, jmsCorrelationId).build(); - javax.jms.Message jmsMessage = new StubTextMessage(); + jakarta.jms.Message jmsMessage = new StubTextMessage(); mapper.fromHeaders(message.getHeaders(), jmsMessage); assertThat(jmsMessage.getJMSCorrelationID()).isNotNull(); assertThat(jmsMessage.getJMSCorrelationID()).isEqualTo(jmsCorrelationId); @@ -81,7 +80,7 @@ public class SimpleJmsHeaderMapperTests { public void jmsCorrelationIdNumberConvertsToString() throws JMSException { Message message = initBuilder() .setHeader(JmsHeaders.CORRELATION_ID, 123).build(); - javax.jms.Message jmsMessage = new StubTextMessage(); + jakarta.jms.Message jmsMessage = new StubTextMessage(); mapper.fromHeaders(message.getHeaders(), jmsMessage); assertThat(jmsMessage.getJMSCorrelationID()).isEqualTo("123"); } @@ -90,7 +89,7 @@ public class SimpleJmsHeaderMapperTests { public void jmsCorrelationIdIgnoredIfIncorrectType() throws JMSException { Message message = initBuilder() .setHeader(JmsHeaders.CORRELATION_ID, new Date()).build(); - javax.jms.Message jmsMessage = new StubTextMessage(); + jakarta.jms.Message jmsMessage = new StubTextMessage(); mapper.fromHeaders(message.getHeaders(), jmsMessage); assertThat(jmsMessage.getJMSCorrelationID()).isNull(); } @@ -100,7 +99,7 @@ public class SimpleJmsHeaderMapperTests { String jmsType = "testing"; Message message = initBuilder() .setHeader(JmsHeaders.TYPE, jmsType).build(); - javax.jms.Message jmsMessage = new StubTextMessage(); + jakarta.jms.Message jmsMessage = new StubTextMessage(); mapper.fromHeaders(message.getHeaders(), jmsMessage); assertThat(jmsMessage.getJMSType()).isNotNull(); assertThat(jmsMessage.getJMSType()).isEqualTo(jmsType); @@ -110,7 +109,7 @@ public class SimpleJmsHeaderMapperTests { public void jmsTypeIgnoredIfIncorrectType() throws JMSException { Message message = initBuilder() .setHeader(JmsHeaders.TYPE, 123).build(); - javax.jms.Message jmsMessage = new StubTextMessage(); + jakarta.jms.Message jmsMessage = new StubTextMessage(); mapper.fromHeaders(message.getHeaders(), jmsMessage); assertThat(jmsMessage.getJMSType()).isNull(); } @@ -126,13 +125,13 @@ public class SimpleJmsHeaderMapperTests { .setHeader(JmsHeaders.REDELIVERED, true) .setHeader(JmsHeaders.TIMESTAMP, System.currentTimeMillis()) .build(); - javax.jms.Message jmsMessage = new StubTextMessage(); + jakarta.jms.Message jmsMessage = new StubTextMessage(); mapper.fromHeaders(message.getHeaders(), jmsMessage); assertThat(jmsMessage.getJMSDestination()).isNull(); assertThat(jmsMessage.getJMSDeliveryMode()).isEqualTo(DeliveryMode.PERSISTENT); assertThat(jmsMessage.getJMSExpiration()).isEqualTo(0); assertThat(jmsMessage.getJMSMessageID()).isNull(); - assertThat(jmsMessage.getJMSPriority()).isEqualTo(javax.jms.Message.DEFAULT_PRIORITY); + assertThat(jmsMessage.getJMSPriority()).isEqualTo(jakarta.jms.Message.DEFAULT_PRIORITY); assertThat(jmsMessage.getJMSRedelivered()).isFalse(); assertThat(jmsMessage.getJMSTimestamp()).isEqualTo(0); } @@ -142,7 +141,7 @@ public class SimpleJmsHeaderMapperTests { Message message = initBuilder() .setHeader(MessageHeaders.CONTENT_TYPE, "foo") .build(); - javax.jms.Message jmsMessage = new StubTextMessage(); + jakarta.jms.Message jmsMessage = new StubTextMessage(); mapper.fromHeaders(message.getHeaders(), jmsMessage); Object value = jmsMessage.getObjectProperty(JmsHeaderMapper.CONTENT_TYPE_PROPERTY); assertThat(value).isNotNull(); @@ -154,7 +153,7 @@ public class SimpleJmsHeaderMapperTests { Message message = initBuilder() .setHeader("foo", 123) .build(); - javax.jms.Message jmsMessage = new StubTextMessage(); + jakarta.jms.Message jmsMessage = new StubTextMessage(); mapper.fromHeaders(message.getHeaders(), jmsMessage); Object value = jmsMessage.getObjectProperty("foo"); assertThat(value).isNotNull(); @@ -168,7 +167,7 @@ public class SimpleJmsHeaderMapperTests { .setHeader("foo", 123) .build(); mapper.setOutboundPrefix("custom_"); - javax.jms.Message jmsMessage = new StubTextMessage(); + jakarta.jms.Message jmsMessage = new StubTextMessage(); mapper.fromHeaders(message.getHeaders(), jmsMessage); Object value = jmsMessage.getObjectProperty("custom_foo"); assertThat(value).isNotNull(); @@ -182,7 +181,7 @@ public class SimpleJmsHeaderMapperTests { Message message = initBuilder() .setHeader("destination", destination) .build(); - javax.jms.Message jmsMessage = new StubTextMessage(); + jakarta.jms.Message jmsMessage = new StubTextMessage(); mapper.fromHeaders(message.getHeaders(), jmsMessage); Object value = jmsMessage.getObjectProperty("destination"); assertThat(value).isNull(); @@ -190,7 +189,7 @@ public class SimpleJmsHeaderMapperTests { @Test public void attemptToReadDisallowedCorrelationIdPropertyIsNotFatal() throws JMSException { - javax.jms.Message jmsMessage = new StubTextMessage() { + jakarta.jms.Message jmsMessage = new StubTextMessage() { @Override public String getJMSCorrelationID() throws JMSException { throw new JMSException("illegal property"); @@ -201,7 +200,7 @@ public class SimpleJmsHeaderMapperTests { @Test public void attemptToReadDisallowedDestinationPropertyIsNotFatal() throws JMSException { - javax.jms.Message jmsMessage = new StubTextMessage() { + jakarta.jms.Message jmsMessage = new StubTextMessage() { @Override public Destination getJMSDestination() throws JMSException { throw new JMSException("illegal property"); @@ -212,7 +211,7 @@ public class SimpleJmsHeaderMapperTests { @Test public void attemptToReadDisallowedDeliveryModePropertyIsNotFatal() throws JMSException { - javax.jms.Message jmsMessage = new StubTextMessage() { + jakarta.jms.Message jmsMessage = new StubTextMessage() { @Override public int getJMSDeliveryMode() throws JMSException { throw new JMSException("illegal property"); @@ -223,7 +222,7 @@ public class SimpleJmsHeaderMapperTests { @Test public void attemptToReadDisallowedExpirationPropertyIsNotFatal() throws JMSException { - javax.jms.Message jmsMessage = new StubTextMessage() { + jakarta.jms.Message jmsMessage = new StubTextMessage() { @Override public long getJMSExpiration() throws JMSException { throw new JMSException("illegal property"); @@ -234,7 +233,7 @@ public class SimpleJmsHeaderMapperTests { @Test public void attemptToReadDisallowedMessageIdPropertyIsNotFatal() throws JMSException { - javax.jms.Message jmsMessage = new StubTextMessage() { + jakarta.jms.Message jmsMessage = new StubTextMessage() { @Override public String getJMSMessageID() throws JMSException { throw new JMSException("illegal property"); @@ -245,7 +244,7 @@ public class SimpleJmsHeaderMapperTests { @Test public void attemptToReadDisallowedPriorityPropertyIsNotFatal() throws JMSException { - javax.jms.Message jmsMessage = new StubTextMessage() { + jakarta.jms.Message jmsMessage = new StubTextMessage() { @Override public int getJMSPriority() throws JMSException { throw new JMSException("illegal property"); @@ -256,7 +255,7 @@ public class SimpleJmsHeaderMapperTests { @Test public void attemptToReadDisallowedReplyToPropertyIsNotFatal() throws JMSException { - javax.jms.Message jmsMessage = new StubTextMessage() { + jakarta.jms.Message jmsMessage = new StubTextMessage() { @Override public Destination getJMSReplyTo() throws JMSException { throw new JMSException("illegal property"); @@ -267,7 +266,7 @@ public class SimpleJmsHeaderMapperTests { @Test public void attemptToReadDisallowedRedeliveredPropertyIsNotFatal() throws JMSException { - javax.jms.Message jmsMessage = new StubTextMessage() { + jakarta.jms.Message jmsMessage = new StubTextMessage() { @Override public boolean getJMSRedelivered() throws JMSException { throw new JMSException("illegal property"); @@ -278,7 +277,7 @@ public class SimpleJmsHeaderMapperTests { @Test public void attemptToReadDisallowedTypePropertyIsNotFatal() throws JMSException { - javax.jms.Message jmsMessage = new StubTextMessage() { + jakarta.jms.Message jmsMessage = new StubTextMessage() { @Override public String getJMSType() throws JMSException { throw new JMSException("illegal property"); @@ -289,7 +288,7 @@ public class SimpleJmsHeaderMapperTests { @Test public void attemptToReadDisallowedTimestampPropertyIsNotFatal() throws JMSException { - javax.jms.Message jmsMessage = new StubTextMessage() { + jakarta.jms.Message jmsMessage = new StubTextMessage() { @Override public long getJMSTimestamp() throws JMSException { throw new JMSException("illegal property"); @@ -300,7 +299,7 @@ public class SimpleJmsHeaderMapperTests { @Test public void attemptToReadDisallowedUserPropertyIsNotFatal() throws JMSException { - javax.jms.Message jmsMessage = new StubTextMessage() { + jakarta.jms.Message jmsMessage = new StubTextMessage() { @Override public Object getObjectProperty(String name) throws JMSException { if (name.equals("fail")) { @@ -321,7 +320,7 @@ public class SimpleJmsHeaderMapperTests { @Test public void jmsCorrelationIdMappedToHeader() throws JMSException { String correlationId = "ABC-123"; - javax.jms.Message jmsMessage = new StubTextMessage(); + jakarta.jms.Message jmsMessage = new StubTextMessage(); jmsMessage.setJMSCorrelationID(correlationId); assertInboundHeader(jmsMessage, JmsHeaders.CORRELATION_ID, correlationId); } @@ -329,7 +328,7 @@ public class SimpleJmsHeaderMapperTests { @Test public void destinationMappedToHeader() throws JMSException { Destination destination = new Destination() {}; - javax.jms.Message jmsMessage = new StubTextMessage(); + jakarta.jms.Message jmsMessage = new StubTextMessage(); jmsMessage.setJMSDestination(destination); assertInboundHeader(jmsMessage, JmsHeaders.DESTINATION, destination); } @@ -337,7 +336,7 @@ public class SimpleJmsHeaderMapperTests { @Test public void jmsDeliveryModeMappedToHeader() throws JMSException { int deliveryMode = 1; - javax.jms.Message jmsMessage = new StubTextMessage(); + jakarta.jms.Message jmsMessage = new StubTextMessage(); jmsMessage.setJMSDeliveryMode(deliveryMode); assertInboundHeader(jmsMessage, JmsHeaders.DELIVERY_MODE, deliveryMode); } @@ -345,7 +344,7 @@ public class SimpleJmsHeaderMapperTests { @Test public void jmsExpirationMappedToHeader() throws JMSException { long expiration = 1000L; - javax.jms.Message jmsMessage = new StubTextMessage(); + jakarta.jms.Message jmsMessage = new StubTextMessage(); jmsMessage.setJMSExpiration(expiration); assertInboundHeader(jmsMessage, JmsHeaders.EXPIRATION, expiration); } @@ -353,7 +352,7 @@ public class SimpleJmsHeaderMapperTests { @Test public void jmsMessageIdMappedToHeader() throws JMSException { String messageId = "ID:ABC-123"; - javax.jms.Message jmsMessage = new StubTextMessage(); + jakarta.jms.Message jmsMessage = new StubTextMessage(); jmsMessage.setJMSMessageID(messageId); assertInboundHeader(jmsMessage, JmsHeaders.MESSAGE_ID, messageId); } @@ -361,7 +360,7 @@ public class SimpleJmsHeaderMapperTests { @Test public void jmsPriorityMappedToHeader() throws JMSException { int priority = 8; - javax.jms.Message jmsMessage = new StubTextMessage(); + jakarta.jms.Message jmsMessage = new StubTextMessage(); jmsMessage.setJMSPriority(priority); assertInboundHeader(jmsMessage, JmsHeaders.PRIORITY, priority); } @@ -369,7 +368,7 @@ public class SimpleJmsHeaderMapperTests { @Test public void jmsReplyToMappedToHeader() throws JMSException { Destination replyTo = new Destination() {}; - javax.jms.Message jmsMessage = new StubTextMessage(); + jakarta.jms.Message jmsMessage = new StubTextMessage(); jmsMessage.setJMSReplyTo(replyTo); assertInboundHeader(jmsMessage, JmsHeaders.REPLY_TO, replyTo); } @@ -377,7 +376,7 @@ public class SimpleJmsHeaderMapperTests { @Test public void jmsTypeMappedToHeader() throws JMSException { String type = "testing"; - javax.jms.Message jmsMessage = new StubTextMessage(); + jakarta.jms.Message jmsMessage = new StubTextMessage(); jmsMessage.setJMSType(type); assertInboundHeader(jmsMessage, JmsHeaders.TYPE, type); } @@ -385,28 +384,28 @@ public class SimpleJmsHeaderMapperTests { @Test public void jmsTimestampMappedToHeader() throws JMSException { long timestamp = 123L; - javax.jms.Message jmsMessage = new StubTextMessage(); + jakarta.jms.Message jmsMessage = new StubTextMessage(); jmsMessage.setJMSTimestamp(timestamp); assertInboundHeader(jmsMessage, JmsHeaders.TIMESTAMP, timestamp); } @Test public void contentTypePropertyMappedToHeader() throws JMSException { - javax.jms.Message jmsMessage = new StubTextMessage(); + jakarta.jms.Message jmsMessage = new StubTextMessage(); jmsMessage.setStringProperty("content_type", "foo"); assertInboundHeader(jmsMessage, MessageHeaders.CONTENT_TYPE, "foo"); } @Test public void userDefinedPropertyMappedToHeader() throws JMSException { - javax.jms.Message jmsMessage = new StubTextMessage(); + jakarta.jms.Message jmsMessage = new StubTextMessage(); jmsMessage.setIntProperty("foo", 123); assertInboundHeader(jmsMessage, "foo", 123); } @Test public void userDefinedPropertyMappedToHeaderWithCustomPrefix() throws JMSException { - javax.jms.Message jmsMessage = new StubTextMessage(); + jakarta.jms.Message jmsMessage = new StubTextMessage(); jmsMessage.setIntProperty("foo", 123); mapper.setInboundPrefix("custom_"); assertInboundHeader(jmsMessage, "custom_foo", 123); @@ -419,7 +418,7 @@ public class SimpleJmsHeaderMapperTests { .setHeader("bad", 456) .setHeader("bar", 789) .build(); - javax.jms.Message jmsMessage = new StubTextMessage() { + jakarta.jms.Message jmsMessage = new StubTextMessage() { @Override public void setObjectProperty(String name, Object value) throws JMSException { if (name.equals("bad")) { @@ -444,7 +443,7 @@ public class SimpleJmsHeaderMapperTests { .setHeader("bad", 456) .setHeader("bar", 789) .build(); - javax.jms.Message jmsMessage = new StubTextMessage() { + jakarta.jms.Message jmsMessage = new StubTextMessage() { @Override public void setObjectProperty(String name, Object value) throws JMSException { if (name.equals("bad")) { @@ -468,7 +467,7 @@ public class SimpleJmsHeaderMapperTests { .setHeader(JmsHeaders.REPLY_TO, new Destination() {}) .setHeader("foo", "bar") .build(); - javax.jms.Message jmsMessage = new StubTextMessage() { + jakarta.jms.Message jmsMessage = new StubTextMessage() { @Override public void setJMSReplyTo(Destination replyTo) throws JMSException { throw new JMSException("illegal property"); @@ -486,7 +485,7 @@ public class SimpleJmsHeaderMapperTests { .setHeader(JmsHeaders.TYPE, "someType") .setHeader("foo", "bar") .build(); - javax.jms.Message jmsMessage = new StubTextMessage() { + jakarta.jms.Message jmsMessage = new StubTextMessage() { @Override public void setJMSType(String type) throws JMSException { throw new JMSException("illegal property"); @@ -504,7 +503,7 @@ public class SimpleJmsHeaderMapperTests { .setHeader(JmsHeaders.CORRELATION_ID, "abc") .setHeader("foo", "bar") .build(); - javax.jms.Message jmsMessage = new StubTextMessage() { + jakarta.jms.Message jmsMessage = new StubTextMessage() { @Override public void setJMSCorrelationID(String correlationId) throws JMSException { throw new JMSException("illegal property"); @@ -522,7 +521,7 @@ public class SimpleJmsHeaderMapperTests { .setHeader(JmsHeaders.CORRELATION_ID, 123) .setHeader("foo", "bar") .build(); - javax.jms.Message jmsMessage = new StubTextMessage() { + jakarta.jms.Message jmsMessage = new StubTextMessage() { @Override public void setJMSCorrelationID(String correlationId) throws JMSException { throw new JMSException("illegal property"); @@ -535,7 +534,7 @@ public class SimpleJmsHeaderMapperTests { } - private void assertInboundHeader(javax.jms.Message jmsMessage, String headerId, Object value) { + private void assertInboundHeader(jakarta.jms.Message jmsMessage, String headerId, Object value) { Map headers = mapper.toHeaders(jmsMessage); Object headerValue = headers.get(headerId); if (value == null) { @@ -548,7 +547,7 @@ public class SimpleJmsHeaderMapperTests { } } - private void assertAttemptReadDisallowedPropertyIsNotFatal(javax.jms.Message jmsMessage, String headerId) + private void assertAttemptReadDisallowedPropertyIsNotFatal(jakarta.jms.Message jmsMessage, String headerId) throws JMSException { jmsMessage.setStringProperty("foo", "bar"); Map headers = mapper.toHeaders(jmsMessage); diff --git a/spring-jms/src/test/java/org/springframework/jms/support/SimpleMessageConverterTests.java b/spring-jms/src/test/java/org/springframework/jms/support/SimpleMessageConverterTests.java index 41aed17f47a..bcbb41a64a3 100644 --- a/spring-jms/src/test/java/org/springframework/jms/support/SimpleMessageConverterTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/support/SimpleMessageConverterTests.java @@ -21,14 +21,13 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; -import javax.jms.BytesMessage; -import javax.jms.JMSException; -import javax.jms.MapMessage; -import javax.jms.Message; -import javax.jms.ObjectMessage; -import javax.jms.Session; -import javax.jms.TextMessage; - +import jakarta.jms.BytesMessage; +import jakarta.jms.JMSException; +import jakarta.jms.MapMessage; +import jakarta.jms.Message; +import jakarta.jms.ObjectMessage; +import jakarta.jms.Session; +import jakarta.jms.TextMessage; import org.junit.jupiter.api.Test; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; diff --git a/spring-jms/src/test/java/org/springframework/jms/support/converter/MappingJackson2MessageConverterTests.java b/spring-jms/src/test/java/org/springframework/jms/support/converter/MappingJackson2MessageConverterTests.java index 4f428c27093..42eb86a6871 100644 --- a/spring-jms/src/test/java/org/springframework/jms/support/converter/MappingJackson2MessageConverterTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/support/converter/MappingJackson2MessageConverterTests.java @@ -23,12 +23,11 @@ import java.util.Date; import java.util.HashMap; import java.util.Map; -import javax.jms.BytesMessage; -import javax.jms.JMSException; -import javax.jms.Session; -import javax.jms.TextMessage; - import com.fasterxml.jackson.annotation.JsonView; +import jakarta.jms.BytesMessage; +import jakarta.jms.JMSException; +import jakarta.jms.Session; +import jakarta.jms.TextMessage; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.stubbing.Answer; diff --git a/spring-jms/src/test/java/org/springframework/jms/support/converter/MarshallingMessageConverterTests.java b/spring-jms/src/test/java/org/springframework/jms/support/converter/MarshallingMessageConverterTests.java index b0c23cd0bff..a0c37d17450 100644 --- a/spring-jms/src/test/java/org/springframework/jms/support/converter/MarshallingMessageConverterTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/support/converter/MarshallingMessageConverterTests.java @@ -16,12 +16,12 @@ package org.springframework.jms.support.converter; -import javax.jms.BytesMessage; -import javax.jms.Session; -import javax.jms.TextMessage; import javax.xml.transform.Result; import javax.xml.transform.Source; +import jakarta.jms.BytesMessage; +import jakarta.jms.Session; +import jakarta.jms.TextMessage; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-jms/src/test/java/org/springframework/jms/support/converter/MessagingMessageConverterTests.java b/spring-jms/src/test/java/org/springframework/jms/support/converter/MessagingMessageConverterTests.java index d1c28956e5e..e5e5a26bb47 100644 --- a/spring-jms/src/test/java/org/springframework/jms/support/converter/MessagingMessageConverterTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/support/converter/MessagingMessageConverterTests.java @@ -18,11 +18,10 @@ package org.springframework.jms.support.converter; import java.io.Serializable; -import javax.jms.JMSException; -import javax.jms.ObjectMessage; -import javax.jms.Session; -import javax.jms.TextMessage; - +import jakarta.jms.JMSException; +import jakarta.jms.ObjectMessage; +import jakarta.jms.Session; +import jakarta.jms.TextMessage; import org.junit.jupiter.api.Test; import org.springframework.jms.StubTextMessage; @@ -75,7 +74,7 @@ public class MessagingMessageConverterTests { private boolean called; @Override - public Object fromMessage(javax.jms.Message message) throws JMSException, MessageConversionException { + public Object fromMessage(jakarta.jms.Message message) throws JMSException, MessageConversionException { if (this.called) { throw new java.lang.IllegalStateException("Converter called twice"); } diff --git a/spring-jms/src/test/java/org/springframework/jms/support/destination/DynamicDestinationResolverTests.java b/spring-jms/src/test/java/org/springframework/jms/support/destination/DynamicDestinationResolverTests.java index 0a11c2e186b..841cb96bd52 100644 --- a/spring-jms/src/test/java/org/springframework/jms/support/destination/DynamicDestinationResolverTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/support/destination/DynamicDestinationResolverTests.java @@ -16,14 +16,13 @@ package org.springframework.jms.support.destination; -import javax.jms.Destination; -import javax.jms.JMSException; -import javax.jms.Queue; -import javax.jms.QueueSession; -import javax.jms.Session; -import javax.jms.Topic; -import javax.jms.TopicSession; - +import jakarta.jms.Destination; +import jakarta.jms.JMSException; +import jakarta.jms.Queue; +import jakarta.jms.QueueSession; +import jakarta.jms.Session; +import jakarta.jms.Topic; +import jakarta.jms.TopicSession; import org.junit.jupiter.api.Test; import org.springframework.jms.StubQueue; diff --git a/spring-jms/src/test/java/org/springframework/jms/support/destination/JmsDestinationAccessorTests.java b/spring-jms/src/test/java/org/springframework/jms/support/destination/JmsDestinationAccessorTests.java index 24e1777ca42..3e02eabc4ee 100644 --- a/spring-jms/src/test/java/org/springframework/jms/support/destination/JmsDestinationAccessorTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/support/destination/JmsDestinationAccessorTests.java @@ -16,8 +16,7 @@ package org.springframework.jms.support.destination; -import javax.jms.ConnectionFactory; - +import jakarta.jms.ConnectionFactory; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; diff --git a/spring-jms/src/test/java/org/springframework/jms/support/destination/JndiDestinationResolverTests.java b/spring-jms/src/test/java/org/springframework/jms/support/destination/JndiDestinationResolverTests.java index 29003335868..895373eab59 100644 --- a/spring-jms/src/test/java/org/springframework/jms/support/destination/JndiDestinationResolverTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/support/destination/JndiDestinationResolverTests.java @@ -16,10 +16,10 @@ package org.springframework.jms.support.destination; -import javax.jms.Destination; -import javax.jms.Session; import javax.naming.NamingException; +import jakarta.jms.Destination; +import jakarta.jms.Session; import org.junit.jupiter.api.Test; import org.springframework.jms.StubTopic; diff --git a/spring-messaging/spring-messaging.gradle b/spring-messaging/spring-messaging.gradle index c0c7270ebde..61554bc7183 100644 --- a/spring-messaging/spring-messaging.gradle +++ b/spring-messaging/spring-messaging.gradle @@ -13,15 +13,15 @@ dependencies { optional("io.rsocket:rsocket-transport-netty") optional("com.fasterxml.jackson.core:jackson-databind") optional("com.google.code.gson:gson") - optional("javax.json.bind:javax.json.bind-api") - optional("javax.xml.bind:jaxb-api") + optional("jakarta.json.bind:jakarta.json.bind-api") + optional("jakarta.xml.bind:jakarta.xml.bind-api") optional("com.google.protobuf:protobuf-java-util") optional("org.jetbrains.kotlinx:kotlinx-coroutines-reactor") optional("org.jetbrains.kotlinx:kotlinx-serialization-json") testImplementation(testFixtures(project(":spring-core"))) - testImplementation("javax.inject:javax.inject-tck") - testImplementation("javax.servlet:javax.servlet-api") - testImplementation("javax.validation:validation-api") + testImplementation("jakarta.inject:jakarta.inject-tck") + testImplementation("jakarta.servlet:jakarta.servlet-api") + testImplementation("jakarta.validation:jakarta.validation-api") testImplementation("com.thoughtworks.xstream:xstream") testImplementation("org.apache.activemq:activemq-broker") testImplementation("org.apache.activemq:activemq-kahadb-store") @@ -32,10 +32,10 @@ dependencies { testImplementation("org.jetbrains.kotlin:kotlin-stdlib") testImplementation("org.xmlunit:xmlunit-assertj") testImplementation("org.xmlunit:xmlunit-matchers") - testRuntimeOnly("com.sun.activation:javax.activation") + testRuntimeOnly("com.sun.activation:jakarta.activation") testRuntimeOnly("com.sun.xml.bind:jaxb-core") testRuntimeOnly("com.sun.xml.bind:jaxb-impl") - testRuntimeOnly("javax.json:javax.json-api") - testRuntimeOnly("org.apache.johnzon:johnzon-jsonb") + testRuntimeOnly("jakarta.json:jakarta.json-api") + testRuntimeOnly("org.eclipse:yasson") testRuntimeOnly(project(":spring-context")) } diff --git a/spring-messaging/src/main/java/org/springframework/messaging/converter/JsonbMessageConverter.java b/spring-messaging/src/main/java/org/springframework/messaging/converter/JsonbMessageConverter.java index e327edbc2fc..53ea6058798 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/converter/JsonbMessageConverter.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/converter/JsonbMessageConverter.java @@ -21,9 +21,9 @@ import java.io.Writer; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; -import javax.json.bind.Jsonb; -import javax.json.bind.JsonbBuilder; -import javax.json.bind.JsonbConfig; +import jakarta.json.bind.Jsonb; +import jakarta.json.bind.JsonbBuilder; +import jakarta.json.bind.JsonbConfig; import org.springframework.util.Assert; @@ -33,8 +33,8 @@ import org.springframework.util.Assert; * * @author Juergen Hoeller * @since 5.3 - * @see javax.json.bind.Jsonb - * @see javax.json.bind.JsonbBuilder + * @see jakarta.json.bind.Jsonb + * @see jakarta.json.bind.JsonbBuilder * @see #setJsonb */ public class JsonbMessageConverter extends AbstractJsonMessageConverter { diff --git a/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/reactive/PayloadMethodArgumentResolver.java b/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/reactive/PayloadMethodArgumentResolver.java index c36a99ba97a..07b0d28a4df 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/reactive/PayloadMethodArgumentResolver.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/reactive/PayloadMethodArgumentResolver.java @@ -63,7 +63,7 @@ import org.springframework.validation.annotation.Validated; * {@link DataBuffer DataBuffer}. * *

    Validation is applied if the method argument is annotated with - * {@code @javax.validation.Valid} or + * {@code @jakarta.validation.Valid} or * {@link org.springframework.validation.annotation.Validated}. Validation * failure results in an {@link MethodArgumentNotValidException}. * @@ -143,7 +143,7 @@ public class PayloadMethodArgumentResolver implements HandlerMethodArgumentResol * {@link Decoder}. * *

    Validation is applied if the method argument is annotated with - * {@code @javax.validation.Valid} or + * {@code @jakarta.validation.Valid} or * {@link org.springframework.validation.annotation.Validated}. Validation * failure results in an {@link MethodArgumentNotValidException}. * diff --git a/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/PayloadMethodArgumentResolver.java b/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/PayloadMethodArgumentResolver.java index 2ced8c86cd4..92e5d5ecc9f 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/PayloadMethodArgumentResolver.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/PayloadMethodArgumentResolver.java @@ -190,7 +190,7 @@ public class PayloadMethodArgumentResolver implements HandlerMethodArgumentResol /** * Validate the payload if applicable. - *

    The default implementation checks for {@code @javax.validation.Valid}, + *

    The default implementation checks for {@code @jakarta.validation.Valid}, * Spring's {@link Validated}, * and custom annotations whose name starts with "Valid". * @param message the currently processed message diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/config/AbstractMessageBrokerConfiguration.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/config/AbstractMessageBrokerConfiguration.java index fb4150ad7b0..c44ff260103 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/config/AbstractMessageBrokerConfiguration.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/config/AbstractMessageBrokerConfiguration.java @@ -112,7 +112,7 @@ public abstract class AbstractMessageBrokerConfiguration implements ApplicationC jackson2Present = ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", classLoader) && ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", classLoader); gsonPresent = ClassUtils.isPresent("com.google.gson.Gson", classLoader); - jsonbPresent = ClassUtils.isPresent("javax.json.bind.Jsonb", classLoader); + jsonbPresent = ClassUtils.isPresent("jakarta.json.bind.Jsonb", classLoader); kotlinSerializationJsonPresent = ClassUtils.isPresent("kotlinx.serialization.json.Json", classLoader); } @@ -553,7 +553,7 @@ public abstract class AbstractMessageBrokerConfiguration implements ApplicationC if (this.applicationContext != null && this.applicationContext.containsBean(MVC_VALIDATOR_NAME)) { validator = this.applicationContext.getBean(MVC_VALIDATOR_NAME, Validator.class); } - else if (ClassUtils.isPresent("javax.validation.Validator", getClass().getClassLoader())) { + else if (ClassUtils.isPresent("jakarta.validation.Validator", getClass().getClassLoader())) { Class clazz; try { String className = "org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean"; diff --git a/spring-messaging/src/test/java/org/springframework/messaging/converter/JsonbMessageConverterTests.java b/spring-messaging/src/test/java/org/springframework/messaging/converter/JsonbMessageConverterTests.java index 63380ea4ebc..b5026deffdc 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/converter/JsonbMessageConverterTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/converter/JsonbMessageConverterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2020 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,6 +17,7 @@ package org.springframework.messaging.converter; import java.lang.reflect.Method; +import java.math.BigDecimal; import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.HashMap; @@ -74,8 +75,8 @@ public class JsonbMessageConverterTests { HashMap actual = (HashMap) converter.fromMessage(message, HashMap.class); assertThat(actual.get("string")).isEqualTo("Foo"); - assertThat(actual.get("number")).isEqualTo(42); - assertThat((Double) actual.get("fraction")).isCloseTo(42D, within(0D)); + assertThat(actual.get("number")).isEqualTo(new BigDecimal(42)); + assertThat((BigDecimal) actual.get("fraction")).isCloseTo(new BigDecimal(42), within(new BigDecimal(0))); assertThat(actual.get("array")).isEqualTo(Arrays.asList("Foo", "Bar")); assertThat(actual.get("bool")).isEqualTo(Boolean.TRUE); } @@ -165,7 +166,7 @@ public class JsonbMessageConverterTests { String payload = "H\u00e9llo W\u00f6rld"; Message message = converter.toMessage(payload, headers); - assertThat(new String((byte[]) message.getPayload(), StandardCharsets.UTF_16BE)).isEqualTo(payload); + assertThat(new String((byte[]) message.getPayload(), StandardCharsets.UTF_16BE)).isEqualTo("\"" + payload + "\""); assertThat(message.getHeaders().get(MessageHeaders.CONTENT_TYPE)).isEqualTo(contentType); } @@ -181,7 +182,7 @@ public class JsonbMessageConverterTests { String payload = "H\u00e9llo W\u00f6rld"; Message message = converter.toMessage(payload, headers); - assertThat(message.getPayload()).isEqualTo(payload); + assertThat(message.getPayload()).isEqualTo("\"" + payload + "\""); assertThat(message.getHeaders().get(MessageHeaders.CONTENT_TYPE)).isEqualTo(contentType); } diff --git a/spring-messaging/src/test/java/org/springframework/messaging/converter/MarshallingMessageConverterTests.java b/spring-messaging/src/test/java/org/springframework/messaging/converter/MarshallingMessageConverterTests.java index a676edb99b1..19aad50fdd9 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/converter/MarshallingMessageConverterTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/converter/MarshallingMessageConverterTests.java @@ -19,8 +19,7 @@ package org.springframework.messaging.converter; import java.io.IOException; import java.nio.charset.StandardCharsets; -import javax.xml.bind.annotation.XmlRootElement; - +import jakarta.xml.bind.annotation.XmlRootElement; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.xmlunit.diff.DifferenceEvaluator; diff --git a/spring-orm/spring-orm.gradle b/spring-orm/spring-orm.gradle index 7870f5d77d7..d7d2bebf52b 100644 --- a/spring-orm/spring-orm.gradle +++ b/spring-orm/spring-orm.gradle @@ -9,13 +9,13 @@ dependencies { optional(project(":spring-context")) optional(project(":spring-web")) optional("org.eclipse.persistence:org.eclipse.persistence.jpa") - optional("org.hibernate:hibernate-core") - optional("javax.servlet:javax.servlet-api") + optional("org.hibernate:hibernate-core-jakarta") + optional("jakarta.servlet:jakarta.servlet-api") testImplementation(testFixtures(project(":spring-beans"))) testImplementation(testFixtures(project(":spring-context"))) testImplementation(testFixtures(project(":spring-core"))) testImplementation(testFixtures(project(":spring-web"))) testImplementation("org.aspectj:aspectjweaver") testImplementation("org.hsqldb:hsqldb") - testRuntimeOnly("javax.xml.bind:jaxb-api") + testRuntimeOnly("jakarta.xml.bind:jakarta.xml.bind-api") } diff --git a/spring-orm/src/main/java/org/springframework/orm/hibernate5/ConfigurableJtaPlatform.java b/spring-orm/src/main/java/org/springframework/orm/hibernate5/ConfigurableJtaPlatform.java index 839fe1777ca..38265a6f1f9 100644 --- a/spring-orm/src/main/java/org/springframework/orm/hibernate5/ConfigurableJtaPlatform.java +++ b/spring-orm/src/main/java/org/springframework/orm/hibernate5/ConfigurableJtaPlatform.java @@ -16,14 +16,13 @@ package org.springframework.orm.hibernate5; -import javax.transaction.Status; -import javax.transaction.Synchronization; -import javax.transaction.SystemException; -import javax.transaction.Transaction; -import javax.transaction.TransactionManager; -import javax.transaction.TransactionSynchronizationRegistry; -import javax.transaction.UserTransaction; - +import jakarta.transaction.Status; +import jakarta.transaction.Synchronization; +import jakarta.transaction.SystemException; +import jakarta.transaction.Transaction; +import jakarta.transaction.TransactionManager; +import jakarta.transaction.TransactionSynchronizationRegistry; +import jakarta.transaction.UserTransaction; import org.hibernate.TransactionException; import org.hibernate.engine.transaction.jta.platform.spi.JtaPlatform; diff --git a/spring-orm/src/main/java/org/springframework/orm/hibernate5/HibernateExceptionTranslator.java b/spring-orm/src/main/java/org/springframework/orm/hibernate5/HibernateExceptionTranslator.java index bfd086eb626..2f69163421f 100644 --- a/spring-orm/src/main/java/org/springframework/orm/hibernate5/HibernateExceptionTranslator.java +++ b/spring-orm/src/main/java/org/springframework/orm/hibernate5/HibernateExceptionTranslator.java @@ -16,8 +16,7 @@ package org.springframework.orm.hibernate5; -import javax.persistence.PersistenceException; - +import jakarta.persistence.PersistenceException; import org.hibernate.HibernateException; import org.hibernate.JDBCException; diff --git a/spring-orm/src/main/java/org/springframework/orm/hibernate5/HibernateTemplate.java b/spring-orm/src/main/java/org/springframework/orm/hibernate5/HibernateTemplate.java index e624fca329a..dd2d7ff1fad 100644 --- a/spring-orm/src/main/java/org/springframework/orm/hibernate5/HibernateTemplate.java +++ b/spring-orm/src/main/java/org/springframework/orm/hibernate5/HibernateTemplate.java @@ -25,8 +25,7 @@ import java.util.Collection; import java.util.Iterator; import java.util.List; -import javax.persistence.PersistenceException; - +import jakarta.persistence.PersistenceException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.Criteria; diff --git a/spring-orm/src/main/java/org/springframework/orm/hibernate5/HibernateTransactionManager.java b/spring-orm/src/main/java/org/springframework/orm/hibernate5/HibernateTransactionManager.java index 65990f3e833..8d0001c5741 100644 --- a/spring-orm/src/main/java/org/springframework/orm/hibernate5/HibernateTransactionManager.java +++ b/spring-orm/src/main/java/org/springframework/orm/hibernate5/HibernateTransactionManager.java @@ -20,9 +20,9 @@ import java.sql.Connection; import java.sql.ResultSet; import java.util.function.Consumer; -import javax.persistence.PersistenceException; import javax.sql.DataSource; +import jakarta.persistence.PersistenceException; import org.hibernate.ConnectionReleaseMode; import org.hibernate.FlushMode; import org.hibernate.HibernateException; diff --git a/spring-orm/src/main/java/org/springframework/orm/hibernate5/LocalSessionFactoryBean.java b/spring-orm/src/main/java/org/springframework/orm/hibernate5/LocalSessionFactoryBean.java index dc840bdfdc5..eb8fc4acfeb 100644 --- a/spring-orm/src/main/java/org/springframework/orm/hibernate5/LocalSessionFactoryBean.java +++ b/spring-orm/src/main/java/org/springframework/orm/hibernate5/LocalSessionFactoryBean.java @@ -281,7 +281,7 @@ public class LocalSessionFactoryBean extends HibernateExceptionTranslator /** * Set the Spring {@link org.springframework.transaction.jta.JtaTransactionManager} - * or the JTA {@link javax.transaction.TransactionManager} to be used with Hibernate, + * or the JTA {@link jakarta.transaction.TransactionManager} to be used with Hibernate, * if any. Implicitly sets up {@code JtaPlatform}. * @see LocalSessionFactoryBuilder#setJtaTransactionManager */ @@ -343,8 +343,8 @@ public class LocalSessionFactoryBean extends HibernateExceptionTranslator /** * Specify custom type filters for Spring-based scanning for entity classes. *

    Default is to search all specified packages for classes annotated with - * {@code @javax.persistence.Entity}, {@code @javax.persistence.Embeddable} - * or {@code @javax.persistence.MappedSuperclass}. + * {@code @jakarta.persistence.Entity}, {@code @jakarta.persistence.Embeddable} + * or {@code @jakarta.persistence.MappedSuperclass}. * @see #setPackagesToScan */ public void setEntityTypeFilters(TypeFilter... entityTypeFilters) { diff --git a/spring-orm/src/main/java/org/springframework/orm/hibernate5/LocalSessionFactoryBuilder.java b/spring-orm/src/main/java/org/springframework/orm/hibernate5/LocalSessionFactoryBuilder.java index 9011db8fb55..5fac7741cd2 100644 --- a/spring-orm/src/main/java/org/springframework/orm/hibernate5/LocalSessionFactoryBuilder.java +++ b/spring-orm/src/main/java/org/springframework/orm/hibernate5/LocalSessionFactoryBuilder.java @@ -28,14 +28,14 @@ import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; -import javax.persistence.AttributeConverter; -import javax.persistence.Converter; -import javax.persistence.Embeddable; -import javax.persistence.Entity; -import javax.persistence.MappedSuperclass; import javax.sql.DataSource; -import javax.transaction.TransactionManager; +import jakarta.persistence.AttributeConverter; +import jakarta.persistence.Converter; +import jakarta.persistence.Embeddable; +import jakarta.persistence.Entity; +import jakarta.persistence.MappedSuperclass; +import jakarta.transaction.TransactionManager; import org.hibernate.HibernateException; import org.hibernate.MappingException; import org.hibernate.SessionFactory; @@ -269,8 +269,8 @@ public class LocalSessionFactoryBuilder extends Configuration { /** * Specify custom type filters for Spring-based scanning for entity classes. *

    Default is to search all specified packages for classes annotated with - * {@code @javax.persistence.Entity}, {@code @javax.persistence.Embeddable} - * or {@code @javax.persistence.MappedSuperclass}. + * {@code @jakarta.persistence.Entity}, {@code @jakarta.persistence.Embeddable} + * or {@code @jakarta.persistence.MappedSuperclass}. * @see #scanPackages */ public LocalSessionFactoryBuilder setEntityTypeFilters(TypeFilter... entityTypeFilters) { diff --git a/spring-orm/src/main/java/org/springframework/orm/hibernate5/SessionFactoryUtils.java b/spring-orm/src/main/java/org/springframework/orm/hibernate5/SessionFactoryUtils.java index d3b61969aac..32cf2bc90e7 100644 --- a/spring-orm/src/main/java/org/springframework/orm/hibernate5/SessionFactoryUtils.java +++ b/spring-orm/src/main/java/org/springframework/orm/hibernate5/SessionFactoryUtils.java @@ -19,9 +19,9 @@ package org.springframework.orm.hibernate5; import java.lang.reflect.Method; import java.util.Map; -import javax.persistence.PersistenceException; import javax.sql.DataSource; +import jakarta.persistence.PersistenceException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.HibernateException; diff --git a/spring-orm/src/main/java/org/springframework/orm/hibernate5/SpringSessionContext.java b/spring-orm/src/main/java/org/springframework/orm/hibernate5/SpringSessionContext.java index 859abaf7284..a7a5e2f3d26 100644 --- a/spring-orm/src/main/java/org/springframework/orm/hibernate5/SpringSessionContext.java +++ b/spring-orm/src/main/java/org/springframework/orm/hibernate5/SpringSessionContext.java @@ -16,10 +16,9 @@ package org.springframework.orm.hibernate5; -import javax.transaction.Status; -import javax.transaction.SystemException; -import javax.transaction.TransactionManager; - +import jakarta.transaction.Status; +import jakarta.transaction.SystemException; +import jakarta.transaction.TransactionManager; import org.apache.commons.logging.LogFactory; import org.hibernate.FlushMode; import org.hibernate.HibernateException; diff --git a/spring-orm/src/main/java/org/springframework/orm/hibernate5/support/OpenSessionInViewFilter.java b/spring-orm/src/main/java/org/springframework/orm/hibernate5/support/OpenSessionInViewFilter.java index 3379e517c38..7c90bf31ba1 100644 --- a/spring-orm/src/main/java/org/springframework/orm/hibernate5/support/OpenSessionInViewFilter.java +++ b/spring-orm/src/main/java/org/springframework/orm/hibernate5/support/OpenSessionInViewFilter.java @@ -18,11 +18,10 @@ package org.springframework.orm.hibernate5.support; import java.io.IOException; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.hibernate.FlushMode; import org.hibernate.HibernateException; import org.hibernate.Session; diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryBean.java b/spring-orm/src/main/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryBean.java index 4a787866287..1a732825461 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryBean.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryBean.java @@ -34,15 +34,15 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.function.Consumer; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.PersistenceException; -import javax.persistence.Query; -import javax.persistence.SynchronizationType; -import javax.persistence.spi.PersistenceProvider; -import javax.persistence.spi.PersistenceUnitInfo; import javax.sql.DataSource; +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.PersistenceException; +import jakarta.persistence.Query; +import jakarta.persistence.SynchronizationType; +import jakarta.persistence.spi.PersistenceProvider; +import jakarta.persistence.spi.PersistenceUnitInfo; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -64,7 +64,7 @@ import org.springframework.util.CollectionUtils; /** * Abstract {@link org.springframework.beans.factory.FactoryBean} that creates - * a local JPA {@link javax.persistence.EntityManagerFactory} instance within + * a local JPA {@link jakarta.persistence.EntityManagerFactory} instance within * a Spring application context. * *

    Encapsulates the common functionality between the different JPA bootstrap @@ -149,8 +149,8 @@ public abstract class AbstractEntityManagerFactoryBean implements * taken from the JpaVendorAdapter (if any) or retrieved through scanning * (as far as possible). * @see JpaVendorAdapter#getPersistenceProvider() - * @see javax.persistence.spi.PersistenceProvider - * @see javax.persistence.Persistence + * @see jakarta.persistence.spi.PersistenceProvider + * @see jakarta.persistence.Persistence */ public void setPersistenceProviderClass(Class persistenceProviderClass) { this.persistenceProvider = BeanUtils.instantiateClass(persistenceProviderClass); @@ -162,8 +162,8 @@ public abstract class AbstractEntityManagerFactoryBean implements * will be taken from the JpaVendorAdapter (if any) or determined * by the persistence unit deployment descriptor (as far as possible). * @see JpaVendorAdapter#getPersistenceProvider() - * @see javax.persistence.spi.PersistenceProvider - * @see javax.persistence.Persistence + * @see jakarta.persistence.spi.PersistenceProvider + * @see jakarta.persistence.Persistence */ public void setPersistenceProvider(@Nullable PersistenceProvider persistenceProvider) { this.persistenceProvider = persistenceProvider; @@ -180,7 +180,7 @@ public abstract class AbstractEntityManagerFactoryBean implements *

    Default is none, indicating the default EntityManagerFactory * configuration. The persistence provider will throw an exception if * ambiguous EntityManager configurations are found. - * @see javax.persistence.Persistence#createEntityManagerFactory(String) + * @see jakarta.persistence.Persistence#createEntityManagerFactory(String) */ public void setPersistenceUnitName(@Nullable String persistenceUnitName) { this.persistenceUnitName = persistenceUnitName; @@ -197,8 +197,8 @@ public abstract class AbstractEntityManagerFactoryBean implements * {@code Persistence.createEntityManagerFactory} (if any). *

    Can be populated with a String "value" (parsed via PropertiesEditor) or a * "props" element in XML bean definitions. - * @see javax.persistence.Persistence#createEntityManagerFactory(String, Map) - * @see javax.persistence.spi.PersistenceProvider#createContainerEntityManagerFactory(PersistenceUnitInfo, Map) + * @see jakarta.persistence.Persistence#createEntityManagerFactory(String, Map) + * @see jakarta.persistence.spi.PersistenceProvider#createContainerEntityManagerFactory(PersistenceUnitInfo, Map) */ public void setJpaProperties(Properties jpaProperties) { CollectionUtils.mergePropertiesIntoMap(jpaProperties, this.jpaPropertyMap); @@ -208,8 +208,8 @@ public abstract class AbstractEntityManagerFactoryBean implements * Specify JPA properties as a Map, to be passed into * {@code Persistence.createEntityManagerFactory} (if any). *

    Can be populated with a "map" or "props" element in XML bean definitions. - * @see javax.persistence.Persistence#createEntityManagerFactory(String, Map) - * @see javax.persistence.spi.PersistenceProvider#createContainerEntityManagerFactory(PersistenceUnitInfo, Map) + * @see jakarta.persistence.Persistence#createEntityManagerFactory(String, Map) + * @see jakarta.persistence.spi.PersistenceProvider#createContainerEntityManagerFactory(PersistenceUnitInfo, Map) */ public void setJpaPropertyMap(@Nullable Map jpaProperties) { if (jpaProperties != null) { @@ -231,7 +231,7 @@ public abstract class AbstractEntityManagerFactoryBean implements * Specify the (potentially vendor-specific) EntityManagerFactory interface * that this EntityManagerFactory proxy is supposed to implement. *

    The default will be taken from the specific JpaVendorAdapter, if any, - * or set to the standard {@code javax.persistence.EntityManagerFactory} + * or set to the standard {@code jakarta.persistence.EntityManagerFactory} * interface else. * @see JpaVendorAdapter#getEntityManagerFactoryInterface() */ @@ -243,7 +243,7 @@ public abstract class AbstractEntityManagerFactoryBean implements * Specify the (potentially vendor-specific) EntityManager interface * that this factory's EntityManagers are supposed to implement. *

    The default will be taken from the specific JpaVendorAdapter, if any, - * or set to the standard {@code javax.persistence.EntityManager} + * or set to the standard {@code jakarta.persistence.EntityManager} * interface else. * @see JpaVendorAdapter#getEntityManagerInterface() * @see EntityManagerFactoryInfo#getEntityManagerInterface() @@ -468,7 +468,7 @@ public abstract class AbstractEntityManagerFactoryBean implements if (entityManagerFactoryInterface != null) { throw new IllegalStateException("EntityManagerFactory interface [" + entityManagerFactoryInterface + "] seems to conflict with Spring's EntityManagerFactoryInfo mixin - consider resetting the "+ - "'entityManagerFactoryInterface' property to plain [javax.persistence.EntityManagerFactory]", ex); + "'entityManagerFactoryInterface' property to plain [jakarta.persistence.EntityManagerFactory]", ex); } else { throw new IllegalStateException("Conflicting EntityManagerFactory interfaces - " + diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/DefaultJpaDialect.java b/spring-orm/src/main/java/org/springframework/orm/jpa/DefaultJpaDialect.java index 7fe2d71eeff..d78a2f79948 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/DefaultJpaDialect.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/DefaultJpaDialect.java @@ -19,8 +19,8 @@ package org.springframework.orm.jpa; import java.io.Serializable; import java.sql.SQLException; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceException; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceException; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.datasource.ConnectionHandle; @@ -53,7 +53,7 @@ public class DefaultJpaDialect implements JpaDialect, Serializable { * is no state to be kept for a standard JPA transaction. Hence, subclasses do not * have to care about the return value ({@code null}) of this implementation * and are free to return their own transaction data Object. - * @see javax.persistence.EntityTransaction#begin + * @see jakarta.persistence.EntityTransaction#begin * @see org.springframework.transaction.InvalidIsolationLevelException * @see #cleanupTransaction */ diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerFactoryAccessor.java b/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerFactoryAccessor.java index b7ca9b83cd0..5f73add8581 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerFactoryAccessor.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerFactoryAccessor.java @@ -20,9 +20,8 @@ import java.util.HashMap; import java.util.Map; import java.util.Properties; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; - +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -59,8 +58,8 @@ public abstract class EntityManagerFactoryAccessor implements BeanFactoryAware { /** * Set the JPA EntityManagerFactory that should be used to create * EntityManagers. - * @see javax.persistence.EntityManagerFactory#createEntityManager() - * @see javax.persistence.EntityManagerFactory#createEntityManager(java.util.Map) + * @see jakarta.persistence.EntityManagerFactory#createEntityManager() + * @see jakarta.persistence.EntityManagerFactory#createEntityManager(java.util.Map) */ public void setEntityManagerFactory(@Nullable EntityManagerFactory emf) { this.entityManagerFactory = emf; @@ -112,7 +111,7 @@ public abstract class EntityManagerFactoryAccessor implements BeanFactoryAware { * {@code EntityManagerFactory.createEntityManager(Map)} (if any). *

    Can be populated with a String "value" (parsed via PropertiesEditor) * or a "props" element in XML bean definitions. - * @see javax.persistence.EntityManagerFactory#createEntityManager(java.util.Map) + * @see jakarta.persistence.EntityManagerFactory#createEntityManager(java.util.Map) */ public void setJpaProperties(Properties jpaProperties) { CollectionUtils.mergePropertiesIntoMap(jpaProperties, this.jpaPropertyMap); @@ -122,7 +121,7 @@ public abstract class EntityManagerFactoryAccessor implements BeanFactoryAware { * Specify JPA properties as a Map, to be passed into * {@code EntityManagerFactory.createEntityManager(Map)} (if any). *

    Can be populated with a "map" or "props" element in XML bean definitions. - * @see javax.persistence.EntityManagerFactory#createEntityManager(java.util.Map) + * @see jakarta.persistence.EntityManagerFactory#createEntityManager(java.util.Map) */ public void setJpaPropertyMap(@Nullable Map jpaProperties) { if (jpaProperties != null) { @@ -162,8 +161,8 @@ public abstract class EntityManagerFactoryAccessor implements BeanFactoryAware { *

    Can be overridden in subclasses to create specific EntityManager variants. * @return a new EntityManager * @throws IllegalStateException if this accessor is not configured with an EntityManagerFactory - * @see javax.persistence.EntityManagerFactory#createEntityManager() - * @see javax.persistence.EntityManagerFactory#createEntityManager(java.util.Map) + * @see jakarta.persistence.EntityManagerFactory#createEntityManager() + * @see jakarta.persistence.EntityManagerFactory#createEntityManager(java.util.Map) */ protected EntityManager createEntityManager() throws IllegalStateException { EntityManagerFactory emf = obtainEntityManagerFactory(); @@ -175,8 +174,8 @@ public abstract class EntityManagerFactoryAccessor implements BeanFactoryAware { * Obtain the transactional EntityManager for this accessor's EntityManagerFactory, if any. * @return the transactional EntityManager, or {@code null} if none * @throws IllegalStateException if this accessor is not configured with an EntityManagerFactory - * @see EntityManagerFactoryUtils#getTransactionalEntityManager(javax.persistence.EntityManagerFactory) - * @see EntityManagerFactoryUtils#getTransactionalEntityManager(javax.persistence.EntityManagerFactory, java.util.Map) + * @see EntityManagerFactoryUtils#getTransactionalEntityManager(jakarta.persistence.EntityManagerFactory) + * @see EntityManagerFactoryUtils#getTransactionalEntityManager(jakarta.persistence.EntityManagerFactory, java.util.Map) */ @Nullable protected EntityManager getTransactionalEntityManager() throws IllegalStateException{ diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerFactoryInfo.java b/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerFactoryInfo.java index 2b4d72159b4..cdb9dda3ce5 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerFactoryInfo.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerFactoryInfo.java @@ -18,12 +18,13 @@ package org.springframework.orm.jpa; import java.util.Map; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.spi.PersistenceProvider; -import javax.persistence.spi.PersistenceUnitInfo; import javax.sql.DataSource; +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.spi.PersistenceProvider; +import jakarta.persistence.spi.PersistenceUnitInfo; + import org.springframework.lang.Nullable; /** @@ -65,7 +66,7 @@ public interface EntityManagerFactoryInfo { * {@code getPersistenceUnitName()} must be equal to the value returned by * {@code PersistenceUnitInfo.getPersistenceUnitName()}. * @see #getPersistenceUnitInfo() - * @see javax.persistence.spi.PersistenceUnitInfo#getPersistenceUnitName() + * @see jakarta.persistence.spi.PersistenceUnitInfo#getPersistenceUnitName() */ @Nullable String getPersistenceUnitName(); @@ -83,7 +84,7 @@ public interface EntityManagerFactoryInfo { * that this factory's EntityManagers will implement. *

    A {@code null} return value suggests that autodetection is supposed * to happen: either based on a target {@code EntityManager} instance - * or simply defaulting to {@code javax.persistence.EntityManager}. + * or simply defaulting to {@code jakarta.persistence.EntityManager}. */ @Nullable Class getEntityManagerInterface(); diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerFactoryUtils.java b/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerFactoryUtils.java index e8fb5e15fb8..2bf67927124 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerFactoryUtils.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerFactoryUtils.java @@ -18,21 +18,20 @@ package org.springframework.orm.jpa; import java.util.Map; -import javax.persistence.EntityExistsException; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.EntityNotFoundException; -import javax.persistence.LockTimeoutException; -import javax.persistence.NoResultException; -import javax.persistence.NonUniqueResultException; -import javax.persistence.OptimisticLockException; -import javax.persistence.PersistenceException; -import javax.persistence.PessimisticLockException; -import javax.persistence.Query; -import javax.persistence.QueryTimeoutException; -import javax.persistence.SynchronizationType; -import javax.persistence.TransactionRequiredException; - +import jakarta.persistence.EntityExistsException; +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.EntityNotFoundException; +import jakarta.persistence.LockTimeoutException; +import jakarta.persistence.NoResultException; +import jakarta.persistence.NonUniqueResultException; +import jakarta.persistence.OptimisticLockException; +import jakarta.persistence.PersistenceException; +import jakarta.persistence.PessimisticLockException; +import jakarta.persistence.Query; +import jakarta.persistence.QueryTimeoutException; +import jakarta.persistence.SynchronizationType; +import jakarta.persistence.TransactionRequiredException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -168,8 +167,8 @@ public abstract class EntityManagerFactoryUtils { * @param properties the properties to be passed into the {@code createEntityManager} * call (may be {@code null}) * @return the EntityManager, or {@code null} if none found - * @throws javax.persistence.PersistenceException if the EntityManager couldn't be created - * @see #getTransactionalEntityManager(javax.persistence.EntityManagerFactory) + * @throws jakarta.persistence.PersistenceException if the EntityManager couldn't be created + * @see #getTransactionalEntityManager(jakarta.persistence.EntityManagerFactory) * @see JpaTransactionManager */ @Nullable @@ -189,8 +188,8 @@ public abstract class EntityManagerFactoryUtils { * @param synchronizedWithTransaction whether to automatically join ongoing * transactions (according to the JPA 2.1 SynchronizationType rules) * @return the EntityManager, or {@code null} if none found - * @throws javax.persistence.PersistenceException if the EntityManager couldn't be created - * @see #getTransactionalEntityManager(javax.persistence.EntityManagerFactory) + * @throws jakarta.persistence.PersistenceException if the EntityManager couldn't be created + * @see #getTransactionalEntityManager(jakarta.persistence.EntityManagerFactory) * @see JpaTransactionManager */ @Nullable @@ -334,7 +333,7 @@ public abstract class EntityManagerFactoryUtils { /** * Apply the current transaction timeout, if any, to the given JPA Query object. - *

    This method sets the JPA 2.0 query hint "javax.persistence.query.timeout" accordingly. + *

    This method sets the JPA 2.0 query hint "jakarta.persistence.query.timeout" accordingly. * @param query the JPA Query object * @param emf the JPA EntityManagerFactory that the Query was created for */ @@ -343,7 +342,7 @@ public abstract class EntityManagerFactoryUtils { if (emHolder != null && emHolder.hasTimeout()) { int timeoutValue = (int) emHolder.getTimeToLiveInMillis(); try { - query.setHint("javax.persistence.query.timeout", timeoutValue); + query.setHint("jakarta.persistence.query.timeout", timeoutValue); } catch (IllegalArgumentException ex) { // oh well, at least we tried... @@ -418,7 +417,7 @@ public abstract class EntityManagerFactoryUtils { * Close the given JPA EntityManager, * catching and logging any cleanup exceptions thrown. * @param em the JPA EntityManager to close (may be {@code null}) - * @see javax.persistence.EntityManager#close() + * @see jakarta.persistence.EntityManager#close() */ public static void closeEntityManager(@Nullable EntityManager em) { if (em != null) { diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerHolder.java b/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerHolder.java index 512cac8fe9c..cc72652674d 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerHolder.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerHolder.java @@ -16,7 +16,7 @@ package org.springframework.orm.jpa; -import javax.persistence.EntityManager; +import jakarta.persistence.EntityManager; import org.springframework.lang.Nullable; import org.springframework.transaction.SavepointManager; @@ -26,7 +26,7 @@ import org.springframework.util.Assert; /** * Resource holder wrapping a JPA {@link EntityManager}. * {@link JpaTransactionManager} binds instances of this class to the thread, - * for a given {@link javax.persistence.EntityManagerFactory}. + * for a given {@link jakarta.persistence.EntityManagerFactory}. * *

    Also serves as a base class for {@link org.springframework.orm.hibernate5.SessionHolder}, * as of 5.1. diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerProxy.java b/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerProxy.java index 84e574d538f..704b60d234c 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerProxy.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerProxy.java @@ -16,14 +16,14 @@ package org.springframework.orm.jpa; -import javax.persistence.EntityManager; +import jakarta.persistence.EntityManager; /** - * Subinterface of {@link javax.persistence.EntityManager} to be implemented by + * Subinterface of {@link jakarta.persistence.EntityManager} to be implemented by * EntityManager proxies. Allows access to the underlying target EntityManager. * *

    This interface is mainly intended for framework usage. Application code - * should prefer the use of the {@link javax.persistence.EntityManager#getDelegate()} + * should prefer the use of the {@link jakarta.persistence.EntityManager#getDelegate()} * method to access native functionality of the underlying resource. * * @author Juergen Hoeller diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/ExtendedEntityManagerCreator.java b/spring-orm/src/main/java/org/springframework/orm/jpa/ExtendedEntityManagerCreator.java index 8e9173a94bf..29b7a008ca9 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/ExtendedEntityManagerCreator.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/ExtendedEntityManagerCreator.java @@ -25,13 +25,12 @@ import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.EntityTransaction; -import javax.persistence.TransactionRequiredException; -import javax.persistence.spi.PersistenceUnitInfo; -import javax.persistence.spi.PersistenceUnitTransactionType; - +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.EntityTransaction; +import jakarta.persistence.TransactionRequiredException; +import jakarta.persistence.spi.PersistenceUnitInfo; +import jakarta.persistence.spi.PersistenceUnitTransactionType; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -47,14 +46,14 @@ import org.springframework.util.CollectionUtils; import org.springframework.util.ConcurrentReferenceHashMap; /** - * Delegate for creating a variety of {@link javax.persistence.EntityManager} + * Delegate for creating a variety of {@link jakarta.persistence.EntityManager} * proxies that follow the JPA spec's semantics for "extended" EntityManagers. * *

    Supports several different variants of "extended" EntityManagers: * in particular, an "application-managed extended EntityManager", as defined - * by {@link javax.persistence.EntityManagerFactory#createEntityManager()}, + * by {@link jakarta.persistence.EntityManagerFactory#createEntityManager()}, * as well as a "container-managed extended EntityManager", as defined by - * {@link javax.persistence.PersistenceContextType#EXTENDED}. + * {@link jakarta.persistence.PersistenceContextType#EXTENDED}. * *

    The original difference between "application-managed" and "container-managed" * was the need for explicit joining of an externally managed transaction through @@ -69,9 +68,9 @@ import org.springframework.util.ConcurrentReferenceHashMap; * @author Rod Johnson * @author Mark Paluch * @since 2.0 - * @see javax.persistence.EntityManagerFactory#createEntityManager() - * @see javax.persistence.PersistenceContextType#EXTENDED - * @see javax.persistence.EntityManager#joinTransaction() + * @see jakarta.persistence.EntityManagerFactory#createEntityManager() + * @see jakarta.persistence.PersistenceContextType#EXTENDED + * @see jakarta.persistence.EntityManager#joinTransaction() * @see SharedEntityManagerCreator */ public abstract class ExtendedEntityManagerCreator { @@ -131,7 +130,7 @@ public abstract class ExtendedEntityManagerCreator { * JpaDialect and PersistenceUnitInfo will be detected accordingly. * @return a container-managed EntityManager that will automatically participate * in any managed transaction - * @see javax.persistence.EntityManagerFactory#createEntityManager() + * @see jakarta.persistence.EntityManagerFactory#createEntityManager() */ public static EntityManager createContainerManagedEntityManager(EntityManagerFactory emf) { return createContainerManagedEntityManager(emf, null, true); @@ -146,7 +145,7 @@ public abstract class ExtendedEntityManagerCreator { * call (may be {@code null}) * @return a container-managed EntityManager that will automatically participate * in any managed transaction - * @see javax.persistence.EntityManagerFactory#createEntityManager(java.util.Map) + * @see jakarta.persistence.EntityManagerFactory#createEntityManager(java.util.Map) */ public static EntityManager createContainerManagedEntityManager(EntityManagerFactory emf, @Nullable Map properties) { return createContainerManagedEntityManager(emf, properties, true); @@ -164,7 +163,7 @@ public abstract class ExtendedEntityManagerCreator { * @return a container-managed EntityManager that expects container-driven lifecycle * management but may opt out of automatic transaction synchronization * @since 4.0 - * @see javax.persistence.EntityManagerFactory#createEntityManager(java.util.Map) + * @see jakarta.persistence.EntityManagerFactory#createEntityManager(java.util.Map) */ public static EntityManager createContainerManagedEntityManager( EntityManagerFactory emf, @Nullable Map properties, boolean synchronizedWithTransaction) { diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/JpaDialect.java b/spring-orm/src/main/java/org/springframework/orm/jpa/JpaDialect.java index 9ef53884a49..b2c172b453f 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/JpaDialect.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/JpaDialect.java @@ -18,8 +18,8 @@ package org.springframework.orm.jpa; import java.sql.SQLException; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceException; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceException; import org.springframework.dao.support.PersistenceExceptionTranslator; import org.springframework.jdbc.datasource.ConnectionHandle; @@ -73,11 +73,11 @@ public interface JpaDialect extends PersistenceExceptionTranslator { * @return an arbitrary object that holds transaction data, if any * (to be passed into {@link #cleanupTransaction}). May implement the * {@link org.springframework.transaction.SavepointManager} interface. - * @throws javax.persistence.PersistenceException if thrown by JPA methods + * @throws jakarta.persistence.PersistenceException if thrown by JPA methods * @throws java.sql.SQLException if thrown by JDBC methods * @throws org.springframework.transaction.TransactionException in case of invalid arguments * @see #cleanupTransaction - * @see javax.persistence.EntityTransaction#begin + * @see jakarta.persistence.EntityTransaction#begin * @see org.springframework.jdbc.datasource.DataSourceUtils#prepareConnectionForTransaction */ @Nullable @@ -100,7 +100,7 @@ public interface JpaDialect extends PersistenceExceptionTranslator { * @param name the name of the transaction (if any) * @return an arbitrary object that holds transaction data, if any * (to be passed into cleanupTransaction) - * @throws javax.persistence.PersistenceException if thrown by JPA methods + * @throws jakarta.persistence.PersistenceException if thrown by JPA methods * @see #cleanupTransaction */ @Nullable @@ -143,7 +143,7 @@ public interface JpaDialect extends PersistenceExceptionTranslator { * @param readOnly whether the Connection is only needed for read-only purposes * @return a handle for the Connection, to be passed into {@code releaseJdbcConnection}, * or {@code null} if no JDBC Connection can be retrieved - * @throws javax.persistence.PersistenceException if thrown by JPA methods + * @throws jakarta.persistence.PersistenceException if thrown by JPA methods * @throws java.sql.SQLException if thrown by JDBC methods * @see #releaseJdbcConnection * @see org.springframework.jdbc.datasource.ConnectionHandle#getConnection @@ -163,7 +163,7 @@ public interface JpaDialect extends PersistenceExceptionTranslator { * transaction completes or when the EntityManager is closed. * @param conHandle the JDBC Connection handle to release * @param entityManager the current JPA EntityManager - * @throws javax.persistence.PersistenceException if thrown by JPA methods + * @throws jakarta.persistence.PersistenceException if thrown by JPA methods * @throws java.sql.SQLException if thrown by JDBC methods * @see #getJdbcConnection */ diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/JpaObjectRetrievalFailureException.java b/spring-orm/src/main/java/org/springframework/orm/jpa/JpaObjectRetrievalFailureException.java index 26e51471682..20bb6ba841b 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/JpaObjectRetrievalFailureException.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/JpaObjectRetrievalFailureException.java @@ -16,7 +16,7 @@ package org.springframework.orm.jpa; -import javax.persistence.EntityNotFoundException; +import jakarta.persistence.EntityNotFoundException; import org.springframework.orm.ObjectRetrievalFailureException; diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/JpaOptimisticLockingFailureException.java b/spring-orm/src/main/java/org/springframework/orm/jpa/JpaOptimisticLockingFailureException.java index 89b6bfcce5c..a6eb2d1c446 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/JpaOptimisticLockingFailureException.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/JpaOptimisticLockingFailureException.java @@ -16,7 +16,7 @@ package org.springframework.orm.jpa; -import javax.persistence.OptimisticLockException; +import jakarta.persistence.OptimisticLockException; import org.springframework.orm.ObjectOptimisticLockingFailureException; diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/JpaTransactionManager.java b/spring-orm/src/main/java/org/springframework/orm/jpa/JpaTransactionManager.java index 2746339bc62..79e48b7d0f3 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/JpaTransactionManager.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/JpaTransactionManager.java @@ -21,13 +21,14 @@ import java.util.Map; import java.util.Properties; import java.util.function.Consumer; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.EntityTransaction; -import javax.persistence.PersistenceException; -import javax.persistence.RollbackException; import javax.sql.DataSource; +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.EntityTransaction; +import jakarta.persistence.PersistenceException; +import jakarta.persistence.RollbackException; + import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; @@ -58,7 +59,7 @@ import org.springframework.util.CollectionUtils; /** * {@link org.springframework.transaction.PlatformTransactionManager} implementation - * for a single JPA {@link javax.persistence.EntityManagerFactory}. Binds a JPA + * for a single JPA {@link jakarta.persistence.EntityManagerFactory}. Binds a JPA * EntityManager from the specified factory to the thread, potentially allowing for * one thread-bound EntityManager per factory. {@link SharedEntityManagerCreator} and * {@code @PersistenceContext} are aware of thread-bound entity managers and participate @@ -209,7 +210,7 @@ public class JpaTransactionManager extends AbstractPlatformTransactionManager * {@code EntityManagerFactory.createEntityManager(Map)} (if any). *

    Can be populated with a String "value" (parsed via PropertiesEditor) * or a "props" element in XML bean definitions. - * @see javax.persistence.EntityManagerFactory#createEntityManager(java.util.Map) + * @see jakarta.persistence.EntityManagerFactory#createEntityManager(java.util.Map) */ public void setJpaProperties(@Nullable Properties jpaProperties) { CollectionUtils.mergePropertiesIntoMap(jpaProperties, this.jpaPropertyMap); @@ -219,7 +220,7 @@ public class JpaTransactionManager extends AbstractPlatformTransactionManager * Specify JPA properties as a Map, to be passed into * {@code EntityManagerFactory.createEntityManager(Map)} (if any). *

    Can be populated with a "map" or "props" element in XML bean definitions. - * @see javax.persistence.EntityManagerFactory#createEntityManager(java.util.Map) + * @see jakarta.persistence.EntityManagerFactory#createEntityManager(java.util.Map) */ public void setJpaPropertyMap(@Nullable Map jpaProperties) { if (jpaProperties != null) { @@ -475,7 +476,7 @@ public class JpaTransactionManager extends AbstractPlatformTransactionManager * {@link EntityManagerFactoryInfo#createNativeEntityManager} * if possible which in turns applies * {@link JpaVendorAdapter#postProcessEntityManager(EntityManager)}. - * @see javax.persistence.EntityManagerFactory#createEntityManager() + * @see jakarta.persistence.EntityManagerFactory#createEntityManager() */ protected EntityManager createEntityManagerForTransaction() { EntityManagerFactory emf = obtainEntityManagerFactory(); diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/JpaVendorAdapter.java b/spring-orm/src/main/java/org/springframework/orm/jpa/JpaVendorAdapter.java index 4d283283a3e..7ea555d6d77 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/JpaVendorAdapter.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/JpaVendorAdapter.java @@ -19,10 +19,10 @@ package org.springframework.orm.jpa; import java.util.Collections; import java.util.Map; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.spi.PersistenceProvider; -import javax.persistence.spi.PersistenceUnitInfo; +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.spi.PersistenceProvider; +import jakarta.persistence.spi.PersistenceUnitInfo; import org.springframework.lang.Nullable; @@ -64,10 +64,10 @@ public interface JpaVendorAdapter { * non-unit-dependent properties. Effectively, this PersistenceUnitInfo-based * variant only needs to be implemented if there is an actual need to react * to unit-specific characteristics such as the transaction type. - *

    NOTE: This variant will only be invoked in case of Java EE style + *

    NOTE: This variant will only be invoked in case of Jakarta EE style * container bootstrapping where a {@link PersistenceUnitInfo} is present * (i.e. {@link LocalContainerEntityManagerFactoryBean}. In case of simple - * Java SE style bootstrapping via {@link javax.persistence.Persistence} + * Java SE style bootstrapping via {@link jakarta.persistence.Persistence} * (i.e. {@link LocalEntityManagerFactoryBean}), the parameter-less * {@link #getJpaPropertyMap()} variant will be called directly. * @param pui the PersistenceUnitInfo for the current persistence unit @@ -75,7 +75,7 @@ public interface JpaVendorAdapter { * facilities, or an empty Map if there are no properties to expose * @since 4.3.13 * @see PersistenceUnitInfo#getTransactionType() - * @see javax.persistence.spi.PersistenceProvider#createContainerEntityManagerFactory(PersistenceUnitInfo, Map) + * @see jakarta.persistence.spi.PersistenceProvider#createContainerEntityManagerFactory(PersistenceUnitInfo, Map) */ default Map getJpaPropertyMap(PersistenceUnitInfo pui) { return getJpaPropertyMap(); @@ -89,7 +89,7 @@ public interface JpaVendorAdapter { * JPA property values specified here. * @return a Map of JPA properties, as accepted by the standard JPA bootstrap * facilities, or an empty Map if there are no properties to expose - * @see javax.persistence.Persistence#createEntityManagerFactory(String, Map) + * @see jakarta.persistence.Persistence#createEntityManagerFactory(String, Map) */ default Map getJpaPropertyMap() { return Collections.emptyMap(); @@ -109,7 +109,7 @@ public interface JpaVendorAdapter { * that the EntityManagerFactory proxy is supposed to implement. *

    If the provider does not offer any EntityManagerFactory extensions, * the adapter should simply return the standard - * {@link javax.persistence.EntityManagerFactory} class here. + * {@link jakarta.persistence.EntityManagerFactory} class here. * @since 2.5.2 */ default Class getEntityManagerFactoryInterface() { @@ -121,7 +121,7 @@ public interface JpaVendorAdapter { * that this provider's EntityManagers will implement. *

    If the provider does not offer any EntityManager extensions, * the adapter should simply return the standard - * {@link javax.persistence.EntityManager} class here. + * {@link jakarta.persistence.EntityManager} class here. */ default Class getEntityManagerInterface() { return EntityManager.class; diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBean.java b/spring-orm/src/main/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBean.java index 6fc17b5c5fd..3ec01ff8d84 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBean.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBean.java @@ -16,14 +16,15 @@ package org.springframework.orm.jpa; -import javax.persistence.EntityManagerFactory; -import javax.persistence.PersistenceException; -import javax.persistence.SharedCacheMode; -import javax.persistence.ValidationMode; -import javax.persistence.spi.PersistenceProvider; -import javax.persistence.spi.PersistenceUnitInfo; import javax.sql.DataSource; +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.PersistenceException; +import jakarta.persistence.SharedCacheMode; +import jakarta.persistence.ValidationMode; +import jakarta.persistence.spi.PersistenceProvider; +import jakarta.persistence.spi.PersistenceUnitInfo; + import org.springframework.beans.BeanUtils; import org.springframework.context.ResourceLoaderAware; import org.springframework.context.weaving.LoadTimeWeaverAware; @@ -40,7 +41,7 @@ import org.springframework.util.ClassUtils; /** * {@link org.springframework.beans.factory.FactoryBean} that creates a JPA - * {@link javax.persistence.EntityManagerFactory} according to JPA's standard + * {@link jakarta.persistence.EntityManagerFactory} according to JPA's standard * container bootstrap contract. This is the most powerful way to set * up a shared JPA EntityManagerFactory in a Spring application context; * the EntityManagerFactory can then be passed to JPA-based DAOs via @@ -58,10 +59,10 @@ import org.springframework.util.ClassUtils; * instead of being tied to a special VM agent specified on JVM startup. * *

    Internally, this FactoryBean parses the {@code persistence.xml} file - * itself and creates a corresponding {@link javax.persistence.spi.PersistenceUnitInfo} + * itself and creates a corresponding {@link jakarta.persistence.spi.PersistenceUnitInfo} * object (with further configuration merged in, such as JDBC DataSources and the * Spring LoadTimeWeaver), to be passed to the chosen JPA - * {@link javax.persistence.spi.PersistenceProvider}. This corresponds to a + * {@link jakarta.persistence.spi.PersistenceProvider}. This corresponds to a * local JPA container with full support for the standard JPA container contract. * *

    The exposed EntityManagerFactory object will implement all the interfaces of @@ -84,7 +85,7 @@ import org.springframework.util.ClassUtils; * @see EntityManagerFactoryInfo * @see LocalEntityManagerFactoryBean * @see org.springframework.orm.jpa.support.SharedEntityManagerBean - * @see javax.persistence.spi.PersistenceProvider#createContainerEntityManagerFactory + * @see jakarta.persistence.spi.PersistenceProvider#createContainerEntityManagerFactory */ @SuppressWarnings("serial") public class LocalContainerEntityManagerFactoryBean extends AbstractEntityManagerFactoryBean @@ -220,7 +221,7 @@ public class LocalContainerEntityManagerFactoryBean extends AbstractEntityManage * overriding a value in {@code persistence.xml} if set. *

    NOTE: Only applied if no external PersistenceUnitManager specified. * @since 4.0 - * @see javax.persistence.spi.PersistenceUnitInfo#getSharedCacheMode() + * @see jakarta.persistence.spi.PersistenceUnitInfo#getSharedCacheMode() * @see #setPersistenceUnitManager */ public void setSharedCacheMode(SharedCacheMode sharedCacheMode) { @@ -232,7 +233,7 @@ public class LocalContainerEntityManagerFactoryBean extends AbstractEntityManage * overriding a value in {@code persistence.xml} if set. *

    NOTE: Only applied if no external PersistenceUnitManager specified. * @since 4.0 - * @see javax.persistence.spi.PersistenceUnitInfo#getValidationMode() + * @see jakarta.persistence.spi.PersistenceUnitInfo#getValidationMode() * @see #setPersistenceUnitManager */ public void setValidationMode(ValidationMode validationMode) { @@ -250,7 +251,7 @@ public class LocalContainerEntityManagerFactoryBean extends AbstractEntityManage * Note that this variant typically works for JTA transaction management as well; * if it does not, consider using the explicit {@link #setJtaDataSource} instead. *

    NOTE: Only applied if no external PersistenceUnitManager specified. - * @see javax.persistence.spi.PersistenceUnitInfo#getNonJtaDataSource() + * @see jakarta.persistence.spi.PersistenceUnitInfo#getNonJtaDataSource() * @see #setPersistenceUnitManager */ public void setDataSource(DataSource dataSource) { @@ -267,7 +268,7 @@ public class LocalContainerEntityManagerFactoryBean extends AbstractEntityManage * on the PersistenceUnitInfo passed to the PersistenceProvider, as well as * overriding data source configuration in {@code persistence.xml} (if any). *

    NOTE: Only applied if no external PersistenceUnitManager specified. - * @see javax.persistence.spi.PersistenceUnitInfo#getJtaDataSource() + * @see jakarta.persistence.spi.PersistenceUnitInfo#getJtaDataSource() * @see #setPersistenceUnitManager */ public void setJtaDataSource(DataSource jtaDataSource) { @@ -394,7 +395,7 @@ public class LocalContainerEntityManagerFactoryBean extends AbstractEntityManage *

    The default implementation is empty. * @param emf the newly created EntityManagerFactory we are working with * @param pui the PersistenceUnitInfo used to configure the EntityManagerFactory - * @see javax.persistence.spi.PersistenceProvider#createContainerEntityManagerFactory + * @see jakarta.persistence.spi.PersistenceProvider#createContainerEntityManagerFactory */ protected void postProcessEntityManagerFactory(EntityManagerFactory emf, PersistenceUnitInfo pui) { } diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/LocalEntityManagerFactoryBean.java b/spring-orm/src/main/java/org/springframework/orm/jpa/LocalEntityManagerFactoryBean.java index dcc9961f55c..10e528cee58 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/LocalEntityManagerFactoryBean.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/LocalEntityManagerFactoryBean.java @@ -16,14 +16,14 @@ package org.springframework.orm.jpa; -import javax.persistence.EntityManagerFactory; -import javax.persistence.Persistence; -import javax.persistence.PersistenceException; -import javax.persistence.spi.PersistenceProvider; +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.Persistence; +import jakarta.persistence.PersistenceException; +import jakarta.persistence.spi.PersistenceProvider; /** * {@link org.springframework.beans.factory.FactoryBean} that creates a JPA - * {@link javax.persistence.EntityManagerFactory} according to JPA's standard + * {@link jakarta.persistence.EntityManagerFactory} according to JPA's standard * standalone bootstrap contract. This is the simplest way to set up a * shared JPA EntityManagerFactory in a Spring application context; the * EntityManagerFactory can then be passed to JPA-based DAOs via @@ -41,7 +41,7 @@ import javax.persistence.spi.PersistenceProvider; *

    This EntityManagerFactory bootstrap is appropriate for standalone applications * which solely use JPA for data access. If you want to set up your persistence * provider for an external DataSource and/or for global transactions which span - * multiple resources, you will need to either deploy it into a full Java EE + * multiple resources, you will need to either deploy it into a full Jakarta EE * application server and access the deployed EntityManagerFactory via JNDI, * or use Spring's {@link LocalContainerEntityManagerFactoryBean} with appropriate * configuration for local setup according to JPA's container contract. @@ -65,15 +65,15 @@ import javax.persistence.spi.PersistenceProvider; * @see LocalContainerEntityManagerFactoryBean * @see org.springframework.jndi.JndiObjectFactoryBean * @see org.springframework.orm.jpa.support.SharedEntityManagerBean - * @see javax.persistence.Persistence#createEntityManagerFactory - * @see javax.persistence.spi.PersistenceProvider#createEntityManagerFactory + * @see jakarta.persistence.Persistence#createEntityManagerFactory + * @see jakarta.persistence.spi.PersistenceProvider#createEntityManagerFactory */ @SuppressWarnings("serial") public class LocalEntityManagerFactoryBean extends AbstractEntityManagerFactoryBean { /** * Initialize the EntityManagerFactory for the given configuration. - * @throws javax.persistence.PersistenceException in case of JPA initialization errors + * @throws jakarta.persistence.PersistenceException in case of JPA initialization errors */ @Override protected EntityManagerFactory createNativeEntityManagerFactory() throws PersistenceException { diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/SharedEntityManagerCreator.java b/spring-orm/src/main/java/org/springframework/orm/jpa/SharedEntityManagerCreator.java index 5b109cf8986..26add517b03 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/SharedEntityManagerCreator.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/SharedEntityManagerCreator.java @@ -28,13 +28,12 @@ import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.ParameterMode; -import javax.persistence.Query; -import javax.persistence.StoredProcedureQuery; -import javax.persistence.TransactionRequiredException; - +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.ParameterMode; +import jakarta.persistence.Query; +import jakarta.persistence.StoredProcedureQuery; +import jakarta.persistence.TransactionRequiredException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -45,8 +44,8 @@ import org.springframework.util.CollectionUtils; import org.springframework.util.ConcurrentReferenceHashMap; /** - * Delegate for creating a shareable JPA {@link javax.persistence.EntityManager} - * reference for a given {@link javax.persistence.EntityManagerFactory}. + * Delegate for creating a shareable JPA {@link jakarta.persistence.EntityManager} + * reference for a given {@link jakarta.persistence.EntityManagerFactory}. * *

    A shared EntityManager will behave just like an EntityManager fetched from * an application server's JNDI environment, as defined by the JPA specification. @@ -54,17 +53,17 @@ import org.springframework.util.ConcurrentReferenceHashMap; * otherwise it will fall back to a newly created EntityManager per operation. * *

    For a behavioral definition of such a shared transactional EntityManager, - * see {@link javax.persistence.PersistenceContextType#TRANSACTION} and its + * see {@link jakarta.persistence.PersistenceContextType#TRANSACTION} and its * discussion in the JPA spec document. This is also the default being used - * for the annotation-based {@link javax.persistence.PersistenceContext#type()}. + * for the annotation-based {@link jakarta.persistence.PersistenceContext#type()}. * * @author Juergen Hoeller * @author Rod Johnson * @author Oliver Gierke * @author Mark Paluch * @since 2.0 - * @see javax.persistence.PersistenceContext - * @see javax.persistence.PersistenceContextType#TRANSACTION + * @see jakarta.persistence.PersistenceContext + * @see jakarta.persistence.PersistenceContextType#TRANSACTION * @see org.springframework.orm.jpa.JpaTransactionManager * @see ExtendedEntityManagerCreator */ diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/ClassFileTransformerAdapter.java b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/ClassFileTransformerAdapter.java index 162e886c2db..0654e12c3d9 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/ClassFileTransformerAdapter.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/ClassFileTransformerAdapter.java @@ -19,8 +19,7 @@ package org.springframework.orm.jpa.persistenceunit; import java.lang.instrument.ClassFileTransformer; import java.security.ProtectionDomain; -import javax.persistence.spi.ClassTransformer; - +import jakarta.persistence.spi.ClassTransformer; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -35,7 +34,7 @@ import org.springframework.util.Assert; * @author Rod Johnson * @author Juergen Hoeller * @since 2.0 - * @see javax.persistence.spi.PersistenceUnitInfo#addTransformer(javax.persistence.spi.ClassTransformer) + * @see jakarta.persistence.spi.PersistenceUnitInfo#addTransformer(jakarta.persistence.spi.ClassTransformer) */ class ClassFileTransformerAdapter implements ClassFileTransformer { diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/DefaultPersistenceUnitManager.java b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/DefaultPersistenceUnitManager.java index 8e2fd410d54..c16527b6153 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/DefaultPersistenceUnitManager.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/DefaultPersistenceUnitManager.java @@ -26,16 +26,16 @@ import java.util.List; import java.util.Map; import java.util.Set; -import javax.persistence.Converter; -import javax.persistence.Embeddable; -import javax.persistence.Entity; -import javax.persistence.MappedSuperclass; -import javax.persistence.PersistenceException; -import javax.persistence.SharedCacheMode; -import javax.persistence.ValidationMode; -import javax.persistence.spi.PersistenceUnitInfo; import javax.sql.DataSource; +import jakarta.persistence.Converter; +import jakarta.persistence.Embeddable; +import jakarta.persistence.Entity; +import jakarta.persistence.MappedSuperclass; +import jakarta.persistence.PersistenceException; +import jakarta.persistence.SharedCacheMode; +import jakarta.persistence.ValidationMode; +import jakarta.persistence.spi.PersistenceUnitInfo; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -274,7 +274,7 @@ public class DefaultPersistenceUnitManager * Specify the JPA 2.0 shared cache mode for all of this manager's persistence * units, overriding any value in {@code persistence.xml} if set. * @since 4.0 - * @see javax.persistence.spi.PersistenceUnitInfo#getSharedCacheMode() + * @see jakarta.persistence.spi.PersistenceUnitInfo#getSharedCacheMode() */ public void setSharedCacheMode(SharedCacheMode sharedCacheMode) { this.sharedCacheMode = sharedCacheMode; @@ -284,7 +284,7 @@ public class DefaultPersistenceUnitManager * Specify the JPA 2.0 validation mode for all of this manager's persistence * units, overriding any value in {@code persistence.xml} if set. * @since 4.0 - * @see javax.persistence.spi.PersistenceUnitInfo#getValidationMode() + * @see jakarta.persistence.spi.PersistenceUnitInfo#getValidationMode() */ public void setValidationMode(ValidationMode validationMode) { this.validationMode = validationMode; @@ -341,7 +341,7 @@ public class DefaultPersistenceUnitManager *

    In JPA speak, a DataSource passed in here will be uses as "nonJtaDataSource" * on the PersistenceUnitInfo passed to the PersistenceProvider, provided that * none has been registered before. - * @see javax.persistence.spi.PersistenceUnitInfo#getNonJtaDataSource() + * @see jakarta.persistence.spi.PersistenceUnitInfo#getNonJtaDataSource() */ public void setDefaultDataSource(@Nullable DataSource defaultDataSource) { this.defaultDataSource = defaultDataSource; @@ -363,7 +363,7 @@ public class DefaultPersistenceUnitManager *

    In JPA speak, a DataSource passed in here will be uses as "jtaDataSource" * on the PersistenceUnitInfo passed to the PersistenceProvider, provided that * none has been registered before. - * @see javax.persistence.spi.PersistenceUnitInfo#getJtaDataSource() + * @see jakarta.persistence.spi.PersistenceUnitInfo#getJtaDataSource() */ public void setDefaultJtaDataSource(@Nullable DataSource defaultJtaDataSource) { this.defaultJtaDataSource = defaultJtaDataSource; diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/MutablePersistenceUnitInfo.java b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/MutablePersistenceUnitInfo.java index b006f76bfaf..7bd5304b006 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/MutablePersistenceUnitInfo.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/MutablePersistenceUnitInfo.java @@ -21,19 +21,20 @@ import java.util.ArrayList; import java.util.List; import java.util.Properties; -import javax.persistence.SharedCacheMode; -import javax.persistence.ValidationMode; -import javax.persistence.spi.ClassTransformer; -import javax.persistence.spi.PersistenceUnitTransactionType; import javax.sql.DataSource; +import jakarta.persistence.SharedCacheMode; +import jakarta.persistence.ValidationMode; +import jakarta.persistence.spi.ClassTransformer; +import jakarta.persistence.spi.PersistenceUnitTransactionType; + import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; /** * Spring's base implementation of the JPA - * {@link javax.persistence.spi.PersistenceUnitInfo} interface, + * {@link jakarta.persistence.spi.PersistenceUnitInfo} interface, * used to bootstrap an {@code EntityManagerFactory} in a container. * *

    This implementation is largely a JavaBean, offering mutators @@ -171,7 +172,7 @@ public class MutablePersistenceUnitInfo implements SmartPersistenceUnitInfo { /** * Add a managed class name to the persistence provider's metadata. - * @see javax.persistence.spi.PersistenceUnitInfo#getManagedClassNames() + * @see jakarta.persistence.spi.PersistenceUnitInfo#getManagedClassNames() * @see #addManagedPackage */ public void addManagedClassName(String managedClassName) { diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/PersistenceUnitManager.java b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/PersistenceUnitManager.java index e9bb1429a7f..bf69b58929e 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/PersistenceUnitManager.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/PersistenceUnitManager.java @@ -16,14 +16,14 @@ package org.springframework.orm.jpa.persistenceunit; -import javax.persistence.spi.PersistenceUnitInfo; +import jakarta.persistence.spi.PersistenceUnitInfo; /** * Interface that defines an abstraction for finding and managing * JPA PersistenceUnitInfos. Used by * {@link org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean} - * in order to obtain a {@link javax.persistence.spi.PersistenceUnitInfo} - * for building a concrete {@link javax.persistence.EntityManagerFactory}. + * in order to obtain a {@link jakarta.persistence.spi.PersistenceUnitInfo} + * for building a concrete {@link jakarta.persistence.EntityManagerFactory}. * *

    Obtaining a PersistenceUnitInfo instance is an exclusive process. * A PersistenceUnitInfo instance is not available for further calls diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/PersistenceUnitReader.java b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/PersistenceUnitReader.java index 092285cd25f..1b2cd4b53e2 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/PersistenceUnitReader.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/PersistenceUnitReader.java @@ -22,13 +22,13 @@ import java.net.URL; import java.util.ArrayList; import java.util.List; -import javax.persistence.SharedCacheMode; -import javax.persistence.ValidationMode; -import javax.persistence.spi.PersistenceUnitTransactionType; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; +import jakarta.persistence.SharedCacheMode; +import jakarta.persistence.ValidationMode; +import jakarta.persistence.spi.PersistenceUnitTransactionType; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.w3c.dom.Document; diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/SmartPersistenceUnitInfo.java b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/SmartPersistenceUnitInfo.java index 1ed577af6e4..3ad341cc9c1 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/SmartPersistenceUnitInfo.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/SmartPersistenceUnitInfo.java @@ -18,7 +18,7 @@ package org.springframework.orm.jpa.persistenceunit; import java.util.List; -import javax.persistence.spi.PersistenceUnitInfo; +import jakarta.persistence.spi.PersistenceUnitInfo; /** * Extension of the standard JPA PersistenceUnitInfo interface, for advanced collaboration @@ -42,7 +42,7 @@ public interface SmartPersistenceUnitInfo extends PersistenceUnitInfo { /** * Set the persistence provider's own package name, for exclusion from class transformation. - * @see #addTransformer(javax.persistence.spi.ClassTransformer) + * @see #addTransformer(jakarta.persistence.spi.ClassTransformer) * @see #getNewTempClassLoader() */ void setPersistenceProviderPackageName(String persistenceProviderPackageName); diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/SpringPersistenceUnitInfo.java b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/SpringPersistenceUnitInfo.java index 0cf289f3ee1..da5e46fdbd8 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/SpringPersistenceUnitInfo.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/SpringPersistenceUnitInfo.java @@ -16,7 +16,7 @@ package org.springframework.orm.jpa.persistenceunit; -import javax.persistence.spi.ClassTransformer; +import jakarta.persistence.spi.ClassTransformer; import org.springframework.core.DecoratingClassLoader; import org.springframework.instrument.classloading.LoadTimeWeaver; diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/support/AsyncRequestInterceptor.java b/spring-orm/src/main/java/org/springframework/orm/jpa/support/AsyncRequestInterceptor.java index 7f31393e132..46efcd21cb7 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/support/AsyncRequestInterceptor.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/support/AsyncRequestInterceptor.java @@ -18,8 +18,7 @@ package org.springframework.orm.jpa.support; import java.util.concurrent.Callable; -import javax.persistence.EntityManagerFactory; - +import jakarta.persistence.EntityManagerFactory; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewFilter.java b/spring-orm/src/main/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewFilter.java index a36c0d64c8f..4b185400544 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewFilter.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewFilter.java @@ -18,13 +18,13 @@ package org.springframework.orm.jpa.support; import java.io.IOException; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.PersistenceException; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.PersistenceException; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.dao.DataAccessResourceFailureException; import org.springframework.lang.Nullable; @@ -242,7 +242,7 @@ public class OpenEntityManagerInViewFilter extends OncePerRequestFilter { * Create a JPA EntityManager to be bound to a request. *

    Can be overridden in subclasses. * @param emf the EntityManagerFactory to use - * @see javax.persistence.EntityManagerFactory#createEntityManager() + * @see jakarta.persistence.EntityManagerFactory#createEntityManager() */ protected EntityManager createEntityManager(EntityManagerFactory emf) { return emf.createEntityManager(); diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewInterceptor.java b/spring-orm/src/main/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewInterceptor.java index 5382e9bdfab..e6cc8f14fe5 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewInterceptor.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewInterceptor.java @@ -16,9 +16,9 @@ package org.springframework.orm.jpa.support; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.PersistenceException; +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.PersistenceException; import org.springframework.dao.DataAccessException; import org.springframework.dao.DataAccessResourceFailureException; diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/support/PersistenceAnnotationBeanPostProcessor.java b/spring-orm/src/main/java/org/springframework/orm/jpa/support/PersistenceAnnotationBeanPostProcessor.java index d9ff7afc141..20747130ac7 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/support/PersistenceAnnotationBeanPostProcessor.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/support/PersistenceAnnotationBeanPostProcessor.java @@ -29,13 +29,13 @@ import java.util.Map; import java.util.Properties; import java.util.concurrent.ConcurrentHashMap; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.PersistenceContext; -import javax.persistence.PersistenceContextType; -import javax.persistence.PersistenceProperty; -import javax.persistence.PersistenceUnit; -import javax.persistence.SynchronizationType; +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.PersistenceContext; +import jakarta.persistence.PersistenceContextType; +import jakarta.persistence.PersistenceProperty; +import jakarta.persistence.PersistenceUnit; +import jakarta.persistence.SynchronizationType; import org.springframework.beans.BeanUtils; import org.springframework.beans.PropertyValues; @@ -71,10 +71,10 @@ import org.springframework.util.ReflectionUtils; import org.springframework.util.StringUtils; /** - * BeanPostProcessor that processes {@link javax.persistence.PersistenceUnit} - * and {@link javax.persistence.PersistenceContext} annotations, for injection of - * the corresponding JPA resources {@link javax.persistence.EntityManagerFactory} - * and {@link javax.persistence.EntityManager}. Any such annotated fields or methods + * BeanPostProcessor that processes {@link jakarta.persistence.PersistenceUnit} + * and {@link jakarta.persistence.PersistenceContext} annotations, for injection of + * the corresponding JPA resources {@link jakarta.persistence.EntityManagerFactory} + * and {@link jakarta.persistence.EntityManager}. Any such annotated fields or methods * in any Spring-managed object will automatically be injected. * *

    This post-processor will inject sub-interfaces of {@code EntityManagerFactory} @@ -88,7 +88,7 @@ import org.springframework.util.StringUtils; * with the "unitName" attribute, or no attribute at all (for the default unit). * If those annotations are present with the "name" attribute at the class level, * they will simply be ignored, since those only serve as deployment hint - * (as per the Java EE specification). + * (as per the Jakarta EE specification). * *

    This post-processor can either obtain EntityManagerFactory beans defined * in the Spring application context (the default), or obtain EntityManagerFactory @@ -106,9 +106,9 @@ import org.springframework.util.StringUtils; * * In the JNDI case, specify the corresponding JNDI names in this post-processor's * {@link #setPersistenceUnits "persistenceUnits" map}, typically with matching - * {@code persistence-unit-ref} entries in the Java EE deployment descriptor. + * {@code persistence-unit-ref} entries in the Jakarta EE deployment descriptor. * By default, those names are considered as resource references (according to the - * Java EE resource-ref convention), located underneath the "java:comp/env/" namespace. + * Jakarta EE resource-ref convention), located underneath the "java:comp/env/" namespace. * For example: * *

    @@ -123,18 +123,18 @@ import org.springframework.util.StringUtils;
      *
      * In this case, the specified persistence units will always be resolved in JNDI
      * rather than as Spring-defined beans. The entire persistence unit deployment,
    - * including the weaving of persistent classes, is then up to the Java EE server.
    + * including the weaving of persistent classes, is then up to the Jakarta EE server.
      * Persistence contexts (i.e. EntityManager references) will be built based on
      * those server-provided EntityManagerFactory references, using Spring's own
      * transaction synchronization facilities for transactional EntityManager handling
      * (typically with Spring's {@code @Transactional} annotation for demarcation
      * and {@link org.springframework.transaction.jta.JtaTransactionManager} as backend).
      *
    - * 

    If you prefer the Java EE server's own EntityManager handling, specify entries + *

    If you prefer the Jakarta EE server's own EntityManager handling, specify entries * in this post-processor's {@link #setPersistenceContexts "persistenceContexts" map} * (or {@link #setExtendedPersistenceContexts "extendedPersistenceContexts" map}, * typically with matching {@code persistence-context-ref} entries in the - * Java EE deployment descriptor. For example: + * Jakarta EE deployment descriptor. For example: * *

      * <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor">
    @@ -165,8 +165,8 @@ import org.springframework.util.StringUtils;
      * @author Rod Johnson
      * @author Juergen Hoeller
      * @since 2.0
    - * @see javax.persistence.PersistenceUnit
    - * @see javax.persistence.PersistenceContext
    + * @see jakarta.persistence.PersistenceUnit
    + * @see jakarta.persistence.PersistenceContext
      */
     @SuppressWarnings("serial")
     public class PersistenceAnnotationBeanPostProcessor
    @@ -216,7 +216,7 @@ public class PersistenceAnnotationBeanPostProcessor
     	}
     
     	/**
    -	 * Set whether the lookup occurs in a Java EE container, i.e. if the prefix
    +	 * Set whether the lookup occurs in a Jakarta EE container, i.e. if the prefix
     	 * "java:comp/env/" needs to be added if the JNDI name doesn't already
     	 * contain it. PersistenceAnnotationBeanPostProcessor's default is "true".
     	 * @see org.springframework.jndi.JndiLocatorSupport#setResourceRef
    @@ -230,12 +230,12 @@ public class PersistenceAnnotationBeanPostProcessor
     	 * as a Map from persistence unit name to persistence unit JNDI name
     	 * (which needs to resolve to an EntityManagerFactory instance).
     	 * 

    JNDI names specified here should refer to {@code persistence-unit-ref} - * entries in the Java EE deployment descriptor, matching the target persistence unit. + * entries in the Jakarta EE deployment descriptor, matching the target persistence unit. *

    In case of no unit name specified in the annotation, the specified value * for the {@link #setDefaultPersistenceUnitName default persistence unit} * will be taken (by default, the value mapped to the empty String), * or simply the single persistence unit if there is only one. - *

    This is mainly intended for use in a Java EE environment, with all lookup + *

    This is mainly intended for use in a Jakarta EE environment, with all lookup * driven by the standard JPA annotations, and all EntityManagerFactory * references obtained from JNDI. No separate EntityManagerFactory bean * definitions are necessary in such a scenario. @@ -244,7 +244,7 @@ public class PersistenceAnnotationBeanPostProcessor * EntityManagers built on top of the EntityManagerFactory defined here. * Note that those will be Spring-managed EntityManagers, which implement * transaction synchronization based on Spring's facilities. - * If you prefer the Java EE server's own EntityManager handling, + * If you prefer the Jakarta EE server's own EntityManager handling, * specify corresponding "persistenceContexts"/"extendedPersistenceContexts". */ public void setPersistenceUnits(Map persistenceUnits) { @@ -256,17 +256,17 @@ public class PersistenceAnnotationBeanPostProcessor * as a Map from persistence unit name to persistence context JNDI name * (which needs to resolve to an EntityManager instance). *

    JNDI names specified here should refer to {@code persistence-context-ref} - * entries in the Java EE deployment descriptors, matching the target persistence unit + * entries in the Jakarta EE deployment descriptors, matching the target persistence unit * and being set up with persistence context type {@code Transaction}. *

    In case of no unit name specified in the annotation, the specified value * for the {@link #setDefaultPersistenceUnitName default persistence unit} * will be taken (by default, the value mapped to the empty String), * or simply the single persistence unit if there is only one. - *

    This is mainly intended for use in a Java EE environment, with all + *

    This is mainly intended for use in a Jakarta EE environment, with all * lookup driven by the standard JPA annotations, and all EntityManager * references obtained from JNDI. No separate EntityManagerFactory bean * definitions are necessary in such a scenario, and all EntityManager - * handling is done by the Java EE server itself. + * handling is done by the Jakarta EE server itself. */ public void setPersistenceContexts(Map persistenceContexts) { this.persistenceContexts = persistenceContexts; @@ -277,17 +277,17 @@ public class PersistenceAnnotationBeanPostProcessor * as a Map from persistence unit name to persistence context JNDI name * (which needs to resolve to an EntityManager instance). *

    JNDI names specified here should refer to {@code persistence-context-ref} - * entries in the Java EE deployment descriptors, matching the target persistence unit + * entries in the Jakarta EE deployment descriptors, matching the target persistence unit * and being set up with persistence context type {@code Extended}. *

    In case of no unit name specified in the annotation, the specified value * for the {@link #setDefaultPersistenceUnitName default persistence unit} * will be taken (by default, the value mapped to the empty String), * or simply the single persistence unit if there is only one. - *

    This is mainly intended for use in a Java EE environment, with all + *

    This is mainly intended for use in a Jakarta EE environment, with all * lookup driven by the standard JPA annotations, and all EntityManager * references obtained from JNDI. No separate EntityManagerFactory bean * definitions are necessary in such a scenario, and all EntityManager - * handling is done by the Java EE server itself. + * handling is done by the Jakarta EE server itself. */ public void setExtendedPersistenceContexts(Map extendedPersistenceContexts) { this.extendedPersistenceContexts = extendedPersistenceContexts; diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/support/SharedEntityManagerBean.java b/spring-orm/src/main/java/org/springframework/orm/jpa/support/SharedEntityManagerBean.java index 60c37803cda..a3f465dc68d 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/support/SharedEntityManagerBean.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/support/SharedEntityManagerBean.java @@ -16,8 +16,8 @@ package org.springframework.orm.jpa.support; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.InitializingBean; @@ -28,10 +28,10 @@ import org.springframework.orm.jpa.SharedEntityManagerCreator; import org.springframework.util.Assert; /** - * {@link FactoryBean} that exposes a shared JPA {@link javax.persistence.EntityManager} + * {@link FactoryBean} that exposes a shared JPA {@link jakarta.persistence.EntityManager} * reference for a given EntityManagerFactory. Typically used for an EntityManagerFactory * created by {@link org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean}, - * as direct alternative to a JNDI lookup for a Java EE server's EntityManager reference. + * as direct alternative to a JNDI lookup for a Jakarta EE server's EntityManager reference. * *

    The shared EntityManager will behave just like an EntityManager fetched from an * application server's JNDI environment, as defined by the JPA specification. @@ -65,9 +65,9 @@ public class SharedEntityManagerBean extends EntityManagerFactoryAccessor * Specify the EntityManager interface to expose. *

    Default is the EntityManager interface as defined by the * EntityManagerFactoryInfo, if available. Else, the standard - * {@code javax.persistence.EntityManager} interface will be used. + * {@code jakarta.persistence.EntityManager} interface will be used. * @see org.springframework.orm.jpa.EntityManagerFactoryInfo#getEntityManagerInterface() - * @see javax.persistence.EntityManager + * @see jakarta.persistence.EntityManager */ public void setEntityManagerInterface(Class entityManagerInterface) { Assert.notNull(entityManagerInterface, "'entityManagerInterface' must not be null"); diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/AbstractJpaVendorAdapter.java b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/AbstractJpaVendorAdapter.java index 37203ab9c4b..8e6d0101f56 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/AbstractJpaVendorAdapter.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/AbstractJpaVendorAdapter.java @@ -19,9 +19,9 @@ package org.springframework.orm.jpa.vendor; import java.util.Collections; import java.util.Map; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.spi.PersistenceUnitInfo; +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.spi.PersistenceUnitInfo; import org.springframework.lang.Nullable; import org.springframework.orm.jpa.JpaDialect; @@ -89,7 +89,7 @@ public abstract class AbstractJpaVendorAdapter implements JpaVendorAdapter { * persistence provider. For any more advanced needs, specify the appropriate * vendor-specific settings as "jpaProperties". *

    NOTE: Do not set this flag to 'true' while also setting JPA 2.1's - * {@code javax.persistence.schema-generation.database.action} property. + * {@code jakarta.persistence.schema-generation.database.action} property. * These two schema generation mechanisms - standard JPA versus provider-native - * are mutually exclusive, e.g. with Hibernate 5. * @see org.springframework.orm.jpa.AbstractEntityManagerFactoryBean#setJpaProperties diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/EclipseLinkJpaDialect.java b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/EclipseLinkJpaDialect.java index 30db932f167..7fefab90c24 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/EclipseLinkJpaDialect.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/EclipseLinkJpaDialect.java @@ -19,9 +19,8 @@ package org.springframework.orm.jpa.vendor; import java.sql.Connection; import java.sql.SQLException; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceException; - +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceException; import org.eclipse.persistence.sessions.UnitOfWork; import org.springframework.jdbc.datasource.ConnectionHandle; diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/EclipseLinkJpaVendorAdapter.java b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/EclipseLinkJpaVendorAdapter.java index f3bc463226b..b64258d9dbf 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/EclipseLinkJpaVendorAdapter.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/EclipseLinkJpaVendorAdapter.java @@ -20,9 +20,8 @@ import java.util.HashMap; import java.util.Map; import java.util.logging.Level; -import javax.persistence.EntityManager; -import javax.persistence.spi.PersistenceProvider; - +import jakarta.persistence.EntityManager; +import jakarta.persistence.spi.PersistenceProvider; import org.eclipse.persistence.config.PersistenceUnitProperties; import org.eclipse.persistence.config.TargetDatabase; import org.eclipse.persistence.jpa.JpaEntityManager; diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaDialect.java b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaDialect.java index a6d82beb63c..327f887f08f 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaDialect.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaDialect.java @@ -19,9 +19,8 @@ package org.springframework.orm.jpa.vendor; import java.sql.Connection; import java.sql.SQLException; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceException; - +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceException; import org.hibernate.ConnectionReleaseMode; import org.hibernate.FlushMode; import org.hibernate.HibernateException; diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaSessionFactoryBean.java b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaSessionFactoryBean.java index 090bd23b513..b02e90d04f8 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaSessionFactoryBean.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaSessionFactoryBean.java @@ -18,8 +18,7 @@ package org.springframework.orm.jpa.vendor; import java.lang.reflect.Method; -import javax.persistence.EntityManagerFactory; - +import jakarta.persistence.EntityManagerFactory; import org.hibernate.SessionFactory; import org.springframework.beans.factory.FactoryBean; diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaVendorAdapter.java b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaVendorAdapter.java index ef3324db352..5807200a9c2 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaVendorAdapter.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaVendorAdapter.java @@ -19,12 +19,11 @@ package org.springframework.orm.jpa.vendor; import java.util.HashMap; import java.util.Map; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.spi.PersistenceProvider; -import javax.persistence.spi.PersistenceUnitInfo; -import javax.persistence.spi.PersistenceUnitTransactionType; - +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.spi.PersistenceProvider; +import jakarta.persistence.spi.PersistenceUnitInfo; +import jakarta.persistence.spi.PersistenceUnitTransactionType; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.AvailableSettings; diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/SpringHibernateJpaPersistenceProvider.java b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/SpringHibernateJpaPersistenceProvider.java index 32c6b4ed524..f0e98f85456 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/SpringHibernateJpaPersistenceProvider.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/SpringHibernateJpaPersistenceProvider.java @@ -20,9 +20,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import javax.persistence.EntityManagerFactory; -import javax.persistence.spi.PersistenceUnitInfo; - +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.spi.PersistenceUnitInfo; import org.hibernate.cfg.Configuration; import org.hibernate.jpa.HibernatePersistenceProvider; import org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl; diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractContainerEntityManagerFactoryIntegrationTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractContainerEntityManagerFactoryIntegrationTests.java index 8885d6eb7e0..30218d1dd86 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractContainerEntityManagerFactoryIntegrationTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractContainerEntityManagerFactoryIntegrationTests.java @@ -19,11 +19,10 @@ package org.springframework.orm.jpa; import java.lang.reflect.Proxy; import java.util.List; -import javax.persistence.EntityManager; -import javax.persistence.FlushModeType; -import javax.persistence.NoResultException; -import javax.persistence.Query; - +import jakarta.persistence.EntityManager; +import jakarta.persistence.FlushModeType; +import jakarta.persistence.NoResultException; +import jakarta.persistence.Query; import org.junit.jupiter.api.Test; import org.springframework.core.testfixture.io.SerializationTestUtils; diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryBeanTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryBeanTests.java index 3220e271bf2..084391597c1 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryBeanTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryBeanTests.java @@ -16,10 +16,9 @@ package org.springframework.orm.jpa; -import javax.persistence.EntityManagerFactory; -import javax.persistence.PersistenceException; -import javax.persistence.spi.PersistenceUnitInfo; - +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.PersistenceException; +import jakarta.persistence.spi.PersistenceUnitInfo; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryIntegrationTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryIntegrationTests.java index 56a6d288a5e..5a314c2fa37 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryIntegrationTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryIntegrationTests.java @@ -16,11 +16,11 @@ package org.springframework.orm.jpa; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.Query; import javax.sql.DataSource; +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.Query; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/ApplicationManagedEntityManagerIntegrationTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/ApplicationManagedEntityManagerIntegrationTests.java index 69986ebf539..765d62bfcfb 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/ApplicationManagedEntityManagerIntegrationTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/ApplicationManagedEntityManagerIntegrationTests.java @@ -19,10 +19,9 @@ package org.springframework.orm.jpa; import java.lang.reflect.Proxy; import java.util.List; -import javax.persistence.EntityManager; -import javax.persistence.Query; -import javax.persistence.TransactionRequiredException; - +import jakarta.persistence.EntityManager; +import jakarta.persistence.Query; +import jakarta.persistence.TransactionRequiredException; import org.junit.jupiter.api.Test; import org.springframework.orm.jpa.domain.Person; diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/ContainerManagedEntityManagerIntegrationTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/ContainerManagedEntityManagerIntegrationTests.java index f87101156d2..a61c10cd0a3 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/ContainerManagedEntityManagerIntegrationTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/ContainerManagedEntityManagerIntegrationTests.java @@ -19,11 +19,10 @@ package org.springframework.orm.jpa; import java.lang.reflect.Proxy; import java.util.List; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceException; -import javax.persistence.Query; -import javax.persistence.TransactionRequiredException; - +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceException; +import jakarta.persistence.Query; +import jakarta.persistence.TransactionRequiredException; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/DefaultJpaDialectTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/DefaultJpaDialectTests.java index fedb323fba7..12c75166f6f 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/DefaultJpaDialectTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/DefaultJpaDialectTests.java @@ -16,10 +16,9 @@ package org.springframework.orm.jpa; -import javax.persistence.EntityManager; -import javax.persistence.EntityTransaction; -import javax.persistence.OptimisticLockException; - +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityTransaction; +import jakarta.persistence.OptimisticLockException; import org.junit.jupiter.api.Test; import org.springframework.transaction.TransactionDefinition; diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/EntityManagerFactoryUtilsTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/EntityManagerFactoryUtilsTests.java index 4525931ed53..b651f8eb677 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/EntityManagerFactoryUtilsTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/EntityManagerFactoryUtilsTests.java @@ -16,16 +16,15 @@ package org.springframework.orm.jpa; -import javax.persistence.EntityExistsException; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.EntityNotFoundException; -import javax.persistence.NoResultException; -import javax.persistence.NonUniqueResultException; -import javax.persistence.OptimisticLockException; -import javax.persistence.PersistenceException; -import javax.persistence.TransactionRequiredException; - +import jakarta.persistence.EntityExistsException; +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.EntityNotFoundException; +import jakarta.persistence.NoResultException; +import jakarta.persistence.NonUniqueResultException; +import jakarta.persistence.OptimisticLockException; +import jakarta.persistence.PersistenceException; +import jakarta.persistence.TransactionRequiredException; import org.junit.jupiter.api.Test; import org.springframework.dao.DataAccessException; diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/JpaTransactionManagerTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/JpaTransactionManagerTests.java index 3a53b2cb9a1..881bccca79b 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/JpaTransactionManagerTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/JpaTransactionManagerTests.java @@ -19,11 +19,10 @@ package org.springframework.orm.jpa; import java.util.ArrayList; import java.util.List; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.EntityTransaction; -import javax.persistence.RollbackException; - +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.EntityTransaction; +import jakarta.persistence.RollbackException; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBeanTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBeanTests.java index a2495d2267c..d3741988e25 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBeanTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBeanTests.java @@ -19,16 +19,15 @@ package org.springframework.orm.jpa; import java.util.Map; import java.util.Properties; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.EntityTransaction; -import javax.persistence.OptimisticLockException; -import javax.persistence.PersistenceException; -import javax.persistence.spi.PersistenceProvider; -import javax.persistence.spi.PersistenceUnitInfo; -import javax.persistence.spi.PersistenceUnitTransactionType; -import javax.persistence.spi.ProviderUtil; - +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.EntityTransaction; +import jakarta.persistence.OptimisticLockException; +import jakarta.persistence.PersistenceException; +import jakarta.persistence.spi.PersistenceProvider; +import jakarta.persistence.spi.PersistenceUnitInfo; +import jakarta.persistence.spi.PersistenceUnitTransactionType; +import jakarta.persistence.spi.ProviderUtil; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.support.DefaultListableBeanFactory; diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/LocalEntityManagerFactoryBeanTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/LocalEntityManagerFactoryBeanTests.java index 4d6b8095b95..b3d16aaf009 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/LocalEntityManagerFactoryBeanTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/LocalEntityManagerFactoryBeanTests.java @@ -19,11 +19,10 @@ package org.springframework.orm.jpa; import java.util.Map; import java.util.Properties; -import javax.persistence.EntityManagerFactory; -import javax.persistence.spi.PersistenceProvider; -import javax.persistence.spi.PersistenceUnitInfo; -import javax.persistence.spi.ProviderUtil; - +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.spi.PersistenceProvider; +import jakarta.persistence.spi.PersistenceUnitInfo; +import jakarta.persistence.spi.ProviderUtil; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/SharedEntityManagerCreatorTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/SharedEntityManagerCreatorTests.java index 86df24330b8..f2768122b78 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/SharedEntityManagerCreatorTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/SharedEntityManagerCreatorTests.java @@ -16,13 +16,12 @@ package org.springframework.orm.jpa; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.ParameterMode; -import javax.persistence.Query; -import javax.persistence.StoredProcedureQuery; -import javax.persistence.TransactionRequiredException; - +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.ParameterMode; +import jakarta.persistence.Query; +import jakarta.persistence.StoredProcedureQuery; +import jakarta.persistence.TransactionRequiredException; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.junit.jupiter.MockitoExtension; diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/domain/DriversLicense.java b/spring-orm/src/test/java/org/springframework/orm/jpa/domain/DriversLicense.java index 4bb0082dde4..0a088e3efe7 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/domain/DriversLicense.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/domain/DriversLicense.java @@ -16,9 +16,9 @@ package org.springframework.orm.jpa.domain; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; @Entity @Table(name="DRIVERS_LICENSE") diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/domain/Person.java b/spring-orm/src/test/java/org/springframework/orm/jpa/domain/Person.java index 1586a2c2501..b8c0e564b14 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/domain/Person.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/domain/Person.java @@ -16,16 +16,16 @@ package org.springframework.orm.jpa.domain; -import javax.persistence.Basic; -import javax.persistence.CascadeType; -import javax.persistence.Entity; -import javax.persistence.EntityListeners; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.OneToOne; +import jakarta.persistence.Basic; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Entity; +import jakarta.persistence.EntityListeners; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.OneToOne; import org.springframework.beans.testfixture.beans.TestBean; import org.springframework.context.ApplicationContext; diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/domain/PersonListener.java b/spring-orm/src/test/java/org/springframework/orm/jpa/domain/PersonListener.java index 072e2f9795b..90a6e94e00d 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/domain/PersonListener.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/domain/PersonListener.java @@ -16,7 +16,7 @@ package org.springframework.orm.jpa.domain; -import javax.persistence.PostLoad; +import jakarta.persistence.PostLoad; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/hibernate/HibernateEntityManagerFactoryIntegrationTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/hibernate/HibernateEntityManagerFactoryIntegrationTests.java index 03206c523ce..c8c9e5e2854 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/hibernate/HibernateEntityManagerFactoryIntegrationTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/hibernate/HibernateEntityManagerFactoryIntegrationTests.java @@ -16,8 +16,7 @@ package org.springframework.orm.jpa.hibernate; -import javax.persistence.EntityManager; - +import jakarta.persistence.EntityManager; import org.hibernate.FlushMode; import org.hibernate.Session; import org.hibernate.SessionFactory; diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/hibernate/HibernateMultiEntityManagerFactoryIntegrationTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/hibernate/HibernateMultiEntityManagerFactoryIntegrationTests.java index 5653474b60d..2a959616964 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/hibernate/HibernateMultiEntityManagerFactoryIntegrationTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/hibernate/HibernateMultiEntityManagerFactoryIntegrationTests.java @@ -16,9 +16,8 @@ package org.springframework.orm.jpa.hibernate; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; - +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/hibernate/HibernateNativeEntityManagerFactorySpringBeanContainerIntegrationTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/hibernate/HibernateNativeEntityManagerFactorySpringBeanContainerIntegrationTests.java index 5eb4055b417..5e5d848e1af 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/hibernate/HibernateNativeEntityManagerFactorySpringBeanContainerIntegrationTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/hibernate/HibernateNativeEntityManagerFactorySpringBeanContainerIntegrationTests.java @@ -16,8 +16,7 @@ package org.springframework.orm.jpa.hibernate; -import javax.persistence.AttributeConverter; - +import jakarta.persistence.AttributeConverter; import org.hibernate.SessionFactory; import org.hibernate.resource.beans.container.spi.BeanContainer; import org.hibernate.resource.beans.container.spi.ContainedBean; diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/persistenceunit/PersistenceXmlParsingTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/persistenceunit/PersistenceXmlParsingTests.java index d7a78f9e87b..253c3a2f247 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/persistenceunit/PersistenceXmlParsingTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/persistenceunit/PersistenceXmlParsingTests.java @@ -21,10 +21,10 @@ import java.util.HashMap; import java.util.Map; import java.util.Properties; -import javax.persistence.spi.PersistenceUnitInfo; -import javax.persistence.spi.PersistenceUnitTransactionType; import javax.sql.DataSource; +import jakarta.persistence.spi.PersistenceUnitInfo; +import jakarta.persistence.spi.PersistenceUnitTransactionType; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewTests.java index 70360c26dea..1851fdfb622 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewTests.java @@ -21,12 +21,11 @@ import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.servlet.AsyncEvent; -import javax.servlet.AsyncListener; -import javax.servlet.FilterChain; - +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; +import jakarta.servlet.AsyncEvent; +import jakarta.servlet.AsyncListener; +import jakarta.servlet.FilterChain; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceContextTransactionTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceContextTransactionTests.java index 9d5fc76147a..82e22136e0b 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceContextTransactionTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceContextTransactionTests.java @@ -16,13 +16,12 @@ package org.springframework.orm.jpa.support; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.EntityTransaction; -import javax.persistence.PersistenceContext; -import javax.persistence.PersistenceContextType; -import javax.persistence.SynchronizationType; - +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.EntityTransaction; +import jakarta.persistence.PersistenceContext; +import jakarta.persistence.PersistenceContextType; +import jakarta.persistence.SynchronizationType; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceInjectionTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceInjectionTests.java index 919f2fb1259..c38924840ab 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceInjectionTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceInjectionTests.java @@ -24,13 +24,12 @@ import java.util.HashMap; import java.util.Map; import java.util.Properties; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.PersistenceContext; -import javax.persistence.PersistenceContextType; -import javax.persistence.PersistenceProperty; -import javax.persistence.PersistenceUnit; - +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.PersistenceContext; +import jakarta.persistence.PersistenceContextType; +import jakarta.persistence.PersistenceProperty; +import jakarta.persistence.PersistenceUnit; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.FactoryBean; diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/support/SharedEntityManagerFactoryTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/support/SharedEntityManagerFactoryTests.java index 4e344c18300..93f53e1e511 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/support/SharedEntityManagerFactoryTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/support/SharedEntityManagerFactoryTests.java @@ -16,9 +16,8 @@ package org.springframework.orm.jpa.support; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; - +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; import org.junit.jupiter.api.Test; import org.springframework.orm.jpa.EntityManagerHolder; diff --git a/spring-orm/src/test/resources/org/springframework/orm/jpa/domain/spring.components b/spring-orm/src/test/resources/org/springframework/orm/jpa/domain/spring.components index 4b6de536dfa..f42629baebf 100644 --- a/spring-orm/src/test/resources/org/springframework/orm/jpa/domain/spring.components +++ b/spring-orm/src/test/resources/org/springframework/orm/jpa/domain/spring.components @@ -1,2 +1,2 @@ -org.springframework.orm.jpa.domain.Person=javax.persistence.Entity -org.springframework.orm.jpa.domain.DriversLicense=javax.persistence.Entity \ No newline at end of file +org.springframework.orm.jpa.domain.Person=jakarta.persistence.Entity +org.springframework.orm.jpa.domain.DriversLicense=jakarta.persistence.Entity \ No newline at end of file diff --git a/spring-orm/src/test/resources/org/springframework/orm/jpa/hibernate/hibernate-manager-native.xml b/spring-orm/src/test/resources/org/springframework/orm/jpa/hibernate/hibernate-manager-native.xml index 95572a9f759..90c0d836c1d 100644 --- a/spring-orm/src/test/resources/org/springframework/orm/jpa/hibernate/hibernate-manager-native.xml +++ b/spring-orm/src/test/resources/org/springframework/orm/jpa/hibernate/hibernate-manager-native.xml @@ -28,6 +28,6 @@ - + diff --git a/spring-oxm/spring-oxm.gradle b/spring-oxm/spring-oxm.gradle index f47726a8bd5..bce9c151769 100644 --- a/spring-oxm/spring-oxm.gradle +++ b/spring-oxm/spring-oxm.gradle @@ -4,17 +4,8 @@ plugins { description = "Spring Object/XML Marshalling" -configurations { - jibx -} - -dependencies { - jibx "org.jibx:jibx-bind:1.3.3" - jibx "org.apache.bcel:bcel:6.0" -} - xjc { - xjcVersion = '2.2' + xjcVersion = '3.0' } sourceSets { @@ -26,10 +17,9 @@ sourceSets { dependencies { api(project(":spring-beans")) api(project(":spring-core")) - optional("javax.xml.bind:jaxb-api") - optional("javax.activation:javax.activation-api") + optional("jakarta.xml.bind:jakarta.xml.bind-api") + optional("jakarta.activation:jakarta.activation-api") optional("com.thoughtworks.xstream:xstream") - optional("org.jibx:jibx-run") testImplementation(project(":spring-context")) testImplementation(testFixtures(project(":spring-core"))) testImplementation("org.ogce:xpp3") @@ -42,25 +32,3 @@ dependencies { testRuntimeOnly("com.sun.xml.bind:jaxb-core") testRuntimeOnly("com.sun.xml.bind:jaxb-impl") } - -// JiBX compiler is currently not compatible with JDK 9+. -// If testToolchain has been set, we assume the custom JDK version is 9+. -if ((JavaVersion.current() == JavaVersion.VERSION_1_8) && !project.hasProperty("testToolchain")) { - compileTestJava { - def bindingXml = "${projectDir}/src/test/resources/org/springframework/oxm/jibx/binding.xml" - - doLast() { - project.ant { - taskdef(name: "jibx", - classname: "org.jibx.binding.ant.CompileTask", - classpath: configurations.jibx.asPath) - - jibx(verbose: false, load: true, binding: bindingXml) { - classpathset(dir: sourceSets.test.java.classesDirectory.get().getAsFile()) { - include(name: "**/jibx/**/*") - } - } - } - } - } -} diff --git a/spring-oxm/src/main/java/org/springframework/oxm/jaxb/ClassPathJaxb2TypeScanner.java b/spring-oxm/src/main/java/org/springframework/oxm/jaxb/ClassPathJaxb2TypeScanner.java index 520d2a627d7..b989541fd35 100644 --- a/spring-oxm/src/main/java/org/springframework/oxm/jaxb/ClassPathJaxb2TypeScanner.java +++ b/spring-oxm/src/main/java/org/springframework/oxm/jaxb/ClassPathJaxb2TypeScanner.java @@ -20,11 +20,11 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; -import javax.xml.bind.annotation.XmlEnum; -import javax.xml.bind.annotation.XmlRegistry; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlSeeAlso; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlEnum; +import jakarta.xml.bind.annotation.XmlRegistry; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlSeeAlso; +import jakarta.xml.bind.annotation.XmlType; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; diff --git a/spring-oxm/src/main/java/org/springframework/oxm/jaxb/Jaxb2Marshaller.java b/spring-oxm/src/main/java/org/springframework/oxm/jaxb/Jaxb2Marshaller.java index 176ccc83f8b..7267f311cc0 100644 --- a/spring-oxm/src/main/java/org/springframework/oxm/jaxb/Jaxb2Marshaller.java +++ b/spring-oxm/src/main/java/org/springframework/oxm/jaxb/Jaxb2Marshaller.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -38,22 +38,7 @@ import java.util.Date; import java.util.Map; import java.util.UUID; -import javax.activation.DataHandler; -import javax.activation.DataSource; import javax.xml.XMLConstants; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBElement; -import javax.xml.bind.JAXBException; -import javax.xml.bind.MarshalException; -import javax.xml.bind.Marshaller; -import javax.xml.bind.UnmarshalException; -import javax.xml.bind.Unmarshaller; -import javax.xml.bind.ValidationEventHandler; -import javax.xml.bind.ValidationException; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlAdapter; -import javax.xml.bind.attachment.AttachmentMarshaller; -import javax.xml.bind.attachment.AttachmentUnmarshaller; import javax.xml.datatype.Duration; import javax.xml.datatype.XMLGregorianCalendar; import javax.xml.namespace.QName; @@ -70,6 +55,21 @@ import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; +import jakarta.activation.DataHandler; +import jakarta.activation.DataSource; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBElement; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.MarshalException; +import jakarta.xml.bind.Marshaller; +import jakarta.xml.bind.UnmarshalException; +import jakarta.xml.bind.Unmarshaller; +import jakarta.xml.bind.ValidationEventHandler; +import jakarta.xml.bind.ValidationException; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.adapters.XmlAdapter; +import jakarta.xml.bind.attachment.AttachmentMarshaller; +import jakarta.xml.bind.attachment.AttachmentUnmarshaller; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.w3c.dom.ls.LSResourceResolver; @@ -275,11 +275,11 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, Generi *

    These properties will be set on the underlying JAXB {@code Marshaller}, * and allow for features such as indentation. * @param properties the properties - * @see javax.xml.bind.Marshaller#setProperty(String, Object) - * @see javax.xml.bind.Marshaller#JAXB_ENCODING - * @see javax.xml.bind.Marshaller#JAXB_FORMATTED_OUTPUT - * @see javax.xml.bind.Marshaller#JAXB_NO_NAMESPACE_SCHEMA_LOCATION - * @see javax.xml.bind.Marshaller#JAXB_SCHEMA_LOCATION + * @see jakarta.xml.bind.Marshaller#setProperty(String, Object) + * @see jakarta.xml.bind.Marshaller#JAXB_ENCODING + * @see jakarta.xml.bind.Marshaller#JAXB_FORMATTED_OUTPUT + * @see jakarta.xml.bind.Marshaller#JAXB_NO_NAMESPACE_SCHEMA_LOCATION + * @see jakarta.xml.bind.Marshaller#JAXB_SCHEMA_LOCATION */ public void setMarshallerProperties(Map properties) { this.marshallerProperties = properties; @@ -289,7 +289,7 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, Generi * Set the JAXB {@code Unmarshaller} properties. *

    These properties will be set on the underlying JAXB {@code Unmarshaller}. * @param properties the properties - * @see javax.xml.bind.Unmarshaller#setProperty(String, Object) + * @see jakarta.xml.bind.Unmarshaller#setProperty(String, Object) */ public void setUnmarshallerProperties(Map properties) { this.unmarshallerProperties = properties; @@ -409,7 +409,7 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, Generi /** * Specify a JAXB mapped class for partial unmarshalling. - * @see javax.xml.bind.Unmarshaller#unmarshal(javax.xml.transform.Source, Class) + * @see jakarta.xml.bind.Unmarshaller#unmarshal(javax.xml.transform.Source, Class) */ public void setMappedClass(Class mappedClass) { this.mappedClass = mappedClass; @@ -574,7 +574,7 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, Generi } } - @SuppressWarnings("deprecation") // on JDK 9 + @SuppressWarnings("deprecation") private Schema loadSchema(Resource[] resources, String schemaLanguage) throws IOException, SAXException { if (logger.isDebugEnabled()) { logger.debug("Setting validation schema to " + @@ -857,7 +857,7 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, Generi } } - @SuppressWarnings("deprecation") // on JDK 9 + @SuppressWarnings("deprecation") private Source processSource(Source source) { if (StaxUtils.isStaxSource(source) || source instanceof DOMSource) { return source; diff --git a/spring-oxm/src/main/java/org/springframework/oxm/mime/MimeContainer.java b/spring-oxm/src/main/java/org/springframework/oxm/mime/MimeContainer.java index 03545723951..11f24456d0a 100644 --- a/spring-oxm/src/main/java/org/springframework/oxm/mime/MimeContainer.java +++ b/spring-oxm/src/main/java/org/springframework/oxm/mime/MimeContainer.java @@ -16,7 +16,7 @@ package org.springframework.oxm.mime; -import javax.activation.DataHandler; +import jakarta.activation.DataHandler; import org.springframework.lang.Nullable; diff --git a/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Airplane.java b/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Airplane.java index e9436034e81..503fb73315b 100644 --- a/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Airplane.java +++ b/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Airplane.java @@ -16,7 +16,7 @@ package org.springframework.oxm.jaxb; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Airplane { diff --git a/spring-oxm/src/test/java/org/springframework/oxm/jaxb/BinaryObject.java b/spring-oxm/src/test/java/org/springframework/oxm/jaxb/BinaryObject.java index 4457329e31b..b76441b806a 100644 --- a/spring-oxm/src/test/java/org/springframework/oxm/jaxb/BinaryObject.java +++ b/spring-oxm/src/test/java/org/springframework/oxm/jaxb/BinaryObject.java @@ -16,10 +16,10 @@ package org.springframework.oxm.jaxb; -import javax.activation.DataHandler; -import javax.xml.bind.annotation.XmlAttachmentRef; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.activation.DataHandler; +import jakarta.xml.bind.annotation.XmlAttachmentRef; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement(namespace = "http://springframework.org/spring-ws") public class BinaryObject { diff --git a/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Jaxb2MarshallerTests.java b/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Jaxb2MarshallerTests.java index a0e88fef268..07453a56864 100644 --- a/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Jaxb2MarshallerTests.java +++ b/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Jaxb2MarshallerTests.java @@ -23,11 +23,6 @@ import java.lang.reflect.Method; import java.lang.reflect.Type; import java.util.Collections; -import javax.activation.DataHandler; -import javax.activation.FileDataSource; -import javax.xml.bind.JAXBElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; import javax.xml.namespace.QName; import javax.xml.transform.Result; import javax.xml.transform.sax.SAXResult; @@ -35,6 +30,11 @@ import javax.xml.transform.sax.SAXSource; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; +import jakarta.activation.DataHandler; +import jakarta.activation.FileDataSource; +import jakarta.xml.bind.JAXBElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; import org.mockito.InOrder; @@ -141,7 +141,7 @@ class Jaxb2MarshallerTests extends AbstractMarshallerTests { Jaxb2Marshaller marshaller = new Jaxb2Marshaller(); marshaller.setContextPath(CONTEXT_PATH); marshaller.setMarshallerProperties( - Collections.singletonMap(javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE)); + Collections.singletonMap(jakarta.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE)); marshaller.afterPropertiesSet(); } @@ -307,10 +307,10 @@ class Jaxb2MarshallerTests extends AbstractMarshallerTests { @Test // SPR-10806 void unmarshalStreamSourceWithXmlOptions() throws Exception { - final javax.xml.bind.Unmarshaller unmarshaller = mock(javax.xml.bind.Unmarshaller.class); + final jakarta.xml.bind.Unmarshaller unmarshaller = mock(jakarta.xml.bind.Unmarshaller.class); Jaxb2Marshaller marshaller = new Jaxb2Marshaller() { @Override - public javax.xml.bind.Unmarshaller createUnmarshaller() { + public jakarta.xml.bind.Unmarshaller createUnmarshaller() { return unmarshaller; } }; @@ -341,10 +341,10 @@ class Jaxb2MarshallerTests extends AbstractMarshallerTests { @Test // SPR-10806 void unmarshalSaxSourceWithXmlOptions() throws Exception { - final javax.xml.bind.Unmarshaller unmarshaller = mock(javax.xml.bind.Unmarshaller.class); + final jakarta.xml.bind.Unmarshaller unmarshaller = mock(jakarta.xml.bind.Unmarshaller.class); Jaxb2Marshaller marshaller = new Jaxb2Marshaller() { @Override - public javax.xml.bind.Unmarshaller createUnmarshaller() { + public jakarta.xml.bind.Unmarshaller createUnmarshaller() { return unmarshaller; } }; diff --git a/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Jaxb2UnmarshallerTests.java b/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Jaxb2UnmarshallerTests.java index 4a4b9c9998c..0b9ac09b56f 100644 --- a/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Jaxb2UnmarshallerTests.java +++ b/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Jaxb2UnmarshallerTests.java @@ -20,14 +20,14 @@ import java.io.File; import java.io.IOException; import java.io.StringReader; -import javax.activation.DataHandler; -import javax.activation.FileDataSource; -import javax.xml.bind.JAXBElement; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamReader; import javax.xml.transform.Source; import javax.xml.transform.stream.StreamSource; +import jakarta.activation.DataHandler; +import jakarta.activation.FileDataSource; +import jakarta.xml.bind.JAXBElement; import org.junit.jupiter.api.Test; import org.springframework.core.io.ClassPathResource; diff --git a/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Primitives.java b/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Primitives.java index 2f61fc4b669..d02de24e808 100644 --- a/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Primitives.java +++ b/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Primitives.java @@ -16,9 +16,10 @@ package org.springframework.oxm.jaxb; -import javax.xml.bind.JAXBElement; import javax.xml.namespace.QName; +import jakarta.xml.bind.JAXBElement; + /** * Used by {@link org.springframework.oxm.jaxb.Jaxb2MarshallerTests}. * diff --git a/spring-oxm/src/test/java/org/springframework/oxm/jaxb/StandardClasses.java b/spring-oxm/src/test/java/org/springframework/oxm/jaxb/StandardClasses.java index c5e3c2ae7ed..14adba20759 100644 --- a/spring-oxm/src/test/java/org/springframework/oxm/jaxb/StandardClasses.java +++ b/spring-oxm/src/test/java/org/springframework/oxm/jaxb/StandardClasses.java @@ -26,17 +26,18 @@ import java.util.Date; import java.util.GregorianCalendar; import java.util.UUID; -import javax.activation.DataHandler; -import javax.activation.DataSource; -import javax.activation.URLDataSource; import javax.imageio.ImageIO; -import javax.xml.bind.JAXBElement; import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.Duration; import javax.xml.datatype.XMLGregorianCalendar; import javax.xml.namespace.QName; +import jakarta.activation.DataHandler; +import jakarta.activation.DataSource; +import jakarta.activation.URLDataSource; +import jakarta.xml.bind.JAXBElement; + /** * Used by {@link org.springframework.oxm.jaxb.Jaxb2MarshallerTests}. * @@ -58,7 +59,7 @@ public class StandardClasses { javax.xml.datatype.Duration java.lang.Object java.awt.Image - javax.activation.DataHandler + jakarta.activation.DataHandler javax.xml.transform.Source java.util.UUID */ diff --git a/spring-oxm/src/test/java/org/springframework/oxm/jaxb/XmlRegObjectFactory.java b/spring-oxm/src/test/java/org/springframework/oxm/jaxb/XmlRegObjectFactory.java index 458385eda86..547367c856d 100644 --- a/spring-oxm/src/test/java/org/springframework/oxm/jaxb/XmlRegObjectFactory.java +++ b/spring-oxm/src/test/java/org/springframework/oxm/jaxb/XmlRegObjectFactory.java @@ -16,11 +16,12 @@ package org.springframework.oxm.jaxb; -import javax.xml.bind.JAXBElement; -import javax.xml.bind.annotation.XmlElementDecl; -import javax.xml.bind.annotation.XmlRegistry; import javax.xml.namespace.QName; +import jakarta.xml.bind.JAXBElement; +import jakarta.xml.bind.annotation.XmlElementDecl; +import jakarta.xml.bind.annotation.XmlRegistry; + @XmlRegistry public class XmlRegObjectFactory { diff --git a/spring-test/spring-test.gradle b/spring-test/spring-test.gradle index 365ce7d316f..8d0e2076243 100644 --- a/spring-test/spring-test.gradle +++ b/spring-test/spring-test.gradle @@ -14,21 +14,21 @@ dependencies { optional(project(":spring-webflux")) optional(project(":spring-webmvc")) optional(project(":spring-websocket")) - optional("javax.activation:javax.activation-api") - optional("javax.el:javax.el-api") - optional("javax.inject:javax.inject") - optional("javax.servlet:javax.servlet-api") - optional("javax.servlet.jsp:javax.servlet.jsp-api") - optional("javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api") - optional("javax.xml.bind:jaxb-api") - optional("javax.websocket:javax.websocket-api") + optional("jakarta.activation:jakarta.activation-api") + optional("jakarta.el:jakarta.el-api") + optional("jakarta.inject:jakarta.inject-api") + optional("jakarta.servlet:jakarta.servlet-api") + optional("jakarta.servlet.jsp:jakarta.servlet.jsp-api") + optional("jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api") + optional("jakarta.xml.bind:jakarta.xml.bind-api") + optional("jakarta.websocket:jakarta.websocket-api") optional("junit:junit") + optional("org.apache.tomcat.embed:tomcat-embed-core") optional("org.junit.jupiter:junit-jupiter-api") optional("org.testng:testng") optional("org.aspectj:aspectjweaver") optional("org.codehaus.groovy:groovy") optional("org.hamcrest:hamcrest") - optional("org.apache.taglibs:taglibs-standard-jstlel") optional("net.sourceforge.htmlunit:htmlunit") optional("org.seleniumhq.selenium:htmlunit-driver") { exclude group: "net.bytebuddy", module: "byte-buddy" @@ -39,7 +39,6 @@ dependencies { optional("org.xmlunit:xmlunit-matchers") optional("org.skyscreamer:jsonassert") optional("com.jayway.jsonpath:json-path") - optional("commons-fileupload:commons-fileupload") optional("org.jetbrains.kotlin:kotlin-reflect") optional("org.jetbrains.kotlin:kotlin-stdlib") optional("io.projectreactor:reactor-test") @@ -52,14 +51,14 @@ dependencies { testImplementation(testFixtures(project(":spring-core"))) testImplementation(testFixtures(project(":spring-tx"))) testImplementation(testFixtures(project(":spring-web"))) - testImplementation("javax.annotation:javax.annotation-api") + testImplementation("jakarta.annotation:jakarta.annotation-api") testImplementation("javax.cache:cache-api") - testImplementation("javax.ejb:javax.ejb-api") - testImplementation("javax.interceptor:javax.interceptor-api") - testImplementation("javax.mail:javax.mail-api") - testImplementation("org.hibernate:hibernate-core") + testImplementation("jakarta.ejb:jakarta.ejb-api") + testImplementation("jakarta.interceptor:jakarta.interceptor-api") + testImplementation("jakarta.mail:jakarta.mail-api") + testImplementation("org.hibernate:hibernate-core-jakarta") testImplementation("org.hibernate:hibernate-validator") - testImplementation("javax.validation:validation-api") + testImplementation("jakarta.validation:jakarta.validation-api") testImplementation("org.junit.platform:junit-platform-runner") { exclude group: "junit", module: "junit" } @@ -67,9 +66,6 @@ dependencies { testImplementation("com.fasterxml.jackson.core:jackson-databind") testImplementation("com.thoughtworks.xstream:xstream") testImplementation("com.rometools:rome") - testImplementation("org.apache.tiles:tiles-api") - testImplementation("org.apache.tiles:tiles-core") - testImplementation("org.apache.tiles:tiles-servlet") testImplementation("org.hsqldb:hsqldb") testImplementation("org.apache.httpcomponents:httpclient") testImplementation("io.projectreactor.netty:reactor-netty-http") @@ -77,7 +73,7 @@ dependencies { testRuntimeOnly("org.junit.vintage:junit-vintage-engine") { exclude group: "junit", module: "junit" } - testRuntimeOnly("org.glassfish:javax.el") + testRuntimeOnly("org.glassfish:jakarta.el") testRuntimeOnly("com.sun.xml.bind:jaxb-core") testRuntimeOnly("com.sun.xml.bind:jaxb-impl") } diff --git a/spring-test/src/main/java/org/springframework/mock/jndi/SimpleNamingContextBuilder.java b/spring-test/src/main/java/org/springframework/mock/jndi/SimpleNamingContextBuilder.java index 2d6110b6926..802dcaf32c4 100644 --- a/spring-test/src/main/java/org/springframework/mock/jndi/SimpleNamingContextBuilder.java +++ b/spring-test/src/main/java/org/springframework/mock/jndi/SimpleNamingContextBuilder.java @@ -39,7 +39,7 @@ import org.springframework.util.ReflectionUtils; * configure JNDI appropriately, so that {@code new InitialContext()} * will expose the required objects. Also usable for standalone applications, * e.g. for binding a JDBC DataSource to a well-known JNDI location, to be - * able to use traditional Java EE data access code outside of a Java EE + * able to use traditional Jakarta EE data access code outside of a Jakarta EE * container. * *

    There are various choices for DataSource implementations: diff --git a/spring-test/src/main/java/org/springframework/mock/jndi/package-info.java b/spring-test/src/main/java/org/springframework/mock/jndi/package-info.java index fc31fe57512..b2ec4eaacaa 100644 --- a/spring-test/src/main/java/org/springframework/mock/jndi/package-info.java +++ b/spring-test/src/main/java/org/springframework/mock/jndi/package-info.java @@ -7,7 +7,7 @@ * *

    Useful for setting up a simple JNDI environment for test suites * or stand-alone applications. If, for example, JDBC DataSources get bound to the - * same JNDI names as within a Java EE container, both application code and + * same JNDI names as within a Jakarta EE container, both application code and * configuration can be reused without changes. */ @NonNullApi diff --git a/spring-test/src/main/java/org/springframework/mock/web/DelegatingServletInputStream.java b/spring-test/src/main/java/org/springframework/mock/web/DelegatingServletInputStream.java index 4b69e164915..1be569c2217 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/DelegatingServletInputStream.java +++ b/spring-test/src/main/java/org/springframework/mock/web/DelegatingServletInputStream.java @@ -19,13 +19,13 @@ package org.springframework.mock.web; import java.io.IOException; import java.io.InputStream; -import javax.servlet.ReadListener; -import javax.servlet.ServletInputStream; +import jakarta.servlet.ReadListener; +import jakarta.servlet.ServletInputStream; import org.springframework.util.Assert; /** - * Delegating implementation of {@link javax.servlet.ServletInputStream}. + * Delegating implementation of {@link jakarta.servlet.ServletInputStream}. * *

    Used by {@link MockHttpServletRequest}; typically not directly * used for testing application controllers. diff --git a/spring-test/src/main/java/org/springframework/mock/web/DelegatingServletOutputStream.java b/spring-test/src/main/java/org/springframework/mock/web/DelegatingServletOutputStream.java index 9fa54fed482..41ff6b15b7d 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/DelegatingServletOutputStream.java +++ b/spring-test/src/main/java/org/springframework/mock/web/DelegatingServletOutputStream.java @@ -19,13 +19,13 @@ package org.springframework.mock.web; import java.io.IOException; import java.io.OutputStream; -import javax.servlet.ServletOutputStream; -import javax.servlet.WriteListener; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.WriteListener; import org.springframework.util.Assert; /** - * Delegating implementation of {@link javax.servlet.ServletOutputStream}. + * Delegating implementation of {@link jakarta.servlet.ServletOutputStream}. * *

    Used by {@link MockHttpServletResponse}; typically not directly * used for testing application controllers. diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockAsyncContext.java b/spring-test/src/main/java/org/springframework/mock/web/MockAsyncContext.java index f3c6fcc1ad6..982d4e3b261 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockAsyncContext.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockAsyncContext.java @@ -20,15 +20,15 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; -import javax.servlet.AsyncContext; -import javax.servlet.AsyncEvent; -import javax.servlet.AsyncListener; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.AsyncContext; +import jakarta.servlet.AsyncEvent; +import jakarta.servlet.AsyncListener; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.beans.BeanUtils; import org.springframework.lang.Nullable; diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockBodyContent.java b/spring-test/src/main/java/org/springframework/mock/web/MockBodyContent.java index a8c31873b04..85ee83f89fe 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockBodyContent.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockBodyContent.java @@ -21,14 +21,14 @@ import java.io.Reader; import java.io.StringReader; import java.io.Writer; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.jsp.JspWriter; -import javax.servlet.jsp.tagext.BodyContent; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.jsp.JspWriter; +import jakarta.servlet.jsp.tagext.BodyContent; import org.springframework.lang.Nullable; /** - * Mock implementation of the {@link javax.servlet.jsp.tagext.BodyContent} class. + * Mock implementation of the {@link jakarta.servlet.jsp.tagext.BodyContent} class. * Only necessary for testing applications when testing custom JSP tags. * * @author Juergen Hoeller diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockCookie.java b/spring-test/src/main/java/org/springframework/mock/web/MockCookie.java index 372898cd5a3..a00d67e335d 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockCookie.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockCookie.java @@ -20,7 +20,7 @@ import java.time.DateTimeException; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; -import javax.servlet.http.Cookie; +import jakarta.servlet.http.Cookie; import org.springframework.core.style.ToStringCreator; import org.springframework.lang.Nullable; diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockExpressionEvaluator.java b/spring-test/src/main/java/org/springframework/mock/web/MockExpressionEvaluator.java deleted file mode 100644 index bfd549ac5dc..00000000000 --- a/spring-test/src/main/java/org/springframework/mock/web/MockExpressionEvaluator.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright 2002-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.mock.web; - -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.PageContext; - -import org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager; - -/** - * Mock implementation of the JSP 2.0 {@link javax.servlet.jsp.el.ExpressionEvaluator} - * interface, delegating to the Apache JSTL {@link ExpressionEvaluatorManager}. - * Only necessary for testing applications when testing custom JSP tags. - * - *

    Note that the Apache JSTL implementation (jstl.jar, standard.jar) has to be - * available on the classpath to use this expression evaluator. - * - * @author Juergen Hoeller - * @since 1.1.5 - * @see org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager - */ -@SuppressWarnings("deprecation") -public class MockExpressionEvaluator extends javax.servlet.jsp.el.ExpressionEvaluator { - - private final PageContext pageContext; - - - /** - * Create a new MockExpressionEvaluator for the given PageContext. - * @param pageContext the JSP PageContext to run in - */ - public MockExpressionEvaluator(PageContext pageContext) { - this.pageContext = pageContext; - } - - - @Override - @SuppressWarnings("rawtypes") - public javax.servlet.jsp.el.Expression parseExpression(final String expression, final Class expectedType, - final javax.servlet.jsp.el.FunctionMapper functionMapper) throws javax.servlet.jsp.el.ELException { - - return new javax.servlet.jsp.el.Expression() { - @Override - public Object evaluate(javax.servlet.jsp.el.VariableResolver variableResolver) throws javax.servlet.jsp.el.ELException { - return doEvaluate(expression, expectedType, functionMapper); - } - }; - } - - @Override - @SuppressWarnings("rawtypes") - public Object evaluate(String expression, Class expectedType, javax.servlet.jsp.el.VariableResolver variableResolver, - javax.servlet.jsp.el.FunctionMapper functionMapper) throws javax.servlet.jsp.el.ELException { - - return doEvaluate(expression, expectedType, functionMapper); - } - - @SuppressWarnings("rawtypes") - protected Object doEvaluate(String expression, Class expectedType, javax.servlet.jsp.el.FunctionMapper functionMapper) - throws javax.servlet.jsp.el.ELException { - - try { - return ExpressionEvaluatorManager.evaluate("JSP EL expression", expression, expectedType, this.pageContext); - } - catch (JspException ex) { - throw new javax.servlet.jsp.el.ELException("Parsing of JSP EL expression \"" + expression + "\" failed", ex); - } - } - -} diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockFilterChain.java b/spring-test/src/main/java/org/springframework/mock/web/MockFilterChain.java index 0f60d941476..39b874b1664 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockFilterChain.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockFilterChain.java @@ -22,20 +22,20 @@ import java.util.Collections; import java.util.Iterator; import java.util.List; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.Servlet; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.Servlet; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.ObjectUtils; /** - * Mock implementation of the {@link javax.servlet.FilterChain} interface. + * Mock implementation of the {@link jakarta.servlet.FilterChain} interface. * *

    A {@link MockFilterChain} can be configured with one or more filters and a * Servlet to invoke. The first time the chain is called, it invokes all filters diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockFilterConfig.java b/spring-test/src/main/java/org/springframework/mock/web/MockFilterConfig.java index 172dd646873..4755b516835 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockFilterConfig.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockFilterConfig.java @@ -21,17 +21,17 @@ import java.util.Enumeration; import java.util.LinkedHashMap; import java.util.Map; -import javax.servlet.FilterConfig; -import javax.servlet.ServletContext; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletContext; import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** - * Mock implementation of the {@link javax.servlet.FilterConfig} interface. + * Mock implementation of the {@link jakarta.servlet.FilterConfig} interface. * *

    Used for testing the web framework; also useful for testing - * custom {@link javax.servlet.Filter} implementations. + * custom {@link jakarta.servlet.Filter} implementations. * * @author Juergen Hoeller * @since 1.0.2 diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletMapping.java b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletMapping.java index 62664d5dac3..17615a3bdcf 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletMapping.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletMapping.java @@ -16,8 +16,8 @@ package org.springframework.mock.web; -import javax.servlet.http.HttpServletMapping; -import javax.servlet.http.MappingMatch; +import jakarta.servlet.http.HttpServletMapping; +import jakarta.servlet.http.MappingMatch; import org.springframework.lang.Nullable; diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java index e12c278baca..1a3e7102e9e 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java @@ -43,20 +43,20 @@ import java.util.Set; import java.util.TimeZone; import java.util.stream.Collectors; -import javax.servlet.AsyncContext; -import javax.servlet.DispatcherType; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletInputStream; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; -import javax.servlet.http.HttpUpgradeHandler; -import javax.servlet.http.Part; +import jakarta.servlet.AsyncContext; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.RequestDispatcher; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletInputStream; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; +import jakarta.servlet.http.HttpUpgradeHandler; +import jakarta.servlet.http.Part; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; @@ -71,7 +71,7 @@ import org.springframework.util.StreamUtils; import org.springframework.util.StringUtils; /** - * Mock implementation of the {@link javax.servlet.http.HttpServletRequest} interface. + * Mock implementation of the {@link jakarta.servlet.http.HttpServletRequest} interface. * *

    The default, preferred {@link Locale} for the server mocked by this request * is {@link Locale#ENGLISH}. This value can be changed via {@link #addPreferredLocale} @@ -820,7 +820,7 @@ public class MockHttpServletRequest implements HttpServletRequest { *

    In contrast to the Servlet specification, this mock implementation * does not take into consideration any locales * specified via the {@code Accept-Language} header. - * @see javax.servlet.ServletRequest#getLocale() + * @see jakarta.servlet.ServletRequest#getLocale() * @see #addPreferredLocale(Locale) * @see #setPreferredLocales(List) */ @@ -838,7 +838,7 @@ public class MockHttpServletRequest implements HttpServletRequest { *

    In contrast to the Servlet specification, this mock implementation * does not take into consideration any locales * specified via the {@code Accept-Language} header. - * @see javax.servlet.ServletRequest#getLocales() + * @see jakarta.servlet.ServletRequest#getLocales() * @see #addPreferredLocale(Locale) * @see #setPreferredLocales(List) */ @@ -861,7 +861,7 @@ public class MockHttpServletRequest implements HttpServletRequest { /** * Return {@code true} if the {@link #setSecure secure} flag has been set * to {@code true} or if the {@link #getScheme scheme} is {@code https}. - * @see javax.servlet.ServletRequest#isSecure() + * @see jakarta.servlet.ServletRequest#isSecure() */ @Override public boolean isSecure() { diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java index a1b3eca3b08..df02fa4deba 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java @@ -38,9 +38,9 @@ import java.util.Locale; import java.util.Map; import java.util.TimeZone; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; @@ -51,7 +51,7 @@ import org.springframework.util.StringUtils; import org.springframework.web.util.WebUtils; /** - * Mock implementation of the {@link javax.servlet.http.HttpServletResponse} interface. + * Mock implementation of the {@link jakarta.servlet.http.HttpServletResponse} interface. * *

    As of Spring Framework 5.0, this set of mocks is designed on a Servlet 4.0 baseline. * @@ -383,7 +383,7 @@ public class MockHttpServletResponse implements HttpServletResponse { @Override public void setLocale(@Nullable Locale locale) { - // Although the Javadoc for javax.servlet.ServletResponse.setLocale(Locale) does not + // Although the Javadoc for jakarta.servlet.ServletResponse.setLocale(Locale) does not // state how a null value for the supplied Locale should be handled, both Tomcat and // Jetty simply ignore a null value. So we do the same here. if (locale == null) { diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockHttpSession.java b/spring-test/src/main/java/org/springframework/mock/web/MockHttpSession.java index fb8e8bdddd4..244880d8d79 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockHttpSession.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockHttpSession.java @@ -25,17 +25,17 @@ import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.Map; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpSession; -import javax.servlet.http.HttpSessionBindingEvent; -import javax.servlet.http.HttpSessionBindingListener; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpSession; +import jakarta.servlet.http.HttpSessionBindingEvent; +import jakarta.servlet.http.HttpSessionBindingListener; import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.StringUtils; /** - * Mock implementation of the {@link javax.servlet.http.HttpSession} interface. + * Mock implementation of the {@link jakarta.servlet.http.HttpSession} interface. * *

    As of Spring 5.0, this set of mocks is designed on a Servlet 4.0 baseline. * @@ -149,7 +149,7 @@ public class MockHttpSession implements HttpSession { } @Override - public javax.servlet.http.HttpSessionContext getSessionContext() { + public jakarta.servlet.http.HttpSessionContext getSessionContext() { throw new UnsupportedOperationException("getSessionContext"); } diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockJspWriter.java b/spring-test/src/main/java/org/springframework/mock/web/MockJspWriter.java index 5eabb13e27a..b99202c1e53 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockJspWriter.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockJspWriter.java @@ -20,13 +20,13 @@ import java.io.IOException; import java.io.PrintWriter; import java.io.Writer; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.jsp.JspWriter; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.jsp.JspWriter; import org.springframework.lang.Nullable; /** - * Mock implementation of the {@link javax.servlet.jsp.JspWriter} class. + * Mock implementation of the {@link jakarta.servlet.jsp.JspWriter} class. * Only necessary for testing applications when testing custom JSP tags. * * @author Juergen Hoeller diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockMultipartHttpServletRequest.java b/spring-test/src/main/java/org/springframework/mock/web/MockMultipartHttpServletRequest.java index 15153dcea3e..af199e42336 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockMultipartHttpServletRequest.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockMultipartHttpServletRequest.java @@ -24,9 +24,9 @@ import java.util.Iterator; import java.util.List; import java.util.Map; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.http.Part; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.Part; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockPageContext.java b/spring-test/src/main/java/org/springframework/mock/web/MockPageContext.java index 565da0386e1..9911449917c 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockPageContext.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockPageContext.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,24 +24,24 @@ import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.Map; -import javax.el.ELContext; -import javax.servlet.Servlet; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; -import javax.servlet.jsp.JspWriter; -import javax.servlet.jsp.PageContext; +import jakarta.el.ELContext; +import jakarta.servlet.Servlet; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; +import jakarta.servlet.jsp.JspWriter; +import jakarta.servlet.jsp.PageContext; import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** - * Mock implementation of the {@link javax.servlet.jsp.PageContext} interface. + * Mock implementation of the {@link jakarta.servlet.jsp.PageContext} interface. * Only necessary for testing applications when testing custom JSP tags. * *

    Note: Expects initialization via the constructor rather than via the @@ -293,8 +293,9 @@ public class MockPageContext extends PageContext { @Override @Deprecated - public javax.servlet.jsp.el.ExpressionEvaluator getExpressionEvaluator() { - return new MockExpressionEvaluator(this); + @Nullable + public jakarta.servlet.jsp.el.ExpressionEvaluator getExpressionEvaluator() { + return null; } @Override @@ -306,7 +307,7 @@ public class MockPageContext extends PageContext { @Override @Deprecated @Nullable - public javax.servlet.jsp.el.VariableResolver getVariableResolver() { + public jakarta.servlet.jsp.el.VariableResolver getVariableResolver() { return null; } diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockPart.java b/spring-test/src/main/java/org/springframework/mock/web/MockPart.java index d68dd3b3095..f706aabbda7 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockPart.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockPart.java @@ -22,7 +22,7 @@ import java.io.InputStream; import java.util.Collection; import java.util.Collections; -import javax.servlet.http.Part; +import jakarta.servlet.http.Part; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; @@ -30,7 +30,7 @@ import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** - * Mock implementation of {@code javax.servlet.http.Part}. + * Mock implementation of {@code jakarta.servlet.http.Part}. * * @author Rossen Stoyanchev * @author Juergen Hoeller diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockRequestDispatcher.java b/spring-test/src/main/java/org/springframework/mock/web/MockRequestDispatcher.java index eb8d976539d..9a34e6b45cc 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockRequestDispatcher.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockRequestDispatcher.java @@ -16,18 +16,17 @@ package org.springframework.mock.web; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletResponseWrapper; - +import jakarta.servlet.RequestDispatcher; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletResponseWrapper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.util.Assert; /** - * Mock implementation of the {@link javax.servlet.RequestDispatcher} interface. + * Mock implementation of the {@link jakarta.servlet.RequestDispatcher} interface. * * @author Rod Johnson * @author Juergen Hoeller diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockServletConfig.java b/spring-test/src/main/java/org/springframework/mock/web/MockServletConfig.java index 1f2208a10bc..08b7d4826a3 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockServletConfig.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockServletConfig.java @@ -21,14 +21,14 @@ import java.util.Enumeration; import java.util.LinkedHashMap; import java.util.Map; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletContext; import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** - * Mock implementation of the {@link javax.servlet.ServletConfig} interface. + * Mock implementation of the {@link jakarta.servlet.ServletConfig} interface. * * @author Rod Johnson * @author Juergen Hoeller diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockServletContext.java b/spring-test/src/main/java/org/springframework/mock/web/MockServletContext.java index 232faade3c3..736d44168ef 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockServletContext.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockServletContext.java @@ -31,17 +31,16 @@ import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; -import javax.servlet.Filter; -import javax.servlet.FilterRegistration; -import javax.servlet.RequestDispatcher; -import javax.servlet.Servlet; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletRegistration; -import javax.servlet.SessionCookieConfig; -import javax.servlet.SessionTrackingMode; -import javax.servlet.descriptor.JspConfigDescriptor; - +import jakarta.servlet.Filter; +import jakarta.servlet.FilterRegistration; +import jakarta.servlet.RequestDispatcher; +import jakarta.servlet.Servlet; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRegistration; +import jakarta.servlet.SessionCookieConfig; +import jakarta.servlet.SessionTrackingMode; +import jakarta.servlet.descriptor.JspConfigDescriptor; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -59,7 +58,7 @@ import org.springframework.util.StringUtils; import org.springframework.web.util.WebUtils; /** - * Mock implementation of the {@link javax.servlet.ServletContext} interface. + * Mock implementation of the {@link jakarta.servlet.ServletContext} interface. * *

    As of Spring 5.0, this set of mocks is designed on a Servlet 4.0 baseline. * @@ -663,7 +662,7 @@ public class MockServletContext implements ServletContext { /** * This method always returns {@code null}. - * @see javax.servlet.ServletContext#getServletRegistration(java.lang.String) + * @see jakarta.servlet.ServletContext#getServletRegistration(java.lang.String) */ @Override @Nullable @@ -673,7 +672,7 @@ public class MockServletContext implements ServletContext { /** * This method always returns an {@linkplain Collections#emptyMap empty map}. - * @see javax.servlet.ServletContext#getServletRegistrations() + * @see jakarta.servlet.ServletContext#getServletRegistrations() */ @Override public Map getServletRegistrations() { @@ -702,7 +701,7 @@ public class MockServletContext implements ServletContext { /** * This method always returns {@code null}. - * @see javax.servlet.ServletContext#getFilterRegistration(java.lang.String) + * @see jakarta.servlet.ServletContext#getFilterRegistration(java.lang.String) */ @Override @Nullable @@ -712,7 +711,7 @@ public class MockServletContext implements ServletContext { /** * This method always returns an {@linkplain Collections#emptyMap empty map}. - * @see javax.servlet.ServletContext#getFilterRegistrations() + * @see jakarta.servlet.ServletContext#getFilterRegistrations() */ @Override public Map getFilterRegistrations() { diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockSessionCookieConfig.java b/spring-test/src/main/java/org/springframework/mock/web/MockSessionCookieConfig.java index 8ea88f1a8bc..3a98a87a602 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockSessionCookieConfig.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockSessionCookieConfig.java @@ -16,16 +16,16 @@ package org.springframework.mock.web; -import javax.servlet.SessionCookieConfig; +import jakarta.servlet.SessionCookieConfig; import org.springframework.lang.Nullable; /** - * Mock implementation of the {@link javax.servlet.SessionCookieConfig} interface. + * Mock implementation of the {@link jakarta.servlet.SessionCookieConfig} interface. * * @author Juergen Hoeller * @since 4.0 - * @see javax.servlet.ServletContext#getSessionCookieConfig() + * @see jakarta.servlet.ServletContext#getSessionCookieConfig() */ public class MockSessionCookieConfig implements SessionCookieConfig { diff --git a/spring-test/src/main/java/org/springframework/mock/web/PassThroughFilterChain.java b/spring-test/src/main/java/org/springframework/mock/web/PassThroughFilterChain.java index dfc5f7b303a..03fbfac1051 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/PassThroughFilterChain.java +++ b/spring-test/src/main/java/org/springframework/mock/web/PassThroughFilterChain.java @@ -18,26 +18,26 @@ package org.springframework.mock.web; import java.io.IOException; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.Servlet; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.Servlet; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** - * Implementation of the {@link javax.servlet.FilterConfig} interface which + * Implementation of the {@link jakarta.servlet.FilterConfig} interface which * simply passes the call through to a given Filter/FilterChain combination * (indicating the next Filter in the chain along with the FilterChain that it is * supposed to work on) or to a given Servlet (indicating the end of the chain). * * @author Juergen Hoeller * @since 2.0.3 - * @see javax.servlet.Filter - * @see javax.servlet.Servlet + * @see jakarta.servlet.Filter + * @see jakarta.servlet.Servlet * @see MockFilterChain */ public class PassThroughFilterChain implements FilterChain { diff --git a/spring-test/src/main/java/org/springframework/test/context/ContextConfiguration.java b/spring-test/src/main/java/org/springframework/test/context/ContextConfiguration.java index 9eaabcb4f03..8b65d08e2b6 100644 --- a/spring-test/src/main/java/org/springframework/test/context/ContextConfiguration.java +++ b/spring-test/src/main/java/org/springframework/test/context/ContextConfiguration.java @@ -57,7 +57,7 @@ import org.springframework.core.annotation.AliasFor; * {@link org.springframework.stereotype.Component @Component}, * {@link org.springframework.stereotype.Service @Service}, * {@link org.springframework.stereotype.Repository @Repository}, etc.) - *

  • A JSR-330 compliant class that is annotated with {@code javax.inject} annotations
  • + *
  • A JSR-330 compliant class that is annotated with {@code jakarta.inject} annotations
  • *
  • Any class that contains {@link org.springframework.context.annotation.Bean @Bean}-methods
  • *
  • Any other class that is intended to be registered as a Spring component (i.e., a Spring bean * in the {@code ApplicationContext}), potentially taking advantage of automatic autowiring of a diff --git a/spring-test/src/main/java/org/springframework/test/context/ContextLoader.java b/spring-test/src/main/java/org/springframework/test/context/ContextLoader.java index 232846264a1..8856f6d89c8 100644 --- a/spring-test/src/main/java/org/springframework/test/context/ContextLoader.java +++ b/spring-test/src/main/java/org/springframework/test/context/ContextLoader.java @@ -72,8 +72,8 @@ public interface ContextLoader { * contexts} loaded by this ContextLoader. Beans will therefore automatically * be candidates for annotation-based dependency injection using * {@link org.springframework.beans.factory.annotation.Autowired @Autowired}, - * {@link javax.annotation.Resource @Resource}, and - * {@link javax.inject.Inject @Inject}. + * {@link jakarta.annotation.Resource @Resource}, and + * {@link jakarta.inject.Inject @Inject}. *

    Any ApplicationContext loaded by a ContextLoader must * register a JVM shutdown hook for itself. Unless the context gets closed * early, all context instances will be automatically closed on JVM diff --git a/spring-test/src/main/java/org/springframework/test/context/SmartContextLoader.java b/spring-test/src/main/java/org/springframework/test/context/SmartContextLoader.java index dfdd198c45f..f59be7fc4f9 100644 --- a/spring-test/src/main/java/org/springframework/test/context/SmartContextLoader.java +++ b/spring-test/src/main/java/org/springframework/test/context/SmartContextLoader.java @@ -101,8 +101,8 @@ public interface SmartContextLoader extends ContextLoader { * {@code SmartContextLoader}. Beans will therefore automatically be * candidates for annotation-based dependency injection using * {@link org.springframework.beans.factory.annotation.Autowired @Autowired}, - * {@link javax.annotation.Resource @Resource}, and - * {@link javax.inject.Inject @Inject}. In addition, concrete implementations + * {@link jakarta.annotation.Resource @Resource}, and + * {@link jakarta.inject.Inject @Inject}. In addition, concrete implementations * should set the active bean definition profiles in the context's * {@link org.springframework.core.env.Environment Environment}. *

    Any {@code ApplicationContext} loaded by a diff --git a/spring-test/src/main/java/org/springframework/test/context/web/AbstractGenericWebContextLoader.java b/spring-test/src/main/java/org/springframework/test/context/web/AbstractGenericWebContextLoader.java index c363dd2d671..e42545a4699 100644 --- a/spring-test/src/main/java/org/springframework/test/context/web/AbstractGenericWebContextLoader.java +++ b/spring-test/src/main/java/org/springframework/test/context/web/AbstractGenericWebContextLoader.java @@ -16,8 +16,7 @@ package org.springframework.test.context.web; -import javax.servlet.ServletContext; - +import jakarta.servlet.ServletContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/spring-test/src/main/java/org/springframework/test/context/web/ServletTestExecutionListener.java b/spring-test/src/main/java/org/springframework/test/context/web/ServletTestExecutionListener.java index b981840f9ba..3051524eb89 100644 --- a/spring-test/src/main/java/org/springframework/test/context/web/ServletTestExecutionListener.java +++ b/spring-test/src/main/java/org/springframework/test/context/web/ServletTestExecutionListener.java @@ -16,8 +16,7 @@ package org.springframework.test.context.web; -import javax.servlet.ServletContext; - +import jakarta.servlet.ServletContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/spring-test/src/main/java/org/springframework/test/context/web/socket/MockServerContainer.java b/spring-test/src/main/java/org/springframework/test/context/web/socket/MockServerContainer.java index b375615283f..cc86220b62d 100644 --- a/spring-test/src/main/java/org/springframework/test/context/web/socket/MockServerContainer.java +++ b/spring-test/src/main/java/org/springframework/test/context/web/socket/MockServerContainer.java @@ -21,16 +21,16 @@ import java.net.URI; import java.util.Collections; import java.util.Set; -import javax.websocket.ClientEndpointConfig; -import javax.websocket.DeploymentException; -import javax.websocket.Endpoint; -import javax.websocket.Extension; -import javax.websocket.Session; -import javax.websocket.server.ServerContainer; -import javax.websocket.server.ServerEndpointConfig; +import jakarta.websocket.ClientEndpointConfig; +import jakarta.websocket.DeploymentException; +import jakarta.websocket.Endpoint; +import jakarta.websocket.Extension; +import jakarta.websocket.Session; +import jakarta.websocket.server.ServerContainer; +import jakarta.websocket.server.ServerEndpointConfig; /** - * Mock implementation of the {@link javax.websocket.server.ServerContainer} interface. + * Mock implementation of the {@link jakarta.websocket.server.ServerContainer} interface. * * @author Sam Brannen * @since 4.3.1 diff --git a/spring-test/src/main/java/org/springframework/test/context/web/socket/MockServerContainerContextCustomizer.java b/spring-test/src/main/java/org/springframework/test/context/web/socket/MockServerContainerContextCustomizer.java index 1a8e129f80a..c746941672b 100644 --- a/spring-test/src/main/java/org/springframework/test/context/web/socket/MockServerContainerContextCustomizer.java +++ b/spring-test/src/main/java/org/springframework/test/context/web/socket/MockServerContainerContextCustomizer.java @@ -16,7 +16,7 @@ package org.springframework.test.context.web.socket; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.lang.Nullable; @@ -27,7 +27,7 @@ import org.springframework.web.context.WebApplicationContext; /** * {@link ContextCustomizer} that instantiates a new {@link MockServerContainer} * and stores it in the {@code ServletContext} under the attribute named - * {@code "javax.websocket.server.ServerContainer"}. + * {@code "jakarta.websocket.server.ServerContainer"}. * * @author Sam Brannen * @since 4.3.1 @@ -40,7 +40,7 @@ class MockServerContainerContextCustomizer implements ContextCustomizer { WebApplicationContext wac = (WebApplicationContext) context; ServletContext sc = wac.getServletContext(); if (sc != null) { - sc.setAttribute("javax.websocket.server.ServerContainer", new MockServerContainer()); + sc.setAttribute("jakarta.websocket.server.ServerContainer", new MockServerContainer()); } } } diff --git a/spring-test/src/main/java/org/springframework/test/context/web/socket/MockServerContainerContextCustomizerFactory.java b/spring-test/src/main/java/org/springframework/test/context/web/socket/MockServerContainerContextCustomizerFactory.java index e69b2bab072..0cb74f154c0 100644 --- a/spring-test/src/main/java/org/springframework/test/context/web/socket/MockServerContainerContextCustomizerFactory.java +++ b/spring-test/src/main/java/org/springframework/test/context/web/socket/MockServerContainerContextCustomizerFactory.java @@ -42,7 +42,7 @@ class MockServerContainerContextCustomizerFactory implements ContextCustomizerFa private static final String MOCK_SERVER_CONTAINER_CONTEXT_CUSTOMIZER_CLASS_NAME = "org.springframework.test.context.web.socket.MockServerContainerContextCustomizer"; - private static final boolean webSocketPresent = ClassUtils.isPresent("javax.websocket.server.ServerContainer", + private static final boolean webSocketPresent = ClassUtils.isPresent("jakarta.websocket.server.ServerContainer", MockServerContainerContextCustomizerFactory.class.getClassLoader()); diff --git a/spring-test/src/main/java/org/springframework/test/util/ReflectionTestUtils.java b/spring-test/src/main/java/org/springframework/test/util/ReflectionTestUtils.java index 2197d861b0b..419374b9576 100644 --- a/spring-test/src/main/java/org/springframework/test/util/ReflectionTestUtils.java +++ b/spring-test/src/main/java/org/springframework/test/util/ReflectionTestUtils.java @@ -45,12 +45,12 @@ import org.springframework.util.StringUtils; * {@code public} setter methods for properties in a domain entity.

  • *
  • Spring's support for annotations such as * {@link org.springframework.beans.factory.annotation.Autowired @Autowired}, - * {@link javax.inject.Inject @Inject}, and - * {@link javax.annotation.Resource @Resource} which provides dependency + * {@link jakarta.inject.Inject @Inject}, and + * {@link jakarta.annotation.Resource @Resource} which provides dependency * injection for {@code private} or {@code protected} fields, setter methods, * and configuration methods.
  • - *
  • Use of annotations such as {@link javax.annotation.PostConstruct @PostConstruct} - * and {@link javax.annotation.PreDestroy @PreDestroy} for lifecycle callback + *
  • Use of annotations such as {@link jakarta.annotation.PostConstruct @PostConstruct} + * and {@link jakarta.annotation.PreDestroy @PreDestroy} for lifecycle callback * methods.
  • * * diff --git a/spring-test/src/main/java/org/springframework/test/web/client/match/ContentRequestMatchers.java b/spring-test/src/main/java/org/springframework/test/web/client/match/ContentRequestMatchers.java index ec883b02a41..0ce6350a5da 100644 --- a/spring-test/src/main/java/org/springframework/test/web/client/match/ContentRequestMatchers.java +++ b/spring-test/src/main/java/org/springframework/test/web/client/match/ContentRequestMatchers.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2020 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,32 +16,36 @@ package org.springframework.test.web.client.match; +import java.io.ByteArrayInputStream; import java.io.IOException; +import java.io.InputStream; import java.util.List; import java.util.Map; import javax.xml.transform.Source; import javax.xml.transform.dom.DOMSource; +import org.apache.tomcat.util.http.fileupload.FileItem; +import org.apache.tomcat.util.http.fileupload.FileUpload; +import org.apache.tomcat.util.http.fileupload.UploadContext; +import org.apache.tomcat.util.http.fileupload.disk.DiskFileItemFactory; import org.hamcrest.Matcher; import org.w3c.dom.Node; import org.springframework.core.io.Resource; +import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.client.ClientHttpRequest; import org.springframework.http.converter.FormHttpMessageConverter; +import org.springframework.lang.Nullable; import org.springframework.mock.http.MockHttpInputMessage; import org.springframework.mock.http.client.MockClientHttpRequest; -import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.test.util.JsonExpectationsHelper; import org.springframework.test.util.XmlExpectationsHelper; import org.springframework.test.web.client.RequestMatcher; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.util.StreamUtils; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.multipart.MultipartHttpServletRequest; -import org.springframework.web.multipart.commons.CommonsMultipartResolver; import static org.hamcrest.MatcherAssert.assertThat; import static org.springframework.test.util.AssertionErrors.assertEquals; @@ -217,7 +221,7 @@ public class ContentRequestMatchers { @SuppressWarnings("ConstantConditions") private RequestMatcher multipartData(MultiValueMap expectedMap, boolean containsExactly) { return request -> { - MultiValueMap actualMap = MultipartHelper.parse(request); + MultiValueMap actualMap = MultipartHelper.parse((MockClientHttpRequest) request); if (containsExactly) { assertEquals("Multipart request content: " + actualMap, expectedMap.size(), actualMap.size()); } @@ -235,8 +239,8 @@ public class ContentRequestMatchers { expected = StreamUtils.copyToByteArray(((Resource) expected).getInputStream()); } if (expected instanceof byte[]) { - assertTrue("Multipart is not a file", actual instanceof MultipartFile); - assertEquals("Multipart content", expected, ((MultipartFile) actual).getBytes()); + assertTrue("Multipart is not a file", actual instanceof byte[]); + assertEquals("Multipart content", expected, (byte[]) actual); } else if (expected instanceof String) { assertTrue("Multipart is not a String", actual instanceof String); @@ -356,28 +360,42 @@ public class ContentRequestMatchers { private static class MultipartHelper { - public static MultiValueMap parse(ClientHttpRequest request) { - MultipartHttpServletRequest servletRequest = adaptToMultipartRequest(request); - MultiValueMap result = new LinkedMultiValueMap<>(); - for (Map.Entry> entry : servletRequest.getMultiFileMap().entrySet()) { - for (MultipartFile value : entry.getValue()) { - result.add(entry.getKey(), value); + public static MultiValueMap parse(MockClientHttpRequest request) { + try { + FileUpload fileUpload = new FileUpload(new DiskFileItemFactory()); + + List fileItems = fileUpload.parseRequest(new UploadContext() { + private final byte[] body = request.getBodyAsBytes(); + @Override + @Nullable + public String getCharacterEncoding() { + return request.getHeaders().getFirst(HttpHeaders.CONTENT_ENCODING); + } + @Override + @Nullable + public String getContentType() { + return request.getHeaders().getFirst(HttpHeaders.CONTENT_TYPE); + } + @Override + public InputStream getInputStream() { + return new ByteArrayInputStream(this.body); + } + @Override + public long contentLength() { + return this.body.length; + } + }); + + MultiValueMap result = new LinkedMultiValueMap<>(); + for (FileItem fileItem : fileItems) { + result.add(fileItem.getFieldName(), + (fileItem.isFormField() ? fileItem.getString() : fileItem.get())); } + return result; } - for (Map.Entry entry : servletRequest.getParameterMap().entrySet()) { - for (String value : entry.getValue()) { - result.add(entry.getKey(), value); - } + catch (Exception ex) { + throw new IllegalStateException("Failed to parse multipart request", ex); } - return result; - } - - private static MultipartHttpServletRequest adaptToMultipartRequest(ClientHttpRequest request) { - MockClientHttpRequest source = (MockClientHttpRequest) request; - MockHttpServletRequest target = new MockHttpServletRequest(); - target.setContent(source.getBodyAsBytes()); - source.getHeaders().forEach((name, values) -> values.forEach(v -> target.addHeader(name, v))); - return new CommonsMultipartResolver().resolveMultipart(target); } } diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/MockMvc.java b/spring-test/src/main/java/org/springframework/test/web/servlet/MockMvc.java index 0c8a28c7fd6..16a968e9a85 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/MockMvc.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/MockMvc.java @@ -20,13 +20,13 @@ import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; -import javax.servlet.AsyncContext; -import javax.servlet.DispatcherType; -import javax.servlet.Filter; -import javax.servlet.ServletContext; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpServletResponseWrapper; +import jakarta.servlet.AsyncContext; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.Filter; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponseWrapper; import org.springframework.beans.Mergeable; import org.springframework.lang.Nullable; diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/MockMvcBuilderSupport.java b/spring-test/src/main/java/org/springframework/test/web/servlet/MockMvcBuilderSupport.java index d635b00b1ba..7ea2eac3633 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/MockMvcBuilderSupport.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/MockMvcBuilderSupport.java @@ -19,8 +19,8 @@ package org.springframework.test.web.servlet; import java.nio.charset.Charset; import java.util.List; -import javax.servlet.Filter; -import javax.servlet.ServletException; +import jakarta.servlet.Filter; +import jakarta.servlet.ServletException; import org.springframework.core.NestedRuntimeException; import org.springframework.lang.Nullable; diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/RequestBuilder.java b/spring-test/src/main/java/org/springframework/test/web/servlet/RequestBuilder.java index db14261075d..e6537d810d3 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/RequestBuilder.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/RequestBuilder.java @@ -16,7 +16,7 @@ package org.springframework.test.web.servlet; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import org.springframework.mock.web.MockHttpServletRequest; diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/TestDispatcherServlet.java b/spring-test/src/main/java/org/springframework/test/web/servlet/TestDispatcherServlet.java index 8c9a4f9fb7a..6d97dfce348 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/TestDispatcherServlet.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/TestDispatcherServlet.java @@ -20,10 +20,10 @@ import java.io.IOException; import java.util.concurrent.Callable; import java.util.concurrent.CountDownLatch; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.lang.Nullable; import org.springframework.mock.web.MockAsyncContext; diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/client/AbstractMockMvcServerSpec.java b/spring-test/src/main/java/org/springframework/test/web/servlet/client/AbstractMockMvcServerSpec.java index cf1b2d60fe8..e9ccb32e6b3 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/client/AbstractMockMvcServerSpec.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/client/AbstractMockMvcServerSpec.java @@ -15,7 +15,7 @@ */ package org.springframework.test.web.servlet.client; -import javax.servlet.Filter; +import jakarta.servlet.Filter; import org.springframework.http.client.reactive.ClientHttpConnector; import org.springframework.test.web.reactive.server.WebTestClient; diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/client/MockMvcHttpConnector.java b/spring-test/src/main/java/org/springframework/test/web/servlet/client/MockMvcHttpConnector.java index 705e89432b7..edfd28361e2 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/client/MockMvcHttpConnector.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/client/MockMvcHttpConnector.java @@ -23,8 +23,7 @@ import java.util.List; import java.util.concurrent.atomic.AtomicReference; import java.util.function.Function; -import javax.servlet.http.Cookie; - +import jakarta.servlet.http.Cookie; import reactor.core.publisher.Mono; import org.springframework.core.ResolvableType; @@ -166,7 +165,7 @@ public class MockMvcHttpConnector implements ClientHttpConnector { buffer.read(partBytes); DataBufferUtils.release(buffer); - // Adapt to javax.servlet.http.Part... + // Adapt to jakarta.servlet.http.Part... MockPart mockPart = (part instanceof FilePart ? new MockPart(part.name(), ((FilePart) part).filename(), partBytes) : new MockPart(part.name(), partBytes)); diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/client/MockMvcWebTestClient.java b/spring-test/src/main/java/org/springframework/test/web/servlet/client/MockMvcWebTestClient.java index a59879f795d..2738797ad09 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/client/MockMvcWebTestClient.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/client/MockMvcWebTestClient.java @@ -17,7 +17,7 @@ package org.springframework.test.web.servlet.client; import java.util.function.Supplier; -import javax.servlet.Filter; +import jakarta.servlet.Filter; import org.springframework.format.support.FormattingConversionService; import org.springframework.http.client.reactive.ClientHttpConnector; diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/htmlunit/HtmlUnitRequestBuilder.java b/spring-test/src/main/java/org/springframework/test/web/servlet/htmlunit/HtmlUnitRequestBuilder.java index 7d76e63e751..16df1e7e489 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/htmlunit/HtmlUnitRequestBuilder.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/htmlunit/HtmlUnitRequestBuilder.java @@ -33,17 +33,16 @@ import java.util.Map; import java.util.Set; import java.util.StringTokenizer; -import javax.servlet.ServletContext; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; - import com.gargoylesoftware.htmlunit.CookieManager; import com.gargoylesoftware.htmlunit.FormEncodingType; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.WebRequest; import com.gargoylesoftware.htmlunit.util.KeyDataPair; import com.gargoylesoftware.htmlunit.util.NameValuePair; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; import org.springframework.beans.Mergeable; import org.springframework.http.MediaType; diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/htmlunit/MockMvcWebConnection.java b/spring-test/src/main/java/org/springframework/test/web/servlet/htmlunit/MockMvcWebConnection.java index cbe396dc861..e7d3eb3e312 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/htmlunit/MockMvcWebConnection.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/htmlunit/MockMvcWebConnection.java @@ -85,7 +85,7 @@ public final class MockMvcWebConnection implements WebConnection { * Create a new instance with the specified context path. *

    The path may be {@code null} in which case the first path segment * of the URL is turned into the contextPath. Otherwise it must conform - * to {@link javax.servlet.http.HttpServletRequest#getContextPath()} + * to {@link jakarta.servlet.http.HttpServletRequest#getContextPath()} * which states that it can be an empty string and otherwise must start * with a "/" character and not end with a "/" character. * @param mockMvc the {@code MockMvc} instance to use (never {@code null}) @@ -105,7 +105,7 @@ public final class MockMvcWebConnection implements WebConnection { /** * Validate the supplied {@code contextPath}. *

    If the value is not {@code null}, it must conform to - * {@link javax.servlet.http.HttpServletRequest#getContextPath()} which + * {@link jakarta.servlet.http.HttpServletRequest#getContextPath()} which * states that it can be an empty string and otherwise must start with * a "/" character and not end with a "/" character. * @param contextPath the path to validate @@ -155,10 +155,10 @@ public final class MockMvcWebConnection implements WebConnection { return resultActions.andReturn().getResponse(); } - private void storeCookies(WebRequest webRequest, javax.servlet.http.Cookie[] cookies) { + private void storeCookies(WebRequest webRequest, jakarta.servlet.http.Cookie[] cookies) { Date now = new Date(); CookieManager cookieManager = this.webClient.getCookieManager(); - for (javax.servlet.http.Cookie cookie : cookies) { + for (jakarta.servlet.http.Cookie cookie : cookies) { if (cookie.getDomain() == null) { cookie.setDomain(webRequest.getUrl().getHost()); } @@ -173,7 +173,7 @@ public final class MockMvcWebConnection implements WebConnection { } } - private static com.gargoylesoftware.htmlunit.util.Cookie createCookie(javax.servlet.http.Cookie cookie) { + private static com.gargoylesoftware.htmlunit.util.Cookie createCookie(jakarta.servlet.http.Cookie cookie) { Date expires = null; if (cookie.getMaxAge() > -1) { expires = new Date(System.currentTimeMillis() + cookie.getMaxAge() * 1000); diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilder.java b/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilder.java index c4ec1cd9173..e7122070f13 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilder.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilder.java @@ -30,10 +30,10 @@ import java.util.List; import java.util.Locale; import java.util.Map; -import javax.servlet.ServletContext; -import javax.servlet.ServletRequest; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpSession; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpSession; import org.springframework.beans.Mergeable; import org.springframework.beans.factory.NoSuchBeanDefinitionException; @@ -185,7 +185,7 @@ public class MockHttpServletRequestBuilder * the requestURI. This is because most applications don't actually depend * on the name under which they're deployed. If specified here, the context * path must start with a "/" and must not end with a "/". - * @see javax.servlet.http.HttpServletRequest#getContextPath() + * @see jakarta.servlet.http.HttpServletRequest#getContextPath() */ public MockHttpServletRequestBuilder contextPath(String contextPath) { if (StringUtils.hasText(contextPath)) { @@ -207,7 +207,7 @@ public class MockHttpServletRequestBuilder * {@code "/accounts/1"} as opposed to {@code "/main/accounts/1"}. * If specified here, the servletPath must start with a "/" and must not * end with a "/". - * @see javax.servlet.http.HttpServletRequest#getServletPath() + * @see jakarta.servlet.http.HttpServletRequest#getServletPath() */ public MockHttpServletRequestBuilder servletPath(String servletPath) { if (StringUtils.hasText(servletPath)) { @@ -224,7 +224,7 @@ public class MockHttpServletRequestBuilder * by removing the contextPath and the servletPath from the requestURI and using any * remaining part. If specified here, the pathInfo must start with a "/". *

    If specified, the pathInfo will be used as-is. - * @see javax.servlet.http.HttpServletRequest#getPathInfo() + * @see jakarta.servlet.http.HttpServletRequest#getPathInfo() */ public MockHttpServletRequestBuilder pathInfo(@Nullable String pathInfo) { if (StringUtils.hasText(pathInfo)) { diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMultipartHttpServletRequestBuilder.java b/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMultipartHttpServletRequestBuilder.java index 73a0a3bd29d..e9a8b694493 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMultipartHttpServletRequestBuilder.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMultipartHttpServletRequestBuilder.java @@ -26,8 +26,8 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; -import javax.servlet.ServletContext; -import javax.servlet.http.Part; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.Part; import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMvcRequestBuilders.java b/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMvcRequestBuilders.java index 068320216f6..c9e7dbc74cc 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMvcRequestBuilders.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMvcRequestBuilders.java @@ -18,7 +18,7 @@ package org.springframework.test.web.servlet.request; import java.net.URI; -import javax.servlet.DispatcherType; +import jakarta.servlet.DispatcherType; import org.springframework.http.HttpMethod; import org.springframework.mock.web.MockHttpServletRequest; diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/result/ContentResultMatchers.java b/spring-test/src/main/java/org/springframework/test/web/servlet/result/ContentResultMatchers.java index f2d9360107f..c91b2631ced 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/result/ContentResultMatchers.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/result/ContentResultMatchers.java @@ -20,10 +20,10 @@ import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.Map; -import javax.servlet.http.HttpServletResponse; import javax.xml.transform.Source; import javax.xml.transform.dom.DOMSource; +import jakarta.servlet.http.HttpServletResponse; import org.hamcrest.Matcher; import org.w3c.dom.Node; diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/result/CookieResultMatchers.java b/spring-test/src/main/java/org/springframework/test/web/servlet/result/CookieResultMatchers.java index a548731f2ab..a8a40a29c44 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/result/CookieResultMatchers.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/result/CookieResultMatchers.java @@ -16,8 +16,7 @@ package org.springframework.test.web.servlet.result; -import javax.servlet.http.Cookie; - +import jakarta.servlet.http.Cookie; import org.hamcrest.Matcher; import org.springframework.test.web.servlet.MvcResult; diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/result/PrintingResultHandler.java b/spring-test/src/main/java/org/springframework/test/web/servlet/result/PrintingResultHandler.java index f0ea1c5b658..f9539b1a6a0 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/result/PrintingResultHandler.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/result/PrintingResultHandler.java @@ -21,9 +21,9 @@ import java.util.Enumeration; import java.util.Map; import java.util.stream.Collectors; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; import org.springframework.core.style.ToStringCreator; import org.springframework.http.HttpHeaders; diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/result/RequestResultMatchers.java b/spring-test/src/main/java/org/springframework/test/web/servlet/result/RequestResultMatchers.java index 926e3f4349f..2cd6f3b9fc2 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/result/RequestResultMatchers.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/result/RequestResultMatchers.java @@ -18,9 +18,8 @@ package org.springframework.test.web.servlet.result; import java.util.concurrent.Callable; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; - +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; import org.hamcrest.Matcher; import org.springframework.lang.Nullable; diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/AbstractMockMvcBuilder.java b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/AbstractMockMvcBuilder.java index e5ed43ce30a..dcf4b06b687 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/AbstractMockMvcBuilder.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/AbstractMockMvcBuilder.java @@ -20,8 +20,8 @@ import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; -import javax.servlet.Filter; -import javax.servlet.ServletContext; +import jakarta.servlet.Filter; +import jakarta.servlet.ServletContext; import org.springframework.lang.Nullable; import org.springframework.mock.web.MockServletConfig; diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/ConfigurableMockMvcBuilder.java b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/ConfigurableMockMvcBuilder.java index 45b9f05d04a..fcd96945c26 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/ConfigurableMockMvcBuilder.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/ConfigurableMockMvcBuilder.java @@ -18,7 +18,7 @@ package org.springframework.test.web.servlet.setup; import java.nio.charset.Charset; -import javax.servlet.Filter; +import jakarta.servlet.Filter; import org.springframework.test.web.servlet.DispatcherServletCustomizer; import org.springframework.test.web.servlet.MockMvcBuilder; diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/DefaultMockMvcBuilder.java b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/DefaultMockMvcBuilder.java index 4e47244f655..7b72cc94746 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/DefaultMockMvcBuilder.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/DefaultMockMvcBuilder.java @@ -16,7 +16,7 @@ package org.springframework.test.web.servlet.setup; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import org.springframework.context.ApplicationContext; import org.springframework.util.Assert; diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/MockMvcBuilders.java b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/MockMvcBuilders.java index 60bab94c01e..71b523d7971 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/MockMvcBuilders.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/MockMvcBuilders.java @@ -45,7 +45,7 @@ public final class MockMvcBuilders { *

    The {@link org.springframework.web.servlet.DispatcherServlet DispatcherServlet} * will use the context to discover Spring MVC infrastructure and application * controllers in it. The context must have been configured with a - * {@link javax.servlet.ServletContext ServletContext}. + * {@link jakarta.servlet.ServletContext ServletContext}. */ public static DefaultMockMvcBuilder webAppContextSetup(WebApplicationContext context) { return new DefaultMockMvcBuilder(context); diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/PatternMappingFilterProxy.java b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/PatternMappingFilterProxy.java index 1966016813c..2bcb3135b84 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/PatternMappingFilterProxy.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/PatternMappingFilterProxy.java @@ -20,13 +20,13 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.util.Assert; import org.springframework.web.util.UrlPathHelper; diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/SharedHttpSessionConfigurer.java b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/SharedHttpSessionConfigurer.java index 7fcc663134a..d12bca60d82 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/SharedHttpSessionConfigurer.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/SharedHttpSessionConfigurer.java @@ -16,7 +16,7 @@ package org.springframework.test.web.servlet.setup; -import javax.servlet.http.HttpSession; +import jakarta.servlet.http.HttpSession; import org.springframework.lang.Nullable; import org.springframework.test.web.servlet.request.RequestPostProcessor; diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/StandaloneMockMvcBuilder.java b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/StandaloneMockMvcBuilder.java index 1675a494034..ac94d5c103f 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/StandaloneMockMvcBuilder.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/StandaloneMockMvcBuilder.java @@ -25,7 +25,7 @@ import java.util.Locale; import java.util.Map; import java.util.function.Supplier; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/StubWebApplicationContext.java b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/StubWebApplicationContext.java index c5271e8d18e..368bd0bede2 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/StubWebApplicationContext.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/StubWebApplicationContext.java @@ -23,7 +23,7 @@ import java.util.Locale; import java.util.Map; import java.util.Set; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; diff --git a/spring-test/src/main/kotlin/org/springframework/test/web/servlet/MockHttpServletRequestDsl.kt b/spring-test/src/main/kotlin/org/springframework/test/web/servlet/MockHttpServletRequestDsl.kt index e997204d3fd..d00d9fe6c95 100644 --- a/spring-test/src/main/kotlin/org/springframework/test/web/servlet/MockHttpServletRequestDsl.kt +++ b/spring-test/src/main/kotlin/org/springframework/test/web/servlet/MockHttpServletRequestDsl.kt @@ -24,7 +24,7 @@ import org.springframework.test.web.servlet.request.RequestPostProcessor import org.springframework.util.MultiValueMap import java.security.Principal import java.util.* -import javax.servlet.http.Cookie +import jakarta.servlet.http.Cookie /** * Provide a [MockHttpServletRequestBuilder] Kotlin DSL in order to be able to write idiomatic Kotlin code. diff --git a/spring-test/src/main/kotlin/org/springframework/test/web/servlet/MockMultipartHttpServletRequestDsl.kt b/spring-test/src/main/kotlin/org/springframework/test/web/servlet/MockMultipartHttpServletRequestDsl.kt index 1a2e83745a7..e2b3ad565cf 100644 --- a/spring-test/src/main/kotlin/org/springframework/test/web/servlet/MockMultipartHttpServletRequestDsl.kt +++ b/spring-test/src/main/kotlin/org/springframework/test/web/servlet/MockMultipartHttpServletRequestDsl.kt @@ -18,7 +18,7 @@ package org.springframework.test.web.servlet import org.springframework.mock.web.MockMultipartFile import org.springframework.test.web.servlet.request.MockMultipartHttpServletRequestBuilder -import javax.servlet.http.Part +import jakarta.servlet.http.Part /** * Provide a [MockMultipartHttpServletRequestBuilder] Kotlin DSL in order to be able to write idiomatic Kotlin code. diff --git a/spring-test/src/test/java/org/springframework/mock/web/MockFilterChainTests.java b/spring-test/src/test/java/org/springframework/mock/web/MockFilterChainTests.java index 4babe4467a3..de0a06343ee 100644 --- a/spring-test/src/test/java/org/springframework/mock/web/MockFilterChainTests.java +++ b/spring-test/src/test/java/org/springframework/mock/web/MockFilterChainTests.java @@ -18,14 +18,13 @@ package org.springframework.mock.web; import java.io.IOException; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.Servlet; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; - +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.Servlet; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java b/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java index 6ade7c90a71..19c428eae0c 100644 --- a/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java +++ b/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java @@ -30,8 +30,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; -import javax.servlet.http.Cookie; - +import jakarta.servlet.http.Cookie; import org.junit.jupiter.api.Test; import org.springframework.http.HttpHeaders; diff --git a/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletResponseTests.java b/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletResponseTests.java index fe0f90f7b50..bc4ebd8a9ea 100644 --- a/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletResponseTests.java +++ b/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletResponseTests.java @@ -24,9 +24,8 @@ import java.util.Arrays; import java.util.Collection; import java.util.Locale; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; diff --git a/spring-test/src/test/java/org/springframework/mock/web/MockHttpSessionTests.java b/spring-test/src/test/java/org/springframework/mock/web/MockHttpSessionTests.java index a27c0f12c40..d20693b2d20 100644 --- a/spring-test/src/test/java/org/springframework/mock/web/MockHttpSessionTests.java +++ b/spring-test/src/test/java/org/springframework/mock/web/MockHttpSessionTests.java @@ -18,9 +18,8 @@ package org.springframework.mock.web; import java.util.concurrent.atomic.AtomicInteger; -import javax.servlet.http.HttpSessionBindingEvent; -import javax.servlet.http.HttpSessionBindingListener; - +import jakarta.servlet.http.HttpSessionBindingEvent; +import jakarta.servlet.http.HttpSessionBindingListener; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; diff --git a/spring-test/src/test/java/org/springframework/mock/web/MockPageContextTests.java b/spring-test/src/test/java/org/springframework/mock/web/MockPageContextTests.java index d9026333731..6ab8d15b259 100644 --- a/spring-test/src/test/java/org/springframework/mock/web/MockPageContextTests.java +++ b/spring-test/src/test/java/org/springframework/mock/web/MockPageContextTests.java @@ -16,8 +16,7 @@ package org.springframework.mock.web; -import javax.servlet.jsp.PageContext; - +import jakarta.servlet.jsp.PageContext; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; diff --git a/spring-test/src/test/java/org/springframework/mock/web/MockServletContextTests.java b/spring-test/src/test/java/org/springframework/mock/web/MockServletContextTests.java index fd26ff1e25c..e9ef2635f8b 100644 --- a/spring-test/src/test/java/org/springframework/mock/web/MockServletContextTests.java +++ b/spring-test/src/test/java/org/springframework/mock/web/MockServletContextTests.java @@ -21,10 +21,9 @@ import java.net.URL; import java.util.Map; import java.util.Set; -import javax.servlet.FilterRegistration; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletRegistration; - +import jakarta.servlet.FilterRegistration; +import jakarta.servlet.RequestDispatcher; +import jakarta.servlet.ServletRegistration; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; diff --git a/spring-test/src/test/java/org/springframework/test/context/groovy/GroovySpringContextTests.java b/spring-test/src/test/java/org/springframework/test/context/groovy/GroovySpringContextTests.java index ae020512502..fd3034b4524 100644 --- a/spring-test/src/test/java/org/springframework/test/context/groovy/GroovySpringContextTests.java +++ b/spring-test/src/test/java/org/springframework/test/context/groovy/GroovySpringContextTests.java @@ -16,8 +16,7 @@ package org.springframework.test.context.groovy; -import javax.annotation.Resource; - +import jakarta.annotation.Resource; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; diff --git a/spring-test/src/test/java/org/springframework/test/context/hierarchies/web/ControllerIntegrationTests.java b/spring-test/src/test/java/org/springframework/test/context/hierarchies/web/ControllerIntegrationTests.java index c9a689f1ac7..d12afba4c47 100644 --- a/spring-test/src/test/java/org/springframework/test/context/hierarchies/web/ControllerIntegrationTests.java +++ b/spring-test/src/test/java/org/springframework/test/context/hierarchies/web/ControllerIntegrationTests.java @@ -16,8 +16,7 @@ package org.springframework.test.context.hierarchies.web; -import javax.servlet.ServletContext; - +import jakarta.servlet.ServletContext; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; diff --git a/spring-test/src/test/java/org/springframework/test/context/hierarchies/web/DispatcherWacRootWacEarTests.java b/spring-test/src/test/java/org/springframework/test/context/hierarchies/web/DispatcherWacRootWacEarTests.java index bb48aefa72d..b4485ebf1ed 100644 --- a/spring-test/src/test/java/org/springframework/test/context/hierarchies/web/DispatcherWacRootWacEarTests.java +++ b/spring-test/src/test/java/org/springframework/test/context/hierarchies/web/DispatcherWacRootWacEarTests.java @@ -16,8 +16,7 @@ package org.springframework.test.context.hierarchies.web; -import javax.servlet.ServletContext; - +import jakarta.servlet.ServletContext; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; diff --git a/spring-test/src/test/java/org/springframework/test/context/junit4/ConcreteTransactionalJUnit4SpringContextTests.java b/spring-test/src/test/java/org/springframework/test/context/junit4/ConcreteTransactionalJUnit4SpringContextTests.java index 5112f3770d3..1c95a609d2b 100644 --- a/spring-test/src/test/java/org/springframework/test/context/junit4/ConcreteTransactionalJUnit4SpringContextTests.java +++ b/spring-test/src/test/java/org/springframework/test/context/junit4/ConcreteTransactionalJUnit4SpringContextTests.java @@ -16,8 +16,7 @@ package org.springframework.test.context.junit4; -import javax.annotation.Resource; - +import jakarta.annotation.Resource; import org.junit.After; import org.junit.Before; import org.junit.Test; diff --git a/spring-test/src/test/java/org/springframework/test/context/junit4/SpringJUnit4ClassRunnerAppCtxTests.java b/spring-test/src/test/java/org/springframework/test/context/junit4/SpringJUnit4ClassRunnerAppCtxTests.java index 4f17e973e11..710957ab233 100644 --- a/spring-test/src/test/java/org/springframework/test/context/junit4/SpringJUnit4ClassRunnerAppCtxTests.java +++ b/spring-test/src/test/java/org/springframework/test/context/junit4/SpringJUnit4ClassRunnerAppCtxTests.java @@ -16,10 +16,9 @@ package org.springframework.test.context.junit4; -import javax.annotation.Resource; -import javax.inject.Inject; -import javax.inject.Named; - +import jakarta.annotation.Resource; +import jakarta.inject.Inject; +import jakarta.inject.Named; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/spring-test/src/test/java/org/springframework/test/context/junit4/orm/HibernateSessionFlushingTests.java b/spring-test/src/test/java/org/springframework/test/context/junit4/orm/HibernateSessionFlushingTests.java index 6c0dc92e900..d75539d4ebb 100644 --- a/spring-test/src/test/java/org/springframework/test/context/junit4/orm/HibernateSessionFlushingTests.java +++ b/spring-test/src/test/java/org/springframework/test/context/junit4/orm/HibernateSessionFlushingTests.java @@ -16,8 +16,7 @@ package org.springframework.test.context.junit4.orm; -import javax.persistence.PersistenceException; - +import jakarta.persistence.PersistenceException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.exception.ConstraintViolationException; diff --git a/spring-test/src/test/java/org/springframework/test/context/junit4/spr4868/Jsr250LifecycleTests.java b/spring-test/src/test/java/org/springframework/test/context/junit4/spr4868/Jsr250LifecycleTests.java index 11e4d9e8696..e7889b92399 100644 --- a/spring-test/src/test/java/org/springframework/test/context/junit4/spr4868/Jsr250LifecycleTests.java +++ b/spring-test/src/test/java/org/springframework/test/context/junit4/spr4868/Jsr250LifecycleTests.java @@ -16,9 +16,8 @@ package org.springframework.test.context.junit4.spr4868; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - +import jakarta.annotation.PostConstruct; +import jakarta.annotation.PreDestroy; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.After; diff --git a/spring-test/src/test/java/org/springframework/test/context/junit4/spr4868/LifecycleBean.java b/spring-test/src/test/java/org/springframework/test/context/junit4/spr4868/LifecycleBean.java index be527d05a90..fe452ee03fc 100644 --- a/spring-test/src/test/java/org/springframework/test/context/junit4/spr4868/LifecycleBean.java +++ b/spring-test/src/test/java/org/springframework/test/context/junit4/spr4868/LifecycleBean.java @@ -16,9 +16,8 @@ package org.springframework.test.context.junit4.spr4868; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - +import jakarta.annotation.PostConstruct; +import jakarta.annotation.PreDestroy; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass1.java b/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass1.java index 4726b44119b..9567ddd3b86 100644 --- a/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass1.java +++ b/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass1.java @@ -16,9 +16,9 @@ package org.springframework.test.context.junit4.spr8849; -import javax.annotation.Resource; import javax.sql.DataSource; +import jakarta.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass2.java b/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass2.java index 2b0c99398d5..0cca4255043 100644 --- a/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass2.java +++ b/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass2.java @@ -16,9 +16,9 @@ package org.springframework.test.context.junit4.spr8849; -import javax.annotation.Resource; import javax.sql.DataSource; +import jakarta.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass3.java b/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass3.java index 953ee8e471d..1d978e8524e 100644 --- a/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass3.java +++ b/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass3.java @@ -16,9 +16,9 @@ package org.springframework.test.context.junit4.spr8849; -import javax.annotation.Resource; import javax.sql.DataSource; +import jakarta.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass4.java b/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass4.java index 4f4f76f4bb7..7a6a189549f 100644 --- a/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass4.java +++ b/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass4.java @@ -16,9 +16,9 @@ package org.springframework.test.context.junit4.spr8849; -import javax.annotation.Resource; import javax.sql.DataSource; +import jakarta.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/spring-test/src/test/java/org/springframework/test/context/junit4/spr9051/LifecycleBean.java b/spring-test/src/test/java/org/springframework/test/context/junit4/spr9051/LifecycleBean.java index 64876355d05..2a8c01156c2 100644 --- a/spring-test/src/test/java/org/springframework/test/context/junit4/spr9051/LifecycleBean.java +++ b/spring-test/src/test/java/org/springframework/test/context/junit4/spr9051/LifecycleBean.java @@ -16,7 +16,7 @@ package org.springframework.test.context.junit4.spr9051; -import javax.annotation.PostConstruct; +import jakarta.annotation.PostConstruct; /** * Simple POJO that contains lifecycle callbacks. diff --git a/spring-test/src/test/java/org/springframework/test/context/testng/ConcreteTransactionalTestNGSpringContextTests.java b/spring-test/src/test/java/org/springframework/test/context/testng/ConcreteTransactionalTestNGSpringContextTests.java index 3da61007d1e..191f03683fa 100644 --- a/spring-test/src/test/java/org/springframework/test/context/testng/ConcreteTransactionalTestNGSpringContextTests.java +++ b/spring-test/src/test/java/org/springframework/test/context/testng/ConcreteTransactionalTestNGSpringContextTests.java @@ -16,8 +16,7 @@ package org.springframework.test.context.testng; -import javax.annotation.Resource; - +import jakarta.annotation.Resource; import org.testng.annotations.AfterClass; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeClass; diff --git a/spring-test/src/test/java/org/springframework/test/context/testng/transaction/ejb/AbstractEjbTxDaoTestNGTests.java b/spring-test/src/test/java/org/springframework/test/context/testng/transaction/ejb/AbstractEjbTxDaoTestNGTests.java index 98eae227ce6..3b56ad3f329 100644 --- a/spring-test/src/test/java/org/springframework/test/context/testng/transaction/ejb/AbstractEjbTxDaoTestNGTests.java +++ b/spring-test/src/test/java/org/springframework/test/context/testng/transaction/ejb/AbstractEjbTxDaoTestNGTests.java @@ -16,10 +16,9 @@ package org.springframework.test.context.testng.transaction.ejb; -import javax.ejb.EJB; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; - +import jakarta.ejb.EJB; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; import org.testng.annotations.AfterMethod; import org.testng.annotations.Test; diff --git a/spring-test/src/test/java/org/springframework/test/context/testng/web/TestNGSpringContextWebTests.java b/spring-test/src/test/java/org/springframework/test/context/testng/web/TestNGSpringContextWebTests.java index 14bead449f1..e919453d2f4 100644 --- a/spring-test/src/test/java/org/springframework/test/context/testng/web/TestNGSpringContextWebTests.java +++ b/spring-test/src/test/java/org/springframework/test/context/testng/web/TestNGSpringContextWebTests.java @@ -18,8 +18,7 @@ package org.springframework.test.context.testng.web; import java.io.File; -import javax.servlet.ServletContext; - +import jakarta.servlet.ServletContext; import org.testng.annotations.Test; import org.springframework.beans.factory.annotation.Autowired; diff --git a/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/AbstractEjbTxDaoTests.java b/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/AbstractEjbTxDaoTests.java index a98ce7135cc..03183be05c6 100644 --- a/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/AbstractEjbTxDaoTests.java +++ b/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/AbstractEjbTxDaoTests.java @@ -16,10 +16,9 @@ package org.springframework.test.context.transaction.ejb; -import javax.ejb.EJB; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; - +import jakarta.ejb.EJB; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.MethodOrderer; import org.junit.jupiter.api.Test; diff --git a/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/dao/AbstractEjbTxTestEntityDao.java b/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/dao/AbstractEjbTxTestEntityDao.java index ed518cfc257..f1bd39dcaf9 100644 --- a/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/dao/AbstractEjbTxTestEntityDao.java +++ b/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/dao/AbstractEjbTxTestEntityDao.java @@ -16,9 +16,9 @@ package org.springframework.test.context.transaction.ejb.dao; -import javax.ejb.TransactionAttribute; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; +import jakarta.ejb.TransactionAttribute; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; import org.springframework.test.context.transaction.ejb.model.TestEntity; diff --git a/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/dao/RequiredEjbTxTestEntityDao.java b/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/dao/RequiredEjbTxTestEntityDao.java index f87fa0aa97d..667e6acbe87 100644 --- a/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/dao/RequiredEjbTxTestEntityDao.java +++ b/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/dao/RequiredEjbTxTestEntityDao.java @@ -16,10 +16,10 @@ package org.springframework.test.context.transaction.ejb.dao; -import javax.ejb.Local; -import javax.ejb.Stateless; -import javax.ejb.TransactionAttribute; -import javax.ejb.TransactionAttributeType; +import jakarta.ejb.Local; +import jakarta.ejb.Stateless; +import jakarta.ejb.TransactionAttribute; +import jakarta.ejb.TransactionAttributeType; /** * EJB implementation of {@link TestEntityDao} which declares transaction diff --git a/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/dao/RequiresNewEjbTxTestEntityDao.java b/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/dao/RequiresNewEjbTxTestEntityDao.java index e9957398501..b7e9281c7c8 100644 --- a/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/dao/RequiresNewEjbTxTestEntityDao.java +++ b/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/dao/RequiresNewEjbTxTestEntityDao.java @@ -16,10 +16,10 @@ package org.springframework.test.context.transaction.ejb.dao; -import javax.ejb.Local; -import javax.ejb.Stateless; -import javax.ejb.TransactionAttribute; -import javax.ejb.TransactionAttributeType; +import jakarta.ejb.Local; +import jakarta.ejb.Stateless; +import jakarta.ejb.TransactionAttribute; +import jakarta.ejb.TransactionAttributeType; /** * EJB implementation of {@link TestEntityDao} which declares transaction diff --git a/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/model/TestEntity.java b/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/model/TestEntity.java index 9f1cd44840b..79a87ac9908 100644 --- a/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/model/TestEntity.java +++ b/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/model/TestEntity.java @@ -16,10 +16,10 @@ package org.springframework.test.context.transaction.ejb.model; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; /** * Test entity for EJB transaction support in the TestContext framework. diff --git a/spring-test/src/test/java/org/springframework/test/context/web/AbstractBasicWacTests.java b/spring-test/src/test/java/org/springframework/test/context/web/AbstractBasicWacTests.java index facccee81ef..32a13490a22 100644 --- a/spring-test/src/test/java/org/springframework/test/context/web/AbstractBasicWacTests.java +++ b/spring-test/src/test/java/org/springframework/test/context/web/AbstractBasicWacTests.java @@ -18,8 +18,7 @@ package org.springframework.test.context.web; import java.io.File; -import javax.servlet.ServletContext; - +import jakarta.servlet.ServletContext; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/spring-test/src/test/java/org/springframework/test/context/web/JUnit4SpringContextWebTests.java b/spring-test/src/test/java/org/springframework/test/context/web/JUnit4SpringContextWebTests.java index 4119039364e..a24e430b87d 100644 --- a/spring-test/src/test/java/org/springframework/test/context/web/JUnit4SpringContextWebTests.java +++ b/spring-test/src/test/java/org/springframework/test/context/web/JUnit4SpringContextWebTests.java @@ -18,8 +18,7 @@ package org.springframework.test.context.web; import java.io.File; -import javax.servlet.ServletContext; - +import jakarta.servlet.ServletContext; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; diff --git a/spring-test/src/test/java/org/springframework/test/context/web/ServletContextAwareBean.java b/spring-test/src/test/java/org/springframework/test/context/web/ServletContextAwareBean.java index 3e0e84fc9c4..d9f0109ca0a 100644 --- a/spring-test/src/test/java/org/springframework/test/context/web/ServletContextAwareBean.java +++ b/spring-test/src/test/java/org/springframework/test/context/web/ServletContextAwareBean.java @@ -16,7 +16,7 @@ package org.springframework.test.context.web; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import org.springframework.web.context.ServletContextAware; diff --git a/spring-test/src/test/java/org/springframework/test/context/web/socket/WebSocketServletServerContainerFactoryBeanTests.java b/spring-test/src/test/java/org/springframework/test/context/web/socket/WebSocketServletServerContainerFactoryBeanTests.java index 42fecb9d3af..b508f44d64b 100644 --- a/spring-test/src/test/java/org/springframework/test/context/web/socket/WebSocketServletServerContainerFactoryBeanTests.java +++ b/spring-test/src/test/java/org/springframework/test/context/web/socket/WebSocketServletServerContainerFactoryBeanTests.java @@ -16,8 +16,7 @@ package org.springframework.test.context.web.socket; -import javax.websocket.server.ServerContainer; - +import jakarta.websocket.server.ServerContainer; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; diff --git a/spring-test/src/test/java/org/springframework/test/util/subpackage/Component.java b/spring-test/src/test/java/org/springframework/test/util/subpackage/Component.java index f0b41c658ac..67659274138 100644 --- a/spring-test/src/test/java/org/springframework/test/util/subpackage/Component.java +++ b/spring-test/src/test/java/org/springframework/test/util/subpackage/Component.java @@ -16,8 +16,8 @@ package org.springframework.test.util.subpackage; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.PreDestroy; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.Assert; diff --git a/spring-test/src/test/java/org/springframework/test/web/Person.java b/spring-test/src/test/java/org/springframework/test/web/Person.java index 61e83c129be..2282b70dc30 100644 --- a/spring-test/src/test/java/org/springframework/test/web/Person.java +++ b/spring-test/src/test/java/org/springframework/test/web/Person.java @@ -16,8 +16,8 @@ package org.springframework.test.web; -import javax.validation.constraints.NotNull; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.validation.constraints.NotNull; +import jakarta.xml.bind.annotation.XmlRootElement; import org.springframework.util.ObjectUtils; diff --git a/spring-test/src/test/java/org/springframework/test/web/client/match/ContentRequestMatchersTests.java b/spring-test/src/test/java/org/springframework/test/web/client/match/ContentRequestMatchersTests.java index b36c9c9a068..2210fcf08bc 100644 --- a/spring-test/src/test/java/org/springframework/test/web/client/match/ContentRequestMatchersTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/client/match/ContentRequestMatchersTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,7 +19,6 @@ package org.springframework.test.web.client.match; import java.nio.charset.StandardCharsets; import java.util.Collections; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; @@ -38,13 +37,7 @@ import static org.hamcrest.Matchers.hasXPath; */ public class ContentRequestMatchersTests { - private MockClientHttpRequest request; - - - @BeforeEach - public void setUp() { - this.request = new MockClientHttpRequest(); - } + private final MockClientHttpRequest request = new MockClientHttpRequest(); @Test diff --git a/spring-test/src/test/java/org/springframework/test/web/client/match/MultipartRequestMatchersTests.java b/spring-test/src/test/java/org/springframework/test/web/client/match/MultipartRequestMatchersTests.java index 9f70ea77980..850bcb208da 100644 --- a/spring-test/src/test/java/org/springframework/test/web/client/match/MultipartRequestMatchersTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/client/match/MultipartRequestMatchersTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2020 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -53,7 +53,7 @@ public class MultipartRequestMatchersTests { @BeforeEach - public void setUp() { + public void setup() { this.request.getHeaders().setContentType(MediaType.MULTIPART_FORM_DATA); } diff --git a/spring-test/src/test/java/org/springframework/test/web/client/samples/matchers/XmlContentRequestMatchersIntegrationTests.java b/spring-test/src/test/java/org/springframework/test/web/client/samples/matchers/XmlContentRequestMatchersIntegrationTests.java index 897a3fc36f6..23994b1b985 100644 --- a/spring-test/src/test/java/org/springframework/test/web/client/samples/matchers/XmlContentRequestMatchersIntegrationTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/client/samples/matchers/XmlContentRequestMatchersIntegrationTests.java @@ -22,12 +22,11 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlElementWrapper; -import javax.xml.bind.annotation.XmlRootElement; - +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlElementWrapper; +import jakarta.xml.bind.annotation.XmlRootElement; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-test/src/test/java/org/springframework/test/web/client/samples/matchers/XpathRequestMatchersIntegrationTests.java b/spring-test/src/test/java/org/springframework/test/web/client/samples/matchers/XpathRequestMatchersIntegrationTests.java index 6654a579f40..d48d6d881ad 100644 --- a/spring-test/src/test/java/org/springframework/test/web/client/samples/matchers/XpathRequestMatchersIntegrationTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/client/samples/matchers/XpathRequestMatchersIntegrationTests.java @@ -24,12 +24,11 @@ import java.util.Collections; import java.util.List; import java.util.Map; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlElementWrapper; -import javax.xml.bind.annotation.XmlRootElement; - +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlElementWrapper; +import jakarta.xml.bind.annotation.XmlRootElement; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-test/src/test/java/org/springframework/test/web/reactive/server/samples/Person.java b/spring-test/src/test/java/org/springframework/test/web/reactive/server/samples/Person.java index 23c2115e1d7..7dfd5189ddd 100644 --- a/spring-test/src/test/java/org/springframework/test/web/reactive/server/samples/Person.java +++ b/spring-test/src/test/java/org/springframework/test/web/reactive/server/samples/Person.java @@ -15,10 +15,9 @@ */ package org.springframework.test.web.reactive.server.samples; -import javax.xml.bind.annotation.XmlRootElement; - import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement class Person { diff --git a/spring-test/src/test/java/org/springframework/test/web/reactive/server/samples/XmlContentTests.java b/spring-test/src/test/java/org/springframework/test/web/reactive/server/samples/XmlContentTests.java index 870c7231e05..fef7d629a2b 100644 --- a/spring-test/src/test/java/org/springframework/test/web/reactive/server/samples/XmlContentTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/reactive/server/samples/XmlContentTests.java @@ -21,11 +21,10 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import org.junit.jupiter.api.Test; import org.springframework.http.HttpHeaders; diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/HelloController.java b/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/HelloController.java index 848aa704225..d430cdcd80b 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/HelloController.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/HelloController.java @@ -16,7 +16,7 @@ package org.springframework.test.web.servlet.htmlunit; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/HtmlUnitRequestBuilderTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/HtmlUnitRequestBuilderTests.java index 96ebbb4ed52..5e3fdaa3f60 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/HtmlUnitRequestBuilderTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/HtmlUnitRequestBuilderTests.java @@ -28,11 +28,6 @@ import java.util.HashMap; import java.util.Locale; import java.util.Map; -import javax.servlet.ServletContext; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpSession; -import javax.servlet.http.Part; - import com.gargoylesoftware.htmlunit.FormEncodingType; import com.gargoylesoftware.htmlunit.HttpMethod; import com.gargoylesoftware.htmlunit.WebClient; @@ -40,6 +35,10 @@ import com.gargoylesoftware.htmlunit.WebRequest; import com.gargoylesoftware.htmlunit.util.KeyDataPair; import com.gargoylesoftware.htmlunit.util.MimeType; import com.gargoylesoftware.htmlunit.util.NameValuePair; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpSession; +import jakarta.servlet.http.Part; import org.apache.commons.io.IOUtils; import org.apache.http.auth.UsernamePasswordCredentials; import org.junit.jupiter.api.BeforeEach; diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/MockMvcConnectionBuilderSupportTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/MockMvcConnectionBuilderSupportTests.java index 20abbd53e5d..c2040c84912 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/MockMvcConnectionBuilderSupportTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/MockMvcConnectionBuilderSupportTests.java @@ -19,12 +19,11 @@ package org.springframework.test.web.servlet.htmlunit; import java.io.IOException; import java.net.URL; -import javax.servlet.http.HttpServletRequest; - import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.WebConnection; import com.gargoylesoftware.htmlunit.WebRequest; import com.gargoylesoftware.htmlunit.WebResponse; +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/MockMvcWebClientBuilderTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/MockMvcWebClientBuilderTests.java index ea425f63b41..ca50d3d90e2 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/MockMvcWebClientBuilderTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/MockMvcWebClientBuilderTests.java @@ -19,14 +19,13 @@ package org.springframework.test.web.servlet.htmlunit; import java.io.IOException; import java.net.URL; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import com.gargoylesoftware.htmlunit.HttpMethod; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.WebRequest; import com.gargoylesoftware.htmlunit.WebResponse; import com.gargoylesoftware.htmlunit.util.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.Configuration; @@ -157,13 +156,13 @@ class MockMvcWebClientBuilderTests { @PostMapping(path = "/", produces = "text/plain") String setCookie(@RequestParam String cookie, HttpServletResponse response) { - response.addCookie(new javax.servlet.http.Cookie(COOKIE_NAME, cookie)); + response.addCookie(new jakarta.servlet.http.Cookie(COOKIE_NAME, cookie)); return "Set"; } @DeleteMapping(path = "/", produces = "text/plain") String deleteCookie(HttpServletResponse response) { - javax.servlet.http.Cookie cookie = new javax.servlet.http.Cookie(COOKIE_NAME, ""); + jakarta.servlet.http.Cookie cookie = new jakarta.servlet.http.Cookie(COOKIE_NAME, ""); cookie.setMaxAge(0); response.addCookie(cookie); return "Delete"; diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/MockWebResponseBuilderTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/MockWebResponseBuilderTests.java index eb4797cd0e7..9b6a102a2f4 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/MockWebResponseBuilderTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/MockWebResponseBuilderTests.java @@ -20,11 +20,10 @@ import java.net.URL; import java.nio.charset.StandardCharsets; import java.util.List; -import javax.servlet.http.Cookie; - import com.gargoylesoftware.htmlunit.WebRequest; import com.gargoylesoftware.htmlunit.WebResponse; import com.gargoylesoftware.htmlunit.util.NameValuePair; +import jakarta.servlet.http.Cookie; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/webdriver/MockMvcHtmlUnitDriverBuilderTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/webdriver/MockMvcHtmlUnitDriverBuilderTests.java index ee85328fc55..d817f25194f 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/webdriver/MockMvcHtmlUnitDriverBuilderTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/webdriver/MockMvcHtmlUnitDriverBuilderTests.java @@ -18,9 +18,8 @@ package org.springframework.test.web.servlet.htmlunit.webdriver; import java.io.IOException; -import javax.servlet.http.HttpServletRequest; - import com.gargoylesoftware.htmlunit.util.Cookie; +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.Test; import org.openqa.selenium.htmlunit.HtmlUnitDriver; diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilderTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilderTests.java index b493cbbca4d..6cdf99d09fc 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilderTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilderTests.java @@ -29,9 +29,8 @@ import java.util.List; import java.util.Locale; import java.util.Map; -import javax.servlet.ServletContext; -import javax.servlet.http.Cookie; - +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.Cookie; import org.junit.jupiter.api.Test; import org.springframework.http.HttpHeaders; diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/request/MockMultipartHttpServletRequestBuilderTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/request/MockMultipartHttpServletRequestBuilderTests.java index 22263b90959..b58e329a3d6 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/request/MockMultipartHttpServletRequestBuilderTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/request/MockMultipartHttpServletRequestBuilderTests.java @@ -16,8 +16,7 @@ package org.springframework.test.web.servlet.request; -import javax.servlet.http.Part; - +import jakarta.servlet.http.Part; import org.junit.jupiter.api.Test; import org.springframework.http.HttpMethod; diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/result/PrintingResultHandlerTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/result/PrintingResultHandlerTests.java index f91c39fda96..c7c3cab6772 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/result/PrintingResultHandlerTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/result/PrintingResultHandlerTests.java @@ -22,9 +22,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpSession; - +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpSession; import org.junit.jupiter.api.Test; import org.mockito.Mockito; diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/context/JavaConfigTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/context/JavaConfigTests.java index 7f27c859c6d..3026b5af21b 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/context/JavaConfigTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/context/JavaConfigTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2020 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -39,9 +39,7 @@ import org.springframework.web.servlet.config.annotation.DefaultServletHandlerCo import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; -import org.springframework.web.servlet.config.annotation.ViewResolverRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; -import org.springframework.web.servlet.view.tiles3.TilesConfigurer; import static org.mockito.BDDMockito.given; @@ -84,14 +82,6 @@ class JavaConfigTests { .expectBody().json("{\"name\":\"Joe\",\"someDouble\":0.0,\"someBoolean\":false}"); } - @Test - void tilesDefinitions() { - testClient.get().uri("/") - .exchange() - .expectStatus().isOk() - .expectHeader().valueEquals("Forwarded-Url", "/WEB-INF/layouts/standardLayout.jsp"); - } - @Configuration static class RootConfig { @@ -128,18 +118,6 @@ class JavaConfigTests { public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); } - - @Override - public void configureViewResolvers(ViewResolverRegistry registry) { - registry.tiles(); - } - - @Bean - TilesConfigurer tilesConfigurer() { - TilesConfigurer configurer = new TilesConfigurer(); - configurer.setDefinitions("/WEB-INF/**/tiles.xml"); - return configurer; - } } } diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/context/WebAppResourceTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/context/WebAppResourceTests.java index ec356ba0721..58e58104d60 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/context/WebAppResourceTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/context/WebAppResourceTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2020 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -60,16 +60,6 @@ public class WebAppResourceTests { this.testClient = MockMvcWebTestClient.bindToApplicationContext(this.wac).build(); } - // TilesConfigurer: resources under "/WEB-INF/**/tiles.xml" - - @Test - public void tilesDefinitions() { - testClient.get().uri("/") - .exchange() - .expectStatus().isOk() - .expectHeader().valueEquals("Forwarded-Url", "/WEB-INF/layouts/standardLayout.jsp"); - } - // Resources served via @Test diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/context/XmlConfigTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/context/XmlConfigTests.java index f3364da5795..84fa33c0d56 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/context/XmlConfigTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/context/XmlConfigTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2020 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -73,12 +73,4 @@ public class XmlConfigTests { .expectBody().json("{\"name\":\"Joe\",\"someDouble\":0.0,\"someBoolean\":false}"); } - @Test - public void tilesDefinitions() { - testClient.get().uri("/") - .exchange() - .expectStatus().isOk() - .expectHeader().valueEquals("Forwarded-Url", "/WEB-INF/layouts/standardLayout.jsp"); - } - } diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/FilterTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/FilterTests.java index 3016c00d794..6adae504d18 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/FilterTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/FilterTests.java @@ -20,19 +20,18 @@ import java.io.IOException; import java.security.Principal; import java.util.concurrent.CompletableFuture; -import javax.servlet.AsyncContext; -import javax.servlet.AsyncListener; -import javax.servlet.FilterChain; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpServletResponseWrapper; -import javax.validation.Valid; - +import jakarta.servlet.AsyncContext; +import jakarta.servlet.AsyncListener; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponseWrapper; +import jakarta.validation.Valid; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/MultipartControllerTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/MultipartControllerTests.java index b60a0e6f6e3..66a60d16dd6 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/MultipartControllerTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/MultipartControllerTests.java @@ -23,13 +23,12 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.Part; - +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.Part; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/RedirectTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/RedirectTests.java index 18c48affbcf..0bd139cf9b7 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/RedirectTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/RedirectTests.java @@ -16,8 +16,7 @@ package org.springframework.test.web.servlet.samples.client.standalone; -import javax.validation.Valid; - +import jakarta.validation.Valid; import org.junit.jupiter.api.Test; import org.springframework.stereotype.Controller; diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/ResponseBodyTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/ResponseBodyTests.java index 1f8cd1f787c..691a60e8040 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/ResponseBodyTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/ResponseBodyTests.java @@ -16,8 +16,7 @@ package org.springframework.test.web.servlet.samples.client.standalone; -import javax.validation.constraints.NotNull; - +import jakarta.validation.constraints.NotNull; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/resulthandlers/PrintingResultHandlerSmokeTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/resulthandlers/PrintingResultHandlerSmokeTests.java index 629ada4fa9a..61ccee4fb32 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/resulthandlers/PrintingResultHandlerSmokeTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/resulthandlers/PrintingResultHandlerSmokeTests.java @@ -18,9 +18,8 @@ package org.springframework.test.web.servlet.samples.client.standalone.resulthan import java.nio.charset.StandardCharsets; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/resultmatches/ModelAssertionTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/resultmatches/ModelAssertionTests.java index 76384b3b437..3794eb41671 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/resultmatches/ModelAssertionTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/resultmatches/ModelAssertionTests.java @@ -16,8 +16,7 @@ package org.springframework.test.web.servlet.samples.client.standalone.resultmatches; -import javax.validation.Valid; - +import jakarta.validation.Valid; import org.junit.jupiter.api.Test; import org.springframework.http.HttpMethod; diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/resultmatches/XmlContentAssertionTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/resultmatches/XmlContentAssertionTests.java index a6084599376..029b7686159 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/resultmatches/XmlContentAssertionTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/resultmatches/XmlContentAssertionTests.java @@ -19,12 +19,11 @@ package org.springframework.test.web.servlet.samples.client.standalone.resultmat import java.util.Arrays; import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlElementWrapper; -import javax.xml.bind.annotation.XmlRootElement; - +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlElementWrapper; +import jakarta.xml.bind.annotation.XmlRootElement; import org.junit.jupiter.api.Test; import org.springframework.http.HttpHeaders; diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/resultmatches/XpathAssertionTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/resultmatches/XpathAssertionTests.java index b464c422490..e7f50190afc 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/resultmatches/XpathAssertionTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/resultmatches/XpathAssertionTests.java @@ -21,12 +21,11 @@ import java.util.Collections; import java.util.List; import java.util.Map; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlElementWrapper; -import javax.xml.bind.annotation.XmlRootElement; - +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlElementWrapper; +import jakarta.xml.bind.annotation.XmlRootElement; import org.junit.jupiter.api.Test; import org.springframework.http.HttpHeaders; diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/context/JavaConfigTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/context/JavaConfigTests.java index 9cde95fe2ce..48646aa92a3 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/context/JavaConfigTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/context/JavaConfigTests.java @@ -16,8 +16,7 @@ package org.springframework.test.web.servlet.samples.context; -import javax.servlet.ServletContext; - +import jakarta.servlet.ServletContext; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -42,9 +41,7 @@ import org.springframework.web.servlet.config.annotation.DefaultServletHandlerCo import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; -import org.springframework.web.servlet.config.annotation.ViewResolverRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; -import org.springframework.web.servlet.view.tiles3.TilesConfigurer; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; @@ -52,7 +49,6 @@ import static org.mockito.BDDMockito.given; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.forwardedUrl; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -130,13 +126,6 @@ public class JavaConfigTests { .satisfies(error -> assertThat(error.getSuppressed()).hasSize(2)); } - @Test - public void tilesDefinitions() throws Exception { - this.mockMvc.perform(get("/")) - .andExpect(status().isOk()) - .andExpect(forwardedUrl("/WEB-INF/layouts/standardLayout.jsp")); - } - /** * Verify that the breaking change introduced in SPR-12553 has been reverted. @@ -202,18 +191,6 @@ public class JavaConfigTests { public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); } - - @Override - public void configureViewResolvers(ViewResolverRegistry registry) { - registry.tiles(); - } - - @Bean - public TilesConfigurer tilesConfigurer() { - TilesConfigurer configurer = new TilesConfigurer(); - configurer.setDefinitions("/WEB-INF/**/tiles.xml"); - return configurer; - } } } diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/context/WebAppResourceTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/context/WebAppResourceTests.java index 57c3b1737a8..b4c46125c7e 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/context/WebAppResourceTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/context/WebAppResourceTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -60,14 +60,6 @@ public class WebAppResourceTests { this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).alwaysExpect(status().isOk()).build(); } - // TilesConfigurer: resources under "/WEB-INF/**/tiles.xml" - - @Test - public void tilesDefinitions() throws Exception { - this.mockMvc.perform(get("/")) - .andExpect(forwardedUrl("/WEB-INF/layouts/standardLayout.jsp")); - } - // Resources served via @Test diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/context/XmlConfigTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/context/XmlConfigTests.java index 783aead7479..bda280e7e95 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/context/XmlConfigTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/context/XmlConfigTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -35,7 +35,6 @@ import static org.mockito.BDDMockito.given; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.forwardedUrl; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** @@ -75,11 +74,4 @@ public class XmlConfigTests { .andExpect(content().string("{\"name\":\"Joe\",\"someDouble\":0.0,\"someBoolean\":false}")); } - @Test - public void tilesDefinitions() throws Exception { - this.mockMvc.perform(get("/"))// - .andExpect(status().isOk())// - .andExpect(forwardedUrl("/WEB-INF/layouts/standardLayout.jsp")); - } - } diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/spr/CustomRequestAttributesRequestContextHolderTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/spr/CustomRequestAttributesRequestContextHolderTests.java index acf32025509..e9aa203f394 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/spr/CustomRequestAttributesRequestContextHolderTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/spr/CustomRequestAttributesRequestContextHolderTests.java @@ -16,10 +16,9 @@ package org.springframework.test.web.servlet.samples.spr; -import javax.servlet.ServletContext; -import javax.servlet.ServletRequest; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/spr/RequestContextHolderTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/spr/RequestContextHolderTests.java index 8cdafdf10c8..be54c77e7f0 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/spr/RequestContextHolderTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/spr/RequestContextHolderTests.java @@ -18,11 +18,10 @@ package org.springframework.test.web.servlet.samples.spr; import java.io.IOException; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; - +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/FilterTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/FilterTests.java index 93bb514d195..07b359ee6e3 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/FilterTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/FilterTests.java @@ -20,20 +20,19 @@ import java.io.IOException; import java.security.Principal; import java.util.concurrent.CompletableFuture; -import javax.servlet.AsyncContext; -import javax.servlet.AsyncListener; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpServletResponseWrapper; -import javax.validation.Valid; - +import jakarta.servlet.AsyncContext; +import jakarta.servlet.AsyncListener; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponseWrapper; +import jakarta.validation.Valid; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/MultipartControllerTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/MultipartControllerTests.java index a00dd2774e3..e61d50f0d6e 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/MultipartControllerTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/MultipartControllerTests.java @@ -23,14 +23,13 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.Part; - +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.Part; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/RedirectTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/RedirectTests.java index 0981973439a..60df4a8fffd 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/RedirectTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/RedirectTests.java @@ -16,8 +16,7 @@ package org.springframework.test.web.servlet.samples.standalone; -import javax.validation.Valid; - +import jakarta.validation.Valid; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resulthandlers/PrintingResultHandlerIntegrationTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resulthandlers/PrintingResultHandlerIntegrationTests.java index 9d47134e0fb..726743039a1 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resulthandlers/PrintingResultHandlerIntegrationTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resulthandlers/PrintingResultHandlerIntegrationTests.java @@ -18,9 +18,8 @@ package org.springframework.test.web.servlet.samples.standalone.resulthandlers; import java.io.StringWriter; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.Test; import org.springframework.test.web.servlet.result.PrintingResultHandler; diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resulthandlers/PrintingResultHandlerSmokeTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resulthandlers/PrintingResultHandlerSmokeTests.java index 1600c095263..87986b2a014 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resulthandlers/PrintingResultHandlerSmokeTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resulthandlers/PrintingResultHandlerSmokeTests.java @@ -18,9 +18,8 @@ package org.springframework.test.web.servlet.samples.standalone.resulthandlers; import java.io.StringWriter; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/ModelAssertionTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/ModelAssertionTests.java index a22b760bc82..1f5e4471e0a 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/ModelAssertionTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/ModelAssertionTests.java @@ -16,8 +16,7 @@ package org.springframework.test.web.servlet.samples.standalone.resultmatchers; -import javax.validation.Valid; - +import jakarta.validation.Valid; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/XmlContentAssertionTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/XmlContentAssertionTests.java index 11540766e5e..a2abe1f75b3 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/XmlContentAssertionTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/XmlContentAssertionTests.java @@ -19,12 +19,11 @@ package org.springframework.test.web.servlet.samples.standalone.resultmatchers; import java.util.Arrays; import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlElementWrapper; -import javax.xml.bind.annotation.XmlRootElement; - +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlElementWrapper; +import jakarta.xml.bind.annotation.XmlRootElement; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/XpathAssertionTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/XpathAssertionTests.java index 4bd5d2fc3dd..3bece04be76 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/XpathAssertionTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/XpathAssertionTests.java @@ -21,12 +21,11 @@ import java.util.Collections; import java.util.List; import java.util.Map; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlElementWrapper; -import javax.xml.bind.annotation.XmlRootElement; - +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlElementWrapper; +import jakarta.xml.bind.annotation.XmlRootElement; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/setup/ConditionalDelegatingFilterProxyTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/setup/ConditionalDelegatingFilterProxyTests.java index 9fbc3c94569..ffaa26a02a4 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/setup/ConditionalDelegatingFilterProxyTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/setup/ConditionalDelegatingFilterProxyTests.java @@ -16,13 +16,12 @@ package org.springframework.test.web.servlet.setup; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; - +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/setup/SharedHttpSessionTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/setup/SharedHttpSessionTests.java index 31f308cff65..92d194f5139 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/setup/SharedHttpSessionTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/setup/SharedHttpSessionTests.java @@ -16,8 +16,7 @@ package org.springframework.test.web.servlet.setup; -import javax.servlet.http.HttpSession; - +import jakarta.servlet.http.HttpSession; import org.junit.jupiter.api.Test; import org.springframework.stereotype.Controller; diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/setup/StandaloneMockMvcBuilderTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/setup/StandaloneMockMvcBuilderTests.java index d55800e1817..463ad180730 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/setup/StandaloneMockMvcBuilderTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/setup/StandaloneMockMvcBuilderTests.java @@ -18,14 +18,13 @@ package org.springframework.test.web.servlet.setup; import java.io.IOException; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.ser.impl.UnknownSerializer; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.Test; import org.springframework.http.converter.json.SpringHandlerInstantiator; diff --git a/spring-test/src/test/resources/org/springframework/test/web/servlet/samples/context/servlet-context.xml b/spring-test/src/test/resources/org/springframework/test/web/servlet/samples/context/servlet-context.xml index 0c442c5d7b8..7322877fbb5 100644 --- a/spring-test/src/test/resources/org/springframework/test/web/servlet/samples/context/servlet-context.xml +++ b/spring-test/src/test/resources/org/springframework/test/web/servlet/samples/context/servlet-context.xml @@ -5,31 +5,16 @@ http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans-3.1.xsd"> - + - + - + - - - - - - - - - - /WEB-INF/**/tiles.xml - - - + \ No newline at end of file diff --git a/spring-tx/spring-tx.gradle b/spring-tx/spring-tx.gradle index f3ec8c3f3ac..293804e78cd 100644 --- a/spring-tx/spring-tx.gradle +++ b/spring-tx/spring-tx.gradle @@ -7,11 +7,10 @@ dependencies { api(project(":spring-core")) optional(project(":spring-aop")) optional(project(":spring-context")) // for JCA, @EnableTransactionManagement - optional("javax.ejb:javax.ejb-api") - optional("javax.interceptor:javax.interceptor-api") - optional("javax.resource:javax.resource-api") - optional("javax.transaction:javax.transaction-api") - optional("com.ibm.websphere:uow") + optional("jakarta.ejb:jakarta.ejb-api") + optional("jakarta.interceptor:jakarta.interceptor-api") + optional("jakarta.resource:jakarta.resource-api") + optional("jakarta.transaction:jakarta.transaction-api") optional("io.projectreactor:reactor-core") optional("io.vavr:vavr") optional("org.jetbrains.kotlin:kotlin-reflect") @@ -23,6 +22,6 @@ dependencies { testImplementation(testFixtures(project(":spring-core"))) testImplementation("org.aspectj:aspectjweaver") testImplementation("org.codehaus.groovy:groovy") - testImplementation("org.eclipse.persistence:javax.persistence") + testImplementation("jakarta.persistence:jakarta.persistence-api") testImplementation("io.projectreactor:reactor-test") } diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/CannotCreateRecordException.java b/spring-tx/src/main/java/org/springframework/jca/cci/CannotCreateRecordException.java deleted file mode 100644 index 5685b061c97..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/cci/CannotCreateRecordException.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2002-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.cci; - -import javax.resource.ResourceException; - -import org.springframework.dao.DataAccessResourceFailureException; - -/** - * Exception thrown when the creating of a CCI Record failed - * for connector-internal reasons. - * - * @author Juergen Hoeller - * @since 1.2 - * @deprecated as of 5.3, in favor of specific data access APIs - * (or native CCI usage if there is no alternative) - */ -@Deprecated -@SuppressWarnings("serial") -public class CannotCreateRecordException extends DataAccessResourceFailureException { - - /** - * Constructor for CannotCreateRecordException. - * @param msg message - * @param ex the root ResourceException cause - */ - public CannotCreateRecordException(String msg, ResourceException ex) { - super(msg, ex); - } - -} diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/CannotGetCciConnectionException.java b/spring-tx/src/main/java/org/springframework/jca/cci/CannotGetCciConnectionException.java deleted file mode 100644 index dcd68cecc40..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/cci/CannotGetCciConnectionException.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2002-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.cci; - -import javax.resource.ResourceException; - -import org.springframework.dao.DataAccessResourceFailureException; - -/** - * Fatal exception thrown when we can't connect to an EIS using CCI. - * - * @author Thierry Templier - * @author Juergen Hoeller - * @since 1.2 - * @deprecated as of 5.3, in favor of specific data access APIs - * (or native CCI usage if there is no alternative) - */ -@Deprecated -@SuppressWarnings("serial") -public class CannotGetCciConnectionException extends DataAccessResourceFailureException { - - /** - * Constructor for CannotGetCciConnectionException. - * @param msg message - * @param ex the root ResourceException cause - */ - public CannotGetCciConnectionException(String msg, ResourceException ex) { - super(msg, ex); - } - -} diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/CciOperationNotSupportedException.java b/spring-tx/src/main/java/org/springframework/jca/cci/CciOperationNotSupportedException.java deleted file mode 100644 index bc2d9df4be8..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/cci/CciOperationNotSupportedException.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2002-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.cci; - -import javax.resource.ResourceException; - -import org.springframework.dao.InvalidDataAccessResourceUsageException; - -/** - * Exception thrown when the connector doesn't support a specific CCI operation. - * - * @author Juergen Hoeller - * @since 1.2 - * @deprecated as of 5.3, in favor of specific data access APIs - * (or native CCI usage if there is no alternative) - */ -@Deprecated -@SuppressWarnings("serial") -public class CciOperationNotSupportedException extends InvalidDataAccessResourceUsageException { - - /** - * Constructor for CciOperationNotSupportedException. - * @param msg message - * @param ex the root ResourceException cause - */ - public CciOperationNotSupportedException(String msg, ResourceException ex) { - super(msg, ex); - } - -} diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/InvalidResultSetAccessException.java b/spring-tx/src/main/java/org/springframework/jca/cci/InvalidResultSetAccessException.java deleted file mode 100644 index f7a1895cf9c..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/cci/InvalidResultSetAccessException.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.cci; - -import java.sql.SQLException; - -import org.springframework.dao.InvalidDataAccessResourceUsageException; - -/** - * Exception thrown when a ResultSet has been accessed in an invalid fashion. - * Such exceptions always have a {@code java.sql.SQLException} root cause. - * - *

    This typically happens when an invalid ResultSet column index or name - * has been specified. - * - * @author Juergen Hoeller - * @since 1.2 - * @see javax.resource.cci.ResultSet - * @deprecated as of 5.3, in favor of specific data access APIs - * (or native CCI usage if there is no alternative) - */ -@Deprecated -@SuppressWarnings("serial") -public class InvalidResultSetAccessException extends InvalidDataAccessResourceUsageException { - - /** - * Constructor for InvalidResultSetAccessException. - * @param msg message - * @param ex the root cause - */ - public InvalidResultSetAccessException(String msg, SQLException ex) { - super(ex.getMessage(), ex); - } - -} diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/RecordTypeNotSupportedException.java b/spring-tx/src/main/java/org/springframework/jca/cci/RecordTypeNotSupportedException.java deleted file mode 100644 index b4e9bacc7a4..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/cci/RecordTypeNotSupportedException.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2002-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.cci; - -import javax.resource.ResourceException; - -import org.springframework.dao.InvalidDataAccessResourceUsageException; - -/** - * Exception thrown when the creating of a CCI Record failed because - * the connector doesn't support the desired CCI Record type. - * - * @author Juergen Hoeller - * @since 1.2 - * @deprecated as of 5.3, in favor of specific data access APIs - * (or native CCI usage if there is no alternative) - */ -@Deprecated -@SuppressWarnings("serial") -public class RecordTypeNotSupportedException extends InvalidDataAccessResourceUsageException { - - /** - * Constructor for RecordTypeNotSupportedException. - * @param msg message - * @param ex the root ResourceException cause - */ - public RecordTypeNotSupportedException(String msg, ResourceException ex) { - super(msg, ex); - } - -} diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/connection/CciLocalTransactionManager.java b/spring-tx/src/main/java/org/springframework/jca/cci/connection/CciLocalTransactionManager.java deleted file mode 100644 index 4b0ad9d51c0..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/cci/connection/CciLocalTransactionManager.java +++ /dev/null @@ -1,297 +0,0 @@ -/* - * Copyright 2002-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.cci.connection; - -import javax.resource.NotSupportedException; -import javax.resource.ResourceException; -import javax.resource.cci.Connection; -import javax.resource.cci.ConnectionFactory; -import javax.resource.spi.LocalTransactionException; - -import org.springframework.beans.factory.InitializingBean; -import org.springframework.lang.Nullable; -import org.springframework.transaction.CannotCreateTransactionException; -import org.springframework.transaction.TransactionDefinition; -import org.springframework.transaction.TransactionException; -import org.springframework.transaction.TransactionSystemException; -import org.springframework.transaction.support.AbstractPlatformTransactionManager; -import org.springframework.transaction.support.DefaultTransactionStatus; -import org.springframework.transaction.support.ResourceTransactionManager; -import org.springframework.transaction.support.TransactionSynchronizationManager; -import org.springframework.util.Assert; - -/** - * {@link org.springframework.transaction.PlatformTransactionManager} implementation - * that manages local transactions for a single CCI ConnectionFactory. - * Binds a CCI Connection from the specified ConnectionFactory to the thread, - * potentially allowing for one thread-bound Connection per ConnectionFactory. - * - *

    Application code is required to retrieve the CCI Connection via - * {@link ConnectionFactoryUtils#getConnection(ConnectionFactory)} instead of a standard - * Java EE-style {@link ConnectionFactory#getConnection()} call. Spring classes such as - * {@link org.springframework.jca.cci.core.CciTemplate} use this strategy implicitly. - * If not used in combination with this transaction manager, the - * {@link ConnectionFactoryUtils} lookup strategy behaves exactly like the native - * DataSource lookup; it can thus be used in a portable fashion. - * - *

    Alternatively, you can allow application code to work with the standard - * Java EE lookup pattern {@link ConnectionFactory#getConnection()}, for example - * for legacy code that is not aware of Spring at all. In that case, define a - * {@link TransactionAwareConnectionFactoryProxy} for your target ConnectionFactory, - * which will automatically participate in Spring-managed transactions. - * - * @author Thierry Templier - * @author Juergen Hoeller - * @since 1.2 - * @see ConnectionFactoryUtils#getConnection(javax.resource.cci.ConnectionFactory) - * @see ConnectionFactoryUtils#releaseConnection - * @see TransactionAwareConnectionFactoryProxy - * @see org.springframework.jca.cci.core.CciTemplate - * @deprecated as of 5.3, in favor of specific data access APIs - * (or native CCI usage if there is no alternative) - */ -@Deprecated -@SuppressWarnings("serial") -public class CciLocalTransactionManager extends AbstractPlatformTransactionManager - implements ResourceTransactionManager, InitializingBean { - - @Nullable - private ConnectionFactory connectionFactory; - - - /** - * Create a new CciLocalTransactionManager instance. - * A ConnectionFactory has to be set to be able to use it. - * @see #setConnectionFactory - */ - public CciLocalTransactionManager() { - } - - /** - * Create a new CciLocalTransactionManager instance. - * @param connectionFactory the CCI ConnectionFactory to manage local transactions for - */ - public CciLocalTransactionManager(ConnectionFactory connectionFactory) { - setConnectionFactory(connectionFactory); - afterPropertiesSet(); - } - - - /** - * Set the CCI ConnectionFactory that this instance should manage local - * transactions for. - */ - public void setConnectionFactory(@Nullable ConnectionFactory cf) { - if (cf instanceof TransactionAwareConnectionFactoryProxy) { - // If we got a TransactionAwareConnectionFactoryProxy, we need to perform transactions - // for its underlying target ConnectionFactory, else JMS access code won't see - // properly exposed transactions (i.e. transactions for the target ConnectionFactory). - this.connectionFactory = ((TransactionAwareConnectionFactoryProxy) cf).getTargetConnectionFactory(); - } - else { - this.connectionFactory = cf; - } - } - - /** - * Return the CCI ConnectionFactory that this instance manages local - * transactions for. - */ - @Nullable - public ConnectionFactory getConnectionFactory() { - return this.connectionFactory; - } - - private ConnectionFactory obtainConnectionFactory() { - ConnectionFactory connectionFactory = getConnectionFactory(); - Assert.state(connectionFactory != null, "No ConnectionFactory set"); - return connectionFactory; - } - - @Override - public void afterPropertiesSet() { - if (getConnectionFactory() == null) { - throw new IllegalArgumentException("Property 'connectionFactory' is required"); - } - } - - - @Override - public Object getResourceFactory() { - return obtainConnectionFactory(); - } - - @Override - protected Object doGetTransaction() { - CciLocalTransactionObject txObject = new CciLocalTransactionObject(); - ConnectionHolder conHolder = - (ConnectionHolder) TransactionSynchronizationManager.getResource(obtainConnectionFactory()); - txObject.setConnectionHolder(conHolder); - return txObject; - } - - @Override - protected boolean isExistingTransaction(Object transaction) { - CciLocalTransactionObject txObject = (CciLocalTransactionObject) transaction; - // Consider a pre-bound connection as transaction. - return txObject.hasConnectionHolder(); - } - - @Override - protected void doBegin(Object transaction, TransactionDefinition definition) { - CciLocalTransactionObject txObject = (CciLocalTransactionObject) transaction; - ConnectionFactory connectionFactory = obtainConnectionFactory(); - Connection con = null; - - try { - con = connectionFactory.getConnection(); - if (logger.isDebugEnabled()) { - logger.debug("Acquired Connection [" + con + "] for local CCI transaction"); - } - - ConnectionHolder connectionHolder = new ConnectionHolder(con); - connectionHolder.setSynchronizedWithTransaction(true); - - con.getLocalTransaction().begin(); - int timeout = determineTimeout(definition); - if (timeout != TransactionDefinition.TIMEOUT_DEFAULT) { - connectionHolder.setTimeoutInSeconds(timeout); - } - - txObject.setConnectionHolder(connectionHolder); - TransactionSynchronizationManager.bindResource(connectionFactory, connectionHolder); - } - catch (NotSupportedException ex) { - ConnectionFactoryUtils.releaseConnection(con, connectionFactory); - throw new CannotCreateTransactionException("CCI Connection does not support local transactions", ex); - } - catch (LocalTransactionException ex) { - ConnectionFactoryUtils.releaseConnection(con, connectionFactory); - throw new CannotCreateTransactionException("Could not begin local CCI transaction", ex); - } - catch (Throwable ex) { - ConnectionFactoryUtils.releaseConnection(con, connectionFactory); - throw new TransactionSystemException("Unexpected failure on begin of CCI local transaction", ex); - } - } - - @Override - protected Object doSuspend(Object transaction) { - CciLocalTransactionObject txObject = (CciLocalTransactionObject) transaction; - txObject.setConnectionHolder(null); - return TransactionSynchronizationManager.unbindResource(obtainConnectionFactory()); - } - - @Override - protected void doResume(@Nullable Object transaction, Object suspendedResources) { - ConnectionHolder conHolder = (ConnectionHolder) suspendedResources; - TransactionSynchronizationManager.bindResource(obtainConnectionFactory(), conHolder); - } - - protected boolean isRollbackOnly(Object transaction) throws TransactionException { - CciLocalTransactionObject txObject = (CciLocalTransactionObject) transaction; - return txObject.getConnectionHolder().isRollbackOnly(); - } - - @Override - protected void doCommit(DefaultTransactionStatus status) { - CciLocalTransactionObject txObject = (CciLocalTransactionObject) status.getTransaction(); - Connection con = txObject.getConnectionHolder().getConnection(); - if (status.isDebug()) { - logger.debug("Committing CCI local transaction on Connection [" + con + "]"); - } - try { - con.getLocalTransaction().commit(); - } - catch (LocalTransactionException ex) { - throw new TransactionSystemException("Could not commit CCI local transaction", ex); - } - catch (ResourceException ex) { - throw new TransactionSystemException("Unexpected failure on commit of CCI local transaction", ex); - } - } - - @Override - protected void doRollback(DefaultTransactionStatus status) { - CciLocalTransactionObject txObject = (CciLocalTransactionObject) status.getTransaction(); - Connection con = txObject.getConnectionHolder().getConnection(); - if (status.isDebug()) { - logger.debug("Rolling back CCI local transaction on Connection [" + con + "]"); - } - try { - con.getLocalTransaction().rollback(); - } - catch (LocalTransactionException ex) { - throw new TransactionSystemException("Could not roll back CCI local transaction", ex); - } - catch (ResourceException ex) { - throw new TransactionSystemException("Unexpected failure on rollback of CCI local transaction", ex); - } - } - - @Override - protected void doSetRollbackOnly(DefaultTransactionStatus status) { - CciLocalTransactionObject txObject = (CciLocalTransactionObject) status.getTransaction(); - if (status.isDebug()) { - logger.debug("Setting CCI local transaction [" + txObject.getConnectionHolder().getConnection() + - "] rollback-only"); - } - txObject.getConnectionHolder().setRollbackOnly(); - } - - @Override - protected void doCleanupAfterCompletion(Object transaction) { - CciLocalTransactionObject txObject = (CciLocalTransactionObject) transaction; - ConnectionFactory connectionFactory = obtainConnectionFactory(); - - // Remove the connection holder from the thread. - TransactionSynchronizationManager.unbindResource(connectionFactory); - txObject.getConnectionHolder().clear(); - - Connection con = txObject.getConnectionHolder().getConnection(); - if (logger.isDebugEnabled()) { - logger.debug("Releasing CCI Connection [" + con + "] after transaction"); - } - ConnectionFactoryUtils.releaseConnection(con, connectionFactory); - } - - - /** - * CCI local transaction object, representing a ConnectionHolder. - * Used as transaction object by CciLocalTransactionManager. - * @see ConnectionHolder - */ - private static class CciLocalTransactionObject { - - @Nullable - private ConnectionHolder connectionHolder; - - public void setConnectionHolder(@Nullable ConnectionHolder connectionHolder) { - this.connectionHolder = connectionHolder; - } - - public ConnectionHolder getConnectionHolder() { - Assert.state(this.connectionHolder != null, "No ConnectionHolder available"); - return this.connectionHolder; - } - - public boolean hasConnectionHolder() { - return (this.connectionHolder != null); - } - } - -} diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/connection/ConnectionFactoryUtils.java b/spring-tx/src/main/java/org/springframework/jca/cci/connection/ConnectionFactoryUtils.java deleted file mode 100644 index 2f690e35cb6..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/cci/connection/ConnectionFactoryUtils.java +++ /dev/null @@ -1,220 +0,0 @@ -/* - * Copyright 2002-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.cci.connection; - -import javax.resource.ResourceException; -import javax.resource.cci.Connection; -import javax.resource.cci.ConnectionFactory; -import javax.resource.cci.ConnectionSpec; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import org.springframework.lang.Nullable; -import org.springframework.transaction.support.ResourceHolderSynchronization; -import org.springframework.transaction.support.TransactionSynchronizationManager; -import org.springframework.util.Assert; - -/** - * Helper class that provides static methods for obtaining CCI Connections - * from a {@link javax.resource.cci.ConnectionFactory}. Includes special - * support for Spring-managed transactional Connections, e.g. managed - * by {@link CciLocalTransactionManager} or - * {@link org.springframework.transaction.jta.JtaTransactionManager}. - * - *

    Used internally by {@link org.springframework.jca.cci.core.CciTemplate}, - * Spring's CCI operation objects and the {@link CciLocalTransactionManager}. - * Can also be used directly in application code. - * - * @author Thierry Templier - * @author Juergen Hoeller - * @since 1.2 - * @see #getConnection - * @see #releaseConnection - * @see CciLocalTransactionManager - * @see org.springframework.transaction.jta.JtaTransactionManager - * @see org.springframework.transaction.support.TransactionSynchronizationManager - * @deprecated as of 5.3, in favor of specific data access APIs - * (or native CCI usage if there is no alternative) - */ -@Deprecated -public abstract class ConnectionFactoryUtils { - - private static final Log logger = LogFactory.getLog(ConnectionFactoryUtils.class); - - - /** - * Obtain a Connection from the given ConnectionFactory. Translates ResourceExceptions - * into the Spring hierarchy of unchecked generic data access exceptions, simplifying - * calling code and making any exception that is thrown more meaningful. - *

    Is aware of a corresponding Connection bound to the current thread, for example - * when using {@link CciLocalTransactionManager}. Will bind a Connection to the thread - * if transaction synchronization is active (e.g. if in a JTA transaction). - * @param cf the ConnectionFactory to obtain Connection from - * @return a CCI Connection from the given ConnectionFactory - * @throws org.springframework.jca.cci.CannotGetCciConnectionException - * if the attempt to get a Connection failed - * @see #releaseConnection - */ - public static Connection getConnection(ConnectionFactory cf) - throws org.springframework.jca.cci.CannotGetCciConnectionException { - - return getConnection(cf, null); - } - - /** - * Obtain a Connection from the given ConnectionFactory. Translates ResourceExceptions - * into the Spring hierarchy of unchecked generic data access exceptions, simplifying - * calling code and making any exception that is thrown more meaningful. - *

    Is aware of a corresponding Connection bound to the current thread, for example - * when using {@link CciLocalTransactionManager}. Will bind a Connection to the thread - * if transaction synchronization is active (e.g. if in a JTA transaction). - * @param cf the ConnectionFactory to obtain Connection from - * @param spec the ConnectionSpec for the desired Connection (may be {@code null}). - * Note: If this is specified, a new Connection will be obtained for every call, - * without participating in a shared transactional Connection. - * @return a CCI Connection from the given ConnectionFactory - * @throws org.springframework.jca.cci.CannotGetCciConnectionException - * if the attempt to get a Connection failed - * @see #releaseConnection - */ - public static Connection getConnection(ConnectionFactory cf, @Nullable ConnectionSpec spec) - throws org.springframework.jca.cci.CannotGetCciConnectionException { - try { - if (spec != null) { - Assert.notNull(cf, "No ConnectionFactory specified"); - return cf.getConnection(spec); - } - else { - return doGetConnection(cf); - } - } - catch (ResourceException ex) { - throw new org.springframework.jca.cci.CannotGetCciConnectionException("Could not get CCI Connection", ex); - } - } - - /** - * Actually obtain a CCI Connection from the given ConnectionFactory. - * Same as {@link #getConnection}, but throwing the original ResourceException. - *

    Is aware of a corresponding Connection bound to the current thread, for example - * when using {@link CciLocalTransactionManager}. Will bind a Connection to the thread - * if transaction synchronization is active (e.g. if in a JTA transaction). - *

    Directly accessed by {@link TransactionAwareConnectionFactoryProxy}. - * @param cf the ConnectionFactory to obtain Connection from - * @return a CCI Connection from the given ConnectionFactory - * @throws ResourceException if thrown by CCI API methods - * @see #doReleaseConnection - */ - public static Connection doGetConnection(ConnectionFactory cf) throws ResourceException { - Assert.notNull(cf, "No ConnectionFactory specified"); - - ConnectionHolder conHolder = (ConnectionHolder) TransactionSynchronizationManager.getResource(cf); - if (conHolder != null) { - return conHolder.getConnection(); - } - - logger.debug("Opening CCI Connection"); - Connection con = cf.getConnection(); - - if (TransactionSynchronizationManager.isSynchronizationActive()) { - conHolder = new ConnectionHolder(con); - conHolder.setSynchronizedWithTransaction(true); - TransactionSynchronizationManager.registerSynchronization(new ConnectionSynchronization(conHolder, cf)); - TransactionSynchronizationManager.bindResource(cf, conHolder); - } - - return con; - } - - /** - * Determine whether the given JCA CCI Connection is transactional, that is, - * bound to the current thread by Spring's transaction facilities. - * @param con the Connection to check - * @param cf the ConnectionFactory that the Connection was obtained from - * (may be {@code null}) - * @return whether the Connection is transactional - */ - public static boolean isConnectionTransactional(Connection con, @Nullable ConnectionFactory cf) { - if (cf == null) { - return false; - } - ConnectionHolder conHolder = (ConnectionHolder) TransactionSynchronizationManager.getResource(cf); - return (conHolder != null && conHolder.getConnection() == con); - } - - /** - * Close the given Connection, obtained from the given ConnectionFactory, - * if it is not managed externally (that is, not bound to the thread). - * @param con the Connection to close if necessary - * (if this is {@code null}, the call will be ignored) - * @param cf the ConnectionFactory that the Connection was obtained from - * (can be {@code null}) - * @see #getConnection - */ - public static void releaseConnection(@Nullable Connection con, @Nullable ConnectionFactory cf) { - try { - doReleaseConnection(con, cf); - } - catch (ResourceException ex) { - logger.debug("Could not close CCI Connection", ex); - } - catch (Throwable ex) { - // We don't trust the CCI driver: It might throw RuntimeException or Error. - logger.debug("Unexpected exception on closing CCI Connection", ex); - } - } - - /** - * Actually close the given Connection, obtained from the given ConnectionFactory. - * Same as {@link #releaseConnection}, but throwing the original ResourceException. - *

    Directly accessed by {@link TransactionAwareConnectionFactoryProxy}. - * @param con the Connection to close if necessary - * (if this is {@code null}, the call will be ignored) - * @param cf the ConnectionFactory that the Connection was obtained from - * (can be {@code null}) - * @throws ResourceException if thrown by JCA CCI methods - * @see #doGetConnection - */ - public static void doReleaseConnection(@Nullable Connection con, @Nullable ConnectionFactory cf) - throws ResourceException { - - if (con == null || isConnectionTransactional(con, cf)) { - return; - } - con.close(); - } - - - /** - * Callback for resource cleanup at the end of a non-native CCI transaction - * (e.g. when participating in a JTA transaction). - */ - private static class ConnectionSynchronization - extends ResourceHolderSynchronization { - - public ConnectionSynchronization(ConnectionHolder connectionHolder, ConnectionFactory connectionFactory) { - super(connectionHolder, connectionFactory); - } - - @Override - protected void releaseResource(ConnectionHolder resourceHolder, ConnectionFactory resourceKey) { - releaseConnection(resourceHolder.getConnection(), resourceKey); - } - } - -} diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/connection/ConnectionHolder.java b/spring-tx/src/main/java/org/springframework/jca/cci/connection/ConnectionHolder.java deleted file mode 100644 index 35e5afcf4d0..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/cci/connection/ConnectionHolder.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2002-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.cci.connection; - -import javax.resource.cci.Connection; - -import org.springframework.transaction.support.ResourceHolderSupport; - -/** - * Resource holder wrapping a CCI {@link Connection}. - * {@link CciLocalTransactionManager} binds instances of this class to the thread, - * for a given {@link javax.resource.cci.ConnectionFactory}. - * - *

    Note: This is an SPI class, not intended to be used by applications. - * - * @author Thierry Templier - * @author Juergen Hoeller - * @since 1.2 - * @see CciLocalTransactionManager - * @see ConnectionFactoryUtils - * @deprecated as of 5.3, in favor of specific data access APIs - * (or native CCI usage if there is no alternative) - */ -@Deprecated -public class ConnectionHolder extends ResourceHolderSupport { - - private final Connection connection; - - - public ConnectionHolder(Connection connection) { - this.connection = connection; - } - - - public Connection getConnection() { - return this.connection; - } - -} diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/connection/ConnectionSpecConnectionFactoryAdapter.java b/spring-tx/src/main/java/org/springframework/jca/cci/connection/ConnectionSpecConnectionFactoryAdapter.java deleted file mode 100644 index 2f80f0cefe5..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/cci/connection/ConnectionSpecConnectionFactoryAdapter.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright 2002-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.cci.connection; - -import javax.resource.ResourceException; -import javax.resource.cci.Connection; -import javax.resource.cci.ConnectionFactory; -import javax.resource.cci.ConnectionSpec; - -import org.springframework.core.NamedThreadLocal; -import org.springframework.lang.Nullable; -import org.springframework.util.Assert; - -/** - * An adapter for a target CCI {@link javax.resource.cci.ConnectionFactory}, - * applying the given ConnectionSpec to every standard {@code getConnection()} - * call, that is, implicitly invoking {@code getConnection(ConnectionSpec)} - * on the target. All other methods simply delegate to the corresponding methods - * of the target ConnectionFactory. - * - *

    Can be used to proxy a target JNDI ConnectionFactory that does not have a - * ConnectionSpec configured. Client code can work with the ConnectionFactory - * without passing in a ConnectionSpec on every {@code getConnection()} call. - * - *

    In the following example, client code can simply transparently work with - * the preconfigured "myConnectionFactory", implicitly accessing - * "myTargetConnectionFactory" with the specified user credentials. - * - *

    - * <bean id="myTargetConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
    - *   <property name="jndiName" value="java:comp/env/cci/mycf"/>
    - * </bean>
    - *
    - * <bean id="myConnectionFactory" class="org.springframework.jca.cci.connection.ConnectionSpecConnectionFactoryAdapter">
    - *   <property name="targetConnectionFactory" ref="myTargetConnectionFactory"/>
    - *   <property name="connectionSpec">
    - *     <bean class="your.resource.adapter.ConnectionSpecImpl">
    - *       <property name="username" value="myusername"/>
    - *       <property name="password" value="mypassword"/>
    - *     </bean>
    - *   </property>
    - * </bean>
    - * - *

    If the "connectionSpec" is empty, this proxy will simply delegate to the - * standard {@code getConnection()} method of the target ConnectionFactory. - * This can be used to keep a UserCredentialsConnectionFactoryAdapter bean definition - * just for the option of implicitly passing in a ConnectionSpec if the - * particular target ConnectionFactory requires it. - * - * @author Juergen Hoeller - * @since 1.2 - * @see #getConnection - * @deprecated as of 5.3, in favor of specific data access APIs - * (or native CCI usage if there is no alternative) - */ -@Deprecated -@SuppressWarnings("serial") -public class ConnectionSpecConnectionFactoryAdapter extends DelegatingConnectionFactory { - - @Nullable - private ConnectionSpec connectionSpec; - - private final ThreadLocal threadBoundSpec = - new NamedThreadLocal<>("Current CCI ConnectionSpec"); - - - /** - * Set the ConnectionSpec that this adapter should use for retrieving Connections. - * Default is none. - */ - public void setConnectionSpec(ConnectionSpec connectionSpec) { - this.connectionSpec = connectionSpec; - } - - /** - * Set a ConnectionSpec for this proxy and the current thread. - * The given ConnectionSpec will be applied to all subsequent - * {@code getConnection()} calls on this ConnectionFactory proxy. - *

    This will override any statically specified "connectionSpec" property. - * @param spec the ConnectionSpec to apply - * @see #removeConnectionSpecFromCurrentThread - */ - public void setConnectionSpecForCurrentThread(ConnectionSpec spec) { - this.threadBoundSpec.set(spec); - } - - /** - * Remove any ConnectionSpec for this proxy from the current thread. - * A statically specified ConnectionSpec applies again afterwards. - * @see #setConnectionSpecForCurrentThread - */ - public void removeConnectionSpecFromCurrentThread() { - this.threadBoundSpec.remove(); - } - - - /** - * Determine whether there is currently a thread-bound ConnectionSpec, - * using it if available, falling back to the statically specified - * "connectionSpec" property else. - * @see #doGetConnection - */ - @Override - public final Connection getConnection() throws ResourceException { - ConnectionSpec threadSpec = this.threadBoundSpec.get(); - if (threadSpec != null) { - return doGetConnection(threadSpec); - } - else { - return doGetConnection(this.connectionSpec); - } - } - - /** - * This implementation delegates to the {@code getConnection(ConnectionSpec)} - * method of the target ConnectionFactory, passing in the specified user credentials. - * If the specified username is empty, it will simply delegate to the standard - * {@code getConnection()} method of the target ConnectionFactory. - * @param spec the ConnectionSpec to apply - * @return the Connection - * @see javax.resource.cci.ConnectionFactory#getConnection(javax.resource.cci.ConnectionSpec) - * @see javax.resource.cci.ConnectionFactory#getConnection() - */ - protected Connection doGetConnection(@Nullable ConnectionSpec spec) throws ResourceException { - ConnectionFactory connectionFactory = getTargetConnectionFactory(); - Assert.state(connectionFactory != null, "No 'targetConnectionFactory' set"); - return (spec != null ? connectionFactory.getConnection(spec) : connectionFactory.getConnection()); - } - -} diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/connection/DelegatingConnectionFactory.java b/spring-tx/src/main/java/org/springframework/jca/cci/connection/DelegatingConnectionFactory.java deleted file mode 100644 index 08c9ac20722..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/cci/connection/DelegatingConnectionFactory.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright 2002-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.cci.connection; - -import javax.naming.NamingException; -import javax.naming.Reference; -import javax.resource.ResourceException; -import javax.resource.cci.Connection; -import javax.resource.cci.ConnectionFactory; -import javax.resource.cci.ConnectionSpec; -import javax.resource.cci.RecordFactory; -import javax.resource.cci.ResourceAdapterMetaData; - -import org.springframework.beans.factory.InitializingBean; -import org.springframework.lang.Nullable; -import org.springframework.util.Assert; - -/** - * CCI {@link ConnectionFactory} implementation that delegates all calls - * to a given target {@link ConnectionFactory}. - * - *

    This class is meant to be subclassed, with subclasses overriding only - * those methods (such as {@link #getConnection()}) that should not simply - * delegate to the target {@link ConnectionFactory}. - * - * @author Juergen Hoeller - * @since 1.2 - * @see #getConnection - * @deprecated as of 5.3, in favor of specific data access APIs - * (or native CCI usage if there is no alternative) - */ -@Deprecated -@SuppressWarnings("serial") -public class DelegatingConnectionFactory implements ConnectionFactory, InitializingBean { - - @Nullable - private ConnectionFactory targetConnectionFactory; - - - /** - * Set the target ConnectionFactory that this ConnectionFactory should delegate to. - */ - public void setTargetConnectionFactory(@Nullable ConnectionFactory targetConnectionFactory) { - this.targetConnectionFactory = targetConnectionFactory; - } - - /** - * Return the target ConnectionFactory that this ConnectionFactory should delegate to. - */ - @Nullable - public ConnectionFactory getTargetConnectionFactory() { - return this.targetConnectionFactory; - } - - /** - * Obtain the target {@code ConnectionFactory} for actual use (never {@code null}). - * @since 5.0 - */ - protected ConnectionFactory obtainTargetConnectionFactory() { - ConnectionFactory connectionFactory = getTargetConnectionFactory(); - Assert.state(connectionFactory != null, "No 'targetConnectionFactory' set"); - return connectionFactory; - } - - - @Override - public void afterPropertiesSet() { - if (getTargetConnectionFactory() == null) { - throw new IllegalArgumentException("Property 'targetConnectionFactory' is required"); - } - } - - - @Override - public Connection getConnection() throws ResourceException { - return obtainTargetConnectionFactory().getConnection(); - } - - @Override - public Connection getConnection(ConnectionSpec connectionSpec) throws ResourceException { - return obtainTargetConnectionFactory().getConnection(connectionSpec); - } - - @Override - public RecordFactory getRecordFactory() throws ResourceException { - return obtainTargetConnectionFactory().getRecordFactory(); - } - - @Override - public ResourceAdapterMetaData getMetaData() throws ResourceException { - return obtainTargetConnectionFactory().getMetaData(); - } - - @Override - public Reference getReference() throws NamingException { - return obtainTargetConnectionFactory().getReference(); - } - - @Override - public void setReference(Reference reference) { - obtainTargetConnectionFactory().setReference(reference); - } - -} diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/connection/NotSupportedRecordFactory.java b/spring-tx/src/main/java/org/springframework/jca/cci/connection/NotSupportedRecordFactory.java deleted file mode 100644 index dc613f6d4c5..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/cci/connection/NotSupportedRecordFactory.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.cci.connection; - -import javax.resource.NotSupportedException; -import javax.resource.ResourceException; -import javax.resource.cci.IndexedRecord; -import javax.resource.cci.MappedRecord; -import javax.resource.cci.RecordFactory; - -/** - * Implementation of the CCI RecordFactory interface that always throws - * NotSupportedException. - * - *

    Useful as a placeholder for a RecordFactory argument (for example as - * defined by the RecordCreator callback), in particular when the connector's - * {@code ConnectionFactory.getRecordFactory()} implementation happens to - * throw NotSupportedException early rather than throwing the exception from - * RecordFactory's methods. - * - * @author Juergen Hoeller - * @since 1.2.4 - * @see org.springframework.jca.cci.core.RecordCreator#createRecord(javax.resource.cci.RecordFactory) - * @see org.springframework.jca.cci.core.CciTemplate#getRecordFactory(javax.resource.cci.ConnectionFactory) - * @see javax.resource.cci.ConnectionFactory#getRecordFactory() - * @see javax.resource.NotSupportedException - * @deprecated as of 5.3, in favor of specific data access APIs - * (or native CCI usage if there is no alternative) - */ -@Deprecated -public class NotSupportedRecordFactory implements RecordFactory { - - @Override - public MappedRecord createMappedRecord(String name) throws ResourceException { - throw new NotSupportedException("The RecordFactory facility is not supported by the connector"); - } - - @Override - public IndexedRecord createIndexedRecord(String name) throws ResourceException { - throw new NotSupportedException("The RecordFactory facility is not supported by the connector"); - } - -} diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/connection/SingleConnectionFactory.java b/spring-tx/src/main/java/org/springframework/jca/cci/connection/SingleConnectionFactory.java deleted file mode 100644 index 312fed4d4fa..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/cci/connection/SingleConnectionFactory.java +++ /dev/null @@ -1,264 +0,0 @@ -/* - * Copyright 2002-2020 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.cci.connection; - -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.Proxy; - -import javax.resource.NotSupportedException; -import javax.resource.ResourceException; -import javax.resource.cci.Connection; -import javax.resource.cci.ConnectionFactory; -import javax.resource.cci.ConnectionSpec; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import org.springframework.beans.factory.DisposableBean; -import org.springframework.lang.Nullable; -import org.springframework.util.Assert; - -/** - * A CCI ConnectionFactory adapter that returns the same Connection on all - * {@code getConnection} calls, and ignores calls to - * {@code Connection.close()}. - * - *

    Useful for testing and standalone environments, to keep using the same - * Connection for multiple CciTemplate calls, without having a pooling - * ConnectionFactory, also spanning any number of transactions. - * - *

    You can either pass in a CCI Connection directly, or let this - * factory lazily create a Connection via a given target ConnectionFactory. - * - * @author Juergen Hoeller - * @since 1.2 - * @see #getConnection() - * @see javax.resource.cci.Connection#close() - * @see org.springframework.jca.cci.core.CciTemplate - * @deprecated as of 5.3, in favor of specific data access APIs - * (or native CCI usage if there is no alternative) - */ -@Deprecated -@SuppressWarnings("serial") -public class SingleConnectionFactory extends DelegatingConnectionFactory implements DisposableBean { - - protected final Log logger = LogFactory.getLog(getClass()); - - /** Wrapped Connection. */ - @Nullable - private Connection target; - - /** Proxy Connection. */ - @Nullable - private Connection connection; - - /** Synchronization monitor for the shared Connection. */ - private final Object connectionMonitor = new Object(); - - - /** - * Create a new SingleConnectionFactory for bean-style usage. - * @see #setTargetConnectionFactory - */ - public SingleConnectionFactory() { - } - - /** - * Create a new SingleConnectionFactory that always returns the - * given Connection. - * @param target the single Connection - */ - public SingleConnectionFactory(Connection target) { - Assert.notNull(target, "Target Connection must not be null"); - this.target = target; - this.connection = getCloseSuppressingConnectionProxy(target); - } - - /** - * Create a new SingleConnectionFactory that always returns a single - * Connection which it will lazily create via the given target - * ConnectionFactory. - * @param targetConnectionFactory the target ConnectionFactory - */ - public SingleConnectionFactory(ConnectionFactory targetConnectionFactory) { - Assert.notNull(targetConnectionFactory, "Target ConnectionFactory must not be null"); - setTargetConnectionFactory(targetConnectionFactory); - } - - - /** - * Make sure a Connection or ConnectionFactory has been set. - */ - @Override - public void afterPropertiesSet() { - if (this.connection == null && getTargetConnectionFactory() == null) { - throw new IllegalArgumentException("Connection or 'targetConnectionFactory' is required"); - } - } - - - @Override - public Connection getConnection() throws ResourceException { - synchronized (this.connectionMonitor) { - if (this.connection == null) { - initConnection(); - } - return this.connection; - } - } - - @Override - public Connection getConnection(ConnectionSpec connectionSpec) throws ResourceException { - throw new NotSupportedException( - "SingleConnectionFactory does not support custom ConnectionSpec"); - } - - /** - * Close the underlying Connection. - * The provider of this ConnectionFactory needs to care for proper shutdown. - *

    As this bean implements DisposableBean, a bean factory will - * automatically invoke this on destruction of its cached singletons. - */ - @Override - public void destroy() { - resetConnection(); - } - - - /** - * Initialize the single underlying Connection. - *

    Closes and reinitializes the Connection if an underlying - * Connection is present already. - * @throws javax.resource.ResourceException if thrown by CCI API methods - */ - public void initConnection() throws ResourceException { - if (getTargetConnectionFactory() == null) { - throw new IllegalStateException( - "'targetConnectionFactory' is required for lazily initializing a Connection"); - } - synchronized (this.connectionMonitor) { - if (this.target != null) { - closeConnection(this.target); - } - this.target = doCreateConnection(); - prepareConnection(this.target); - if (logger.isDebugEnabled()) { - logger.debug("Established shared CCI Connection: " + this.target); - } - this.connection = getCloseSuppressingConnectionProxy(this.target); - } - } - - /** - * Reset the underlying shared Connection, to be reinitialized on next access. - */ - public void resetConnection() { - synchronized (this.connectionMonitor) { - if (this.target != null) { - closeConnection(this.target); - } - this.target = null; - this.connection = null; - } - } - - /** - * Create a CCI Connection via this template's ConnectionFactory. - * @return the new CCI Connection - * @throws javax.resource.ResourceException if thrown by CCI API methods - */ - protected Connection doCreateConnection() throws ResourceException { - ConnectionFactory connectionFactory = getTargetConnectionFactory(); - Assert.state(connectionFactory != null, "No 'targetConnectionFactory' set"); - return connectionFactory.getConnection(); - } - - /** - * Prepare the given Connection before it is exposed. - *

    The default implementation is empty. Can be overridden in subclasses. - * @param con the Connection to prepare - */ - protected void prepareConnection(Connection con) throws ResourceException { - } - - /** - * Close the given Connection. - * @param con the Connection to close - */ - protected void closeConnection(Connection con) { - try { - con.close(); - } - catch (Throwable ex) { - logger.warn("Could not close shared CCI Connection", ex); - } - } - - /** - * Wrap the given Connection with a proxy that delegates every method call to it - * but suppresses close calls. This is useful for allowing application code to - * handle a special framework Connection just like an ordinary Connection from a - * CCI ConnectionFactory. - * @param target the original Connection to wrap - * @return the wrapped Connection - */ - protected Connection getCloseSuppressingConnectionProxy(Connection target) { - return (Connection) Proxy.newProxyInstance( - Connection.class.getClassLoader(), - new Class[] {Connection.class}, - new CloseSuppressingInvocationHandler(target)); - } - - - /** - * Invocation handler that suppresses close calls on CCI Connections. - */ - private static final class CloseSuppressingInvocationHandler implements InvocationHandler { - - private final Connection target; - - private CloseSuppressingInvocationHandler(Connection target) { - this.target = target; - } - - @Override - @Nullable - public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { - switch (method.getName()) { - case "equals": - // Only consider equal when proxies are identical. - return (proxy == args[0]); - case "hashCode": - // Use hashCode of Connection proxy. - return System.identityHashCode(proxy); - case "close": - // Handle close method: don't pass the call on. - return null; - } - - try { - return method.invoke(this.target, args); - } - catch (InvocationTargetException ex) { - throw ex.getTargetException(); - } - } - } - -} diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/connection/TransactionAwareConnectionFactoryProxy.java b/spring-tx/src/main/java/org/springframework/jca/cci/connection/TransactionAwareConnectionFactoryProxy.java deleted file mode 100644 index e8fe835594b..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/cci/connection/TransactionAwareConnectionFactoryProxy.java +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Copyright 2002-2020 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.cci.connection; - -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.Proxy; - -import javax.resource.ResourceException; -import javax.resource.cci.Connection; -import javax.resource.cci.ConnectionFactory; - -import org.springframework.lang.Nullable; - -/** - * Proxy for a target CCI {@link javax.resource.cci.ConnectionFactory}, adding - * awareness of Spring-managed transactions. Similar to a transactional JNDI - * ConnectionFactory as provided by a Java EE server. - * - *

    Data access code that should remain unaware of Spring's data access support - * can work with this proxy to seamlessly participate in Spring-managed transactions. - * Note that the transaction manager, for example the {@link CciLocalTransactionManager}, - * still needs to work with underlying ConnectionFactory, not with this proxy. - * - *

    Make sure that TransactionAwareConnectionFactoryProxy is the outermost - * ConnectionFactory of a chain of ConnectionFactory proxies/adapters. - * TransactionAwareConnectionFactoryProxy can delegate either directly to the - * target connection pool or to some intermediate proxy/adapter like - * {@link ConnectionSpecConnectionFactoryAdapter}. - * - *

    Delegates to {@link ConnectionFactoryUtils} for automatically participating in - * thread-bound transactions, for example managed by {@link CciLocalTransactionManager}. - * {@code getConnection} calls and {@code close} calls on returned Connections - * will behave properly within a transaction, i.e. always operate on the transactional - * Connection. If not within a transaction, normal ConnectionFactory behavior applies. - * - *

    This proxy allows data access code to work with the plain JCA CCI API and still - * participate in Spring-managed transactions, similar to CCI code in a Java EE/JTA - * environment. However, if possible, use Spring's ConnectionFactoryUtils, CciTemplate or - * CCI operation objects to get transaction participation even without a proxy for - * the target ConnectionFactory, avoiding the need to define such a proxy in the first place. - * - *

    NOTE: This ConnectionFactory proxy needs to return wrapped Connections - * in order to handle close calls properly. Therefore, the returned Connections cannot - * be cast to a native CCI Connection type or to a connection pool implementation type. - * - * @author Juergen Hoeller - * @since 1.2 - * @see javax.resource.cci.ConnectionFactory#getConnection - * @see javax.resource.cci.Connection#close - * @see ConnectionFactoryUtils#doGetConnection - * @see ConnectionFactoryUtils#doReleaseConnection - * @deprecated as of 5.3, in favor of specific data access APIs - * (or native CCI usage if there is no alternative) - */ -@Deprecated -@SuppressWarnings("serial") -public class TransactionAwareConnectionFactoryProxy extends DelegatingConnectionFactory { - - /** - * Create a new TransactionAwareConnectionFactoryProxy. - * @see #setTargetConnectionFactory - */ - public TransactionAwareConnectionFactoryProxy() { - } - - /** - * Create a new TransactionAwareConnectionFactoryProxy. - * @param targetConnectionFactory the target ConnectionFactory - */ - public TransactionAwareConnectionFactoryProxy(ConnectionFactory targetConnectionFactory) { - setTargetConnectionFactory(targetConnectionFactory); - afterPropertiesSet(); - } - - - /** - * Delegate to ConnectionFactoryUtils for automatically participating in Spring-managed - * transactions. Throws the original ResourceException, if any. - * @return a transactional Connection if any, a new one else - * @see org.springframework.jca.cci.connection.ConnectionFactoryUtils#doGetConnection - */ - @Override - public Connection getConnection() throws ResourceException { - ConnectionFactory targetConnectionFactory = obtainTargetConnectionFactory(); - Connection con = ConnectionFactoryUtils.doGetConnection(targetConnectionFactory); - return getTransactionAwareConnectionProxy(con, targetConnectionFactory); - } - - /** - * Wrap the given Connection with a proxy that delegates every method call to it - * but delegates {@code close} calls to ConnectionFactoryUtils. - * @param target the original Connection to wrap - * @param cf the ConnectionFactory that the Connection came from - * @return the wrapped Connection - * @see javax.resource.cci.Connection#close() - * @see ConnectionFactoryUtils#doReleaseConnection - */ - protected Connection getTransactionAwareConnectionProxy(Connection target, ConnectionFactory cf) { - return (Connection) Proxy.newProxyInstance( - Connection.class.getClassLoader(), - new Class[] {Connection.class}, - new TransactionAwareInvocationHandler(target, cf)); - } - - - /** - * Invocation handler that delegates close calls on CCI Connections - * to ConnectionFactoryUtils for being aware of thread-bound transactions. - */ - private static class TransactionAwareInvocationHandler implements InvocationHandler { - - private final Connection target; - - private final ConnectionFactory connectionFactory; - - public TransactionAwareInvocationHandler(Connection target, ConnectionFactory cf) { - this.target = target; - this.connectionFactory = cf; - } - - @Override - @Nullable - public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { - // Invocation on Connection interface coming in... - - switch (method.getName()) { - case "equals": - // Only consider equal when proxies are identical. - return (proxy == args[0]); - case "hashCode": - // Use hashCode of Connection proxy. - return System.identityHashCode(proxy); - case "getLocalTransaction": - if (ConnectionFactoryUtils.isConnectionTransactional(this.target, this.connectionFactory)) { - throw new javax.resource.spi.IllegalStateException( - "Local transaction handling not allowed within a managed transaction"); - } - return this.target.getLocalTransaction(); - case "close": - // Handle close method: only close if not within a transaction. - ConnectionFactoryUtils.doReleaseConnection(this.target, this.connectionFactory); - return null; - } - - // Invoke method on target Connection. - try { - return method.invoke(this.target, args); - } - catch (InvocationTargetException ex) { - throw ex.getTargetException(); - } - } - } - -} diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/connection/package-info.java b/spring-tx/src/main/java/org/springframework/jca/cci/connection/package-info.java deleted file mode 100644 index b90d61e6211..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/cci/connection/package-info.java +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Provides a utility class for easy ConnectionFactory access, - * a PlatformTransactionManager for local CCI transactions, - * and various simple ConnectionFactory proxies/adapters. - */ -@NonNullApi -@NonNullFields -package org.springframework.jca.cci.connection; - -import org.springframework.lang.NonNullApi; -import org.springframework.lang.NonNullFields; diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/core/CciOperations.java b/spring-tx/src/main/java/org/springframework/jca/cci/core/CciOperations.java deleted file mode 100644 index 313d16f24a4..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/cci/core/CciOperations.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright 2002-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.cci.core; - -import javax.resource.cci.InteractionSpec; -import javax.resource.cci.Record; - -import org.springframework.dao.DataAccessException; -import org.springframework.lang.Nullable; - -/** - * Interface that specifies a basic set of CCI operations on an EIS. - * Implemented by CciTemplate. Not often used, but a useful option - * to enhance testability, as it can easily be mocked or stubbed. - * - *

    Alternatively, the standard CCI infrastructure can be mocked. - * However, mocking this interface constitutes significantly less work. - * - * @author Juergen Hoeller - * @since 1.2 - * @see CciTemplate - * @deprecated as of 5.3, in favor of specific data access APIs - * (or native CCI usage if there is no alternative) - */ -@Deprecated -public interface CciOperations { - - /** - * Execute a request on an EIS with CCI, implemented as callback action - * working on a CCI Connection. This allows for implementing arbitrary - * data access operations, within Spring's managed CCI environment: - * that is, participating in Spring-managed transactions and converting - * JCA ResourceExceptions into Spring's DataAccessException hierarchy. - *

    The callback action can return a result object, for example a - * domain object or a collection of domain objects. - * @param action the callback object that specifies the action - * @return the result object returned by the action, if any - * @throws DataAccessException if there is any problem - */ - @Nullable - T execute(ConnectionCallback action) throws DataAccessException; - - /** - * Execute a request on an EIS with CCI, implemented as callback action - * working on a CCI Interaction. This allows for implementing arbitrary - * data access operations on a single Interaction, within Spring's managed - * CCI environment: that is, participating in Spring-managed transactions - * and converting JCA ResourceExceptions into Spring's DataAccessException - * hierarchy. - *

    The callback action can return a result object, for example a - * domain object or a collection of domain objects. - * @param action the callback object that specifies the action - * @return the result object returned by the action, if any - * @throws DataAccessException if there is any problem - */ - @Nullable - T execute(InteractionCallback action) throws DataAccessException; - - /** - * Execute the specified interaction on an EIS with CCI. - * @param spec the CCI InteractionSpec instance that defines - * the interaction (connector-specific) - * @param inputRecord the input record - * @return the output record - * @throws DataAccessException if there is any problem - */ - @Nullable - Record execute(InteractionSpec spec, Record inputRecord) throws DataAccessException; - - /** - * Execute the specified interaction on an EIS with CCI. - * @param spec the CCI InteractionSpec instance that defines - * the interaction (connector-specific) - * @param inputRecord the input record - * @param outputRecord the output record - * @throws DataAccessException if there is any problem - */ - void execute(InteractionSpec spec, Record inputRecord, Record outputRecord) throws DataAccessException; - - /** - * Execute the specified interaction on an EIS with CCI. - * @param spec the CCI InteractionSpec instance that defines - * the interaction (connector-specific) - * @param inputCreator object that creates the input record to use - * @return the output record - * @throws DataAccessException if there is any problem - */ - Record execute(InteractionSpec spec, RecordCreator inputCreator) throws DataAccessException; - - /** - * Execute the specified interaction on an EIS with CCI. - * @param spec the CCI InteractionSpec instance that defines - * the interaction (connector-specific) - * @param inputRecord the input record - * @param outputExtractor object to convert the output record to a result object - * @return the output data extracted with the RecordExtractor object - * @throws DataAccessException if there is any problem - */ - @Nullable - T execute(InteractionSpec spec, Record inputRecord, RecordExtractor outputExtractor) - throws DataAccessException; - - /** - * Execute the specified interaction on an EIS with CCI. - * @param spec the CCI InteractionSpec instance that defines - * the interaction (connector-specific) - * @param inputCreator object that creates the input record to use - * @param outputExtractor object to convert the output record to a result object - * @return the output data extracted with the RecordExtractor object - * @throws DataAccessException if there is any problem - */ - @Nullable - T execute(InteractionSpec spec, RecordCreator inputCreator, RecordExtractor outputExtractor) - throws DataAccessException; - -} diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/core/CciTemplate.java b/spring-tx/src/main/java/org/springframework/jca/cci/core/CciTemplate.java deleted file mode 100644 index 181321e888a..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/cci/core/CciTemplate.java +++ /dev/null @@ -1,461 +0,0 @@ -/* - * Copyright 2002-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.cci.core; - -import java.sql.SQLException; - -import javax.resource.NotSupportedException; -import javax.resource.ResourceException; -import javax.resource.cci.Connection; -import javax.resource.cci.ConnectionFactory; -import javax.resource.cci.ConnectionSpec; -import javax.resource.cci.IndexedRecord; -import javax.resource.cci.Interaction; -import javax.resource.cci.InteractionSpec; -import javax.resource.cci.MappedRecord; -import javax.resource.cci.Record; -import javax.resource.cci.RecordFactory; -import javax.resource.cci.ResultSet; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import org.springframework.dao.DataAccessException; -import org.springframework.dao.DataAccessResourceFailureException; -import org.springframework.lang.Nullable; -import org.springframework.util.Assert; - -/** - * This is the central class in the CCI core package. - * It simplifies the use of CCI and helps to avoid common errors. - * It executes core CCI workflow, leaving application code to provide parameters - * to CCI and extract results. This class executes EIS queries or updates, - * catching ResourceExceptions and translating them to the generic exception - * hierarchy defined in the {@code org.springframework.dao} package. - * - *

    Code using this class can pass in and receive {@link javax.resource.cci.Record} - * instances, or alternatively implement callback interfaces for creating input - * Records and extracting result objects from output Records (or CCI ResultSets). - * - *

    Can be used within a service implementation via direct instantiation - * with a ConnectionFactory reference, or get prepared in an application context - * and given to services as bean reference. Note: The ConnectionFactory should - * always be configured as a bean in the application context, in the first case - * given to the service directly, in the second case to the prepared template. - * - * @author Thierry Templier - * @author Juergen Hoeller - * @since 1.2 - * @see RecordCreator - * @see RecordExtractor - * @deprecated as of 5.3, in favor of specific data access APIs - * (or native CCI usage if there is no alternative) - */ -@Deprecated -public class CciTemplate implements CciOperations { - - private final Log logger = LogFactory.getLog(getClass()); - - @Nullable - private ConnectionFactory connectionFactory; - - @Nullable - private ConnectionSpec connectionSpec; - - @Nullable - private RecordCreator outputRecordCreator; - - - /** - * Construct a new CciTemplate for bean usage. - *

    Note: The ConnectionFactory has to be set before using the instance. - * @see #setConnectionFactory - */ - public CciTemplate() { - } - - /** - * Construct a new CciTemplate, given a ConnectionFactory to obtain Connections from. - * Note: This will trigger eager initialization of the exception translator. - * @param connectionFactory the JCA ConnectionFactory to obtain Connections from - */ - public CciTemplate(ConnectionFactory connectionFactory) { - setConnectionFactory(connectionFactory); - afterPropertiesSet(); - } - - /** - * Construct a new CciTemplate, given a ConnectionFactory to obtain Connections from. - * Note: This will trigger eager initialization of the exception translator. - * @param connectionFactory the JCA ConnectionFactory to obtain Connections from - * @param connectionSpec the CCI ConnectionSpec to obtain Connections for - * (may be {@code null}) - */ - public CciTemplate(ConnectionFactory connectionFactory, @Nullable ConnectionSpec connectionSpec) { - setConnectionFactory(connectionFactory); - if (connectionSpec != null) { - setConnectionSpec(connectionSpec); - } - afterPropertiesSet(); - } - - - /** - * Set the CCI ConnectionFactory to obtain Connections from. - */ - public void setConnectionFactory(@Nullable ConnectionFactory connectionFactory) { - this.connectionFactory = connectionFactory; - } - - /** - * Return the CCI ConnectionFactory used by this template. - */ - @Nullable - public ConnectionFactory getConnectionFactory() { - return this.connectionFactory; - } - - private ConnectionFactory obtainConnectionFactory() { - ConnectionFactory connectionFactory = getConnectionFactory(); - Assert.state(connectionFactory != null, "No ConnectionFactory set"); - return connectionFactory; - } - - /** - * Set the CCI ConnectionSpec that this template instance is - * supposed to obtain Connections for. - */ - public void setConnectionSpec(@Nullable ConnectionSpec connectionSpec) { - this.connectionSpec = connectionSpec; - } - - /** - * Return the CCI ConnectionSpec used by this template, if any. - */ - @Nullable - public ConnectionSpec getConnectionSpec() { - return this.connectionSpec; - } - - /** - * Set a RecordCreator that should be used for creating default output Records. - *

    Default is none: When no explicit output Record gets passed into an - * {@code execute} method, CCI's {@code Interaction.execute} variant - * that returns an output Record will be called. - *

    Specify a RecordCreator here if you always need to call CCI's - * {@code Interaction.execute} variant with a passed-in output Record. - * Unless there is an explicitly specified output Record, CciTemplate will - * then invoke this RecordCreator to create a default output Record instance. - * @see javax.resource.cci.Interaction#execute(javax.resource.cci.InteractionSpec, Record) - * @see javax.resource.cci.Interaction#execute(javax.resource.cci.InteractionSpec, Record, Record) - */ - public void setOutputRecordCreator(@Nullable RecordCreator creator) { - this.outputRecordCreator = creator; - } - - /** - * Return a RecordCreator that should be used for creating default output Records. - */ - @Nullable - public RecordCreator getOutputRecordCreator() { - return this.outputRecordCreator; - } - - public void afterPropertiesSet() { - if (getConnectionFactory() == null) { - throw new IllegalArgumentException("Property 'connectionFactory' is required"); - } - } - - - /** - * Create a template derived from this template instance, - * inheriting the ConnectionFactory and other settings but - * overriding the ConnectionSpec used for obtaining Connections. - * @param connectionSpec the CCI ConnectionSpec that the derived template - * instance is supposed to obtain Connections for - * @return the derived template instance - * @see #setConnectionSpec - */ - public CciTemplate getDerivedTemplate(ConnectionSpec connectionSpec) { - CciTemplate derived = new CciTemplate(obtainConnectionFactory(), connectionSpec); - RecordCreator recordCreator = getOutputRecordCreator(); - if (recordCreator != null) { - derived.setOutputRecordCreator(recordCreator); - } - return derived; - } - - - @Override - @Nullable - public T execute(ConnectionCallback action) throws DataAccessException { - Assert.notNull(action, "Callback object must not be null"); - ConnectionFactory connectionFactory = obtainConnectionFactory(); - Connection con = org.springframework.jca.cci.connection.ConnectionFactoryUtils.getConnection( - connectionFactory, getConnectionSpec()); - try { - return action.doInConnection(con, connectionFactory); - } - catch (NotSupportedException ex) { - throw new org.springframework.jca.cci.CciOperationNotSupportedException( - "CCI operation not supported by connector", ex); - } - catch (ResourceException ex) { - throw new DataAccessResourceFailureException("CCI operation failed", ex); - } - catch (SQLException ex) { - throw new org.springframework.jca.cci.InvalidResultSetAccessException( - "Parsing of CCI ResultSet failed", ex); - } - finally { - org.springframework.jca.cci.connection.ConnectionFactoryUtils.releaseConnection( - con, getConnectionFactory()); - } - } - - @Override - @Nullable - public T execute(final InteractionCallback action) throws DataAccessException { - Assert.notNull(action, "Callback object must not be null"); - return execute((ConnectionCallback) (connection, connectionFactory) -> { - Interaction interaction = connection.createInteraction(); - try { - return action.doInInteraction(interaction, connectionFactory); - } - finally { - closeInteraction(interaction); - } - }); - } - - @Override - @Nullable - public Record execute(InteractionSpec spec, Record inputRecord) throws DataAccessException { - return doExecute(spec, inputRecord, null, new SimpleRecordExtractor()); - } - - @Override - public void execute(InteractionSpec spec, Record inputRecord, Record outputRecord) throws DataAccessException { - doExecute(spec, inputRecord, outputRecord, null); - } - - @Override - public Record execute(InteractionSpec spec, RecordCreator inputCreator) throws DataAccessException { - Record output = doExecute(spec, createRecord(inputCreator), null, new SimpleRecordExtractor()); - Assert.state(output != null, "Invalid output record"); - return output; - } - - @Override - public T execute(InteractionSpec spec, Record inputRecord, RecordExtractor outputExtractor) - throws DataAccessException { - - return doExecute(spec, inputRecord, null, outputExtractor); - } - - @Override - public T execute(InteractionSpec spec, RecordCreator inputCreator, RecordExtractor outputExtractor) - throws DataAccessException { - - return doExecute(spec, createRecord(inputCreator), null, outputExtractor); - } - - /** - * Execute the specified interaction on an EIS with CCI. - * All other interaction execution methods go through this. - * @param spec the CCI InteractionSpec instance that defines - * the interaction (connector-specific) - * @param inputRecord the input record - * @param outputRecord output record (can be {@code null}) - * @param outputExtractor object to convert the output record to a result object - * @return the output data extracted with the RecordExtractor object - * @throws DataAccessException if there is any problem - */ - @Nullable - protected T doExecute( - final InteractionSpec spec, final Record inputRecord, @Nullable final Record outputRecord, - @Nullable final RecordExtractor outputExtractor) throws DataAccessException { - - return execute((InteractionCallback) (interaction, connectionFactory) -> { - Record outputRecordToUse = outputRecord; - try { - if (outputRecord != null || getOutputRecordCreator() != null) { - // Use the CCI execute method with output record as parameter. - if (outputRecord == null) { - RecordFactory recordFactory = getRecordFactory(connectionFactory); - outputRecordToUse = getOutputRecordCreator().createRecord(recordFactory); - } - interaction.execute(spec, inputRecord, outputRecordToUse); - } - else { - outputRecordToUse = interaction.execute(spec, inputRecord); - } - return (outputExtractor != null ? outputExtractor.extractData(outputRecordToUse) : null); - } - finally { - if (outputRecordToUse instanceof ResultSet) { - closeResultSet((ResultSet) outputRecordToUse); - } - } - }); - } - - - /** - * Create an indexed Record through the ConnectionFactory's RecordFactory. - * @param name the name of the record - * @return the Record - * @throws DataAccessException if creation of the Record failed - * @see #getRecordFactory(javax.resource.cci.ConnectionFactory) - * @see javax.resource.cci.RecordFactory#createIndexedRecord(String) - */ - public IndexedRecord createIndexedRecord(String name) throws DataAccessException { - try { - RecordFactory recordFactory = getRecordFactory(obtainConnectionFactory()); - return recordFactory.createIndexedRecord(name); - } - catch (NotSupportedException ex) { - throw new org.springframework.jca.cci.RecordTypeNotSupportedException( - "Creation of indexed Record not supported by connector", ex); - } - catch (ResourceException ex) { - throw new org.springframework.jca.cci.CannotCreateRecordException( - "Creation of indexed Record failed", ex); - } - } - - /** - * Create a mapped Record from the ConnectionFactory's RecordFactory. - * @param name record name - * @return the Record - * @throws DataAccessException if creation of the Record failed - * @see #getRecordFactory(javax.resource.cci.ConnectionFactory) - * @see javax.resource.cci.RecordFactory#createMappedRecord(String) - */ - public MappedRecord createMappedRecord(String name) throws DataAccessException { - try { - RecordFactory recordFactory = getRecordFactory(obtainConnectionFactory()); - return recordFactory.createMappedRecord(name); - } - catch (NotSupportedException ex) { - throw new org.springframework.jca.cci.RecordTypeNotSupportedException( - "Creation of mapped Record not supported by connector", ex); - } - catch (ResourceException ex) { - throw new org.springframework.jca.cci.CannotCreateRecordException( - "Creation of mapped Record failed", ex); - } - } - - /** - * Invoke the given RecordCreator, converting JCA ResourceExceptions - * to Spring's DataAccessException hierarchy. - * @param recordCreator the RecordCreator to invoke - * @return the created Record - * @throws DataAccessException if creation of the Record failed - * @see #getRecordFactory(javax.resource.cci.ConnectionFactory) - * @see RecordCreator#createRecord(javax.resource.cci.RecordFactory) - */ - protected Record createRecord(RecordCreator recordCreator) throws DataAccessException { - try { - RecordFactory recordFactory = getRecordFactory(obtainConnectionFactory()); - return recordCreator.createRecord(recordFactory); - } - catch (NotSupportedException ex) { - throw new org.springframework.jca.cci.RecordTypeNotSupportedException( - "Creation of the desired Record type not supported by connector", ex); - } - catch (ResourceException ex) { - throw new org.springframework.jca.cci.CannotCreateRecordException( - "Creation of the desired Record failed", ex); - } - } - - /** - * Return a RecordFactory for the given ConnectionFactory. - *

    Default implementation returns the connector's RecordFactory if - * available, falling back to a NotSupportedRecordFactory placeholder. - * This allows to invoke a RecordCreator callback with a non-null - * RecordFactory reference in any case. - * @param connectionFactory the CCI ConnectionFactory - * @return the CCI RecordFactory for the ConnectionFactory - * @throws ResourceException if thrown by CCI methods - * @see org.springframework.jca.cci.connection.NotSupportedRecordFactory - */ - protected RecordFactory getRecordFactory(ConnectionFactory connectionFactory) throws ResourceException { - try { - return connectionFactory.getRecordFactory(); - } - catch (NotSupportedException ex) { - return new org.springframework.jca.cci.connection.NotSupportedRecordFactory(); - } - } - - - /** - * Close the given CCI Interaction and ignore any thrown exception. - * This is useful for typical finally blocks in manual CCI code. - * @param interaction the CCI Interaction to close - * @see javax.resource.cci.Interaction#close() - */ - private void closeInteraction(@Nullable Interaction interaction) { - if (interaction != null) { - try { - interaction.close(); - } - catch (ResourceException ex) { - logger.trace("Could not close CCI Interaction", ex); - } - catch (Throwable ex) { - // We don't trust the CCI driver: It might throw RuntimeException or Error. - logger.trace("Unexpected exception on closing CCI Interaction", ex); - } - } - } - - /** - * Close the given CCI ResultSet and ignore any thrown exception. - * This is useful for typical finally blocks in manual CCI code. - * @param resultSet the CCI ResultSet to close - * @see javax.resource.cci.ResultSet#close() - */ - private void closeResultSet(@Nullable ResultSet resultSet) { - if (resultSet != null) { - try { - resultSet.close(); - } - catch (SQLException ex) { - logger.trace("Could not close CCI ResultSet", ex); - } - catch (Throwable ex) { - // We don't trust the CCI driver: It might throw RuntimeException or Error. - logger.trace("Unexpected exception on closing CCI ResultSet", ex); - } - } - } - - - private static class SimpleRecordExtractor implements RecordExtractor { - - @Override - public Record extractData(Record record) { - return record; - } - } - -} diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/core/ConnectionCallback.java b/spring-tx/src/main/java/org/springframework/jca/cci/core/ConnectionCallback.java deleted file mode 100644 index a573f3583e6..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/cci/core/ConnectionCallback.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright 2002-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.cci.core; - -import java.sql.SQLException; - -import javax.resource.ResourceException; -import javax.resource.cci.Connection; -import javax.resource.cci.ConnectionFactory; - -import org.springframework.dao.DataAccessException; -import org.springframework.lang.Nullable; - -/** - * Generic callback interface for code that operates on a CCI Connection. - * Allows to execute any number of operations on a single Connection, - * using any type and number of Interaction. - * - *

    This is particularly useful for delegating to existing data access code - * that expects a Connection to work on and throws ResourceException. For newly - * written code, it is strongly recommended to use CciTemplate's more specific - * {@code execute} variants. - * - * @author Thierry Templier - * @author Juergen Hoeller - * @since 1.2 - * @param the result type - * @see CciTemplate#execute(ConnectionCallback) - * @see CciTemplate#execute(javax.resource.cci.InteractionSpec, javax.resource.cci.Record) - * @see CciTemplate#execute(javax.resource.cci.InteractionSpec, RecordCreator, RecordExtractor) - * @deprecated as of 5.3, in favor of specific data access APIs - * (or native CCI usage if there is no alternative) - */ -@Deprecated -@FunctionalInterface -public interface ConnectionCallback { - - /** - * Gets called by {@code CciTemplate.execute} with an active CCI Connection. - * Does not need to care about activating or closing the Connection, or handling - * transactions. - *

    If called without a thread-bound CCI transaction (initiated by - * CciLocalTransactionManager), the code will simply get executed on the CCI - * Connection with its transactional semantics. If CciTemplate is configured - * to use a JTA-aware ConnectionFactory, the CCI Connection and thus the callback - * code will be transactional if a JTA transaction is active. - *

    Allows for returning a result object created within the callback, i.e. - * a domain object or a collection of domain objects. Note that there's special - * support for single step actions: see the {@code CciTemplate.execute} - * variants. A thrown RuntimeException is treated as application exception: - * it gets propagated to the caller of the template. - * @param connection active CCI Connection - * @param connectionFactory the CCI ConnectionFactory that the Connection was - * created with (gives access to RecordFactory and ResourceAdapterMetaData) - * @return a result object, or {@code null} if none - * @throws ResourceException if thrown by a CCI method, to be auto-converted - * to a DataAccessException - * @throws SQLException if thrown by a ResultSet method, to be auto-converted - * to a DataAccessException - * @throws DataAccessException in case of custom exceptions - * @see javax.resource.cci.ConnectionFactory#getRecordFactory() - * @see javax.resource.cci.ConnectionFactory#getMetaData() - * @see CciTemplate#execute(javax.resource.cci.InteractionSpec, RecordCreator, RecordExtractor) - */ - @Nullable - T doInConnection(Connection connection, ConnectionFactory connectionFactory) - throws ResourceException, SQLException, DataAccessException; - -} diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/core/InteractionCallback.java b/spring-tx/src/main/java/org/springframework/jca/cci/core/InteractionCallback.java deleted file mode 100644 index 447a1432eb9..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/cci/core/InteractionCallback.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright 2002-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.cci.core; - -import java.sql.SQLException; - -import javax.resource.ResourceException; -import javax.resource.cci.ConnectionFactory; -import javax.resource.cci.Interaction; - -import org.springframework.dao.DataAccessException; -import org.springframework.lang.Nullable; - -/** - * Generic callback interface for code that operates on a CCI Interaction. - * Allows to execute any number of operations on a single Interaction, for - * example a single execute call or repeated execute calls with varying - * parameters. - * - *

    This is particularly useful for delegating to existing data access code - * that expects an Interaction to work on and throws ResourceException. For newly - * written code, it is strongly recommended to use CciTemplate's more specific - * {@code execute} variants. - * - * @author Thierry Templier - * @author Juergen Hoeller - * @since 1.2 - * @param the result type - * @see CciTemplate#execute(InteractionCallback) - * @see CciTemplate#execute(javax.resource.cci.InteractionSpec, javax.resource.cci.Record) - * @see CciTemplate#execute(javax.resource.cci.InteractionSpec, RecordCreator, RecordExtractor) - * @deprecated as of 5.3, in favor of specific data access APIs - * (or native CCI usage if there is no alternative) - */ -@Deprecated -@FunctionalInterface -public interface InteractionCallback { - - /** - * Gets called by {@code CciTemplate.execute} with an active CCI Interaction. - * Does not need to care about activating or closing the Interaction, or - * handling transactions. - *

    If called without a thread-bound CCI transaction (initiated by - * CciLocalTransactionManager), the code will simply get executed on the CCI - * Interaction with its transactional semantics. If CciTemplate is configured - * to use a JTA-aware ConnectionFactory, the CCI Interaction and thus the callback - * code will be transactional if a JTA transaction is active. - *

    Allows for returning a result object created within the callback, i.e. - * a domain object or a collection of domain objects. Note that there's special - * support for single step actions: see the {@code CciTemplate.execute} - * variants. A thrown RuntimeException is treated as application exception: - * it gets propagated to the caller of the template. - * @param interaction active CCI Interaction - * @param connectionFactory the CCI ConnectionFactory that the Connection was - * created with (gives access to RecordFactory and ResourceAdapterMetaData) - * @return a result object, or {@code null} if none - * @throws ResourceException if thrown by a CCI method, to be auto-converted - * to a DataAccessException - * @throws SQLException if thrown by a ResultSet method, to be auto-converted - * to a DataAccessException - * @throws DataAccessException in case of custom exceptions - * @see javax.resource.cci.ConnectionFactory#getRecordFactory() - * @see javax.resource.cci.ConnectionFactory#getMetaData() - * @see CciTemplate#execute(javax.resource.cci.InteractionSpec, RecordCreator, RecordExtractor) - */ - @Nullable - T doInInteraction(Interaction interaction, ConnectionFactory connectionFactory) - throws ResourceException, SQLException, DataAccessException; - -} diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/core/RecordCreator.java b/spring-tx/src/main/java/org/springframework/jca/cci/core/RecordCreator.java deleted file mode 100644 index 18836887e03..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/cci/core/RecordCreator.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright 2002-2016 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.cci.core; - -import javax.resource.ResourceException; -import javax.resource.cci.Record; -import javax.resource.cci.RecordFactory; - -import org.springframework.dao.DataAccessException; - -/** - * Callback interface for creating a CCI Record instance, - * usually based on the passed-in CCI RecordFactory. - * - *

    Used for input Record creation in CciTemplate. Alternatively, - * Record instances can be passed into CciTemplate's corresponding - * {@code execute} methods directly, either instantiated manually - * or created through CciTemplate's Record factory methods. - * - *

    Also used for creating default output Records in CciTemplate. - * This is useful when the JCA connector needs an explicit output Record - * instance, but no output Records should be passed into CciTemplate's - * {@code execute} methods. - * - * @author Thierry Templier - * @author Juergen Hoeller - * @since 1.2 - * @see CciTemplate#execute(javax.resource.cci.InteractionSpec, RecordCreator) - * @see CciTemplate#execute(javax.resource.cci.InteractionSpec, RecordCreator, RecordExtractor) - * @see CciTemplate#createIndexedRecord(String) - * @see CciTemplate#createMappedRecord(String) - * @see CciTemplate#setOutputRecordCreator(RecordCreator) - * @deprecated as of 5.3, in favor of specific data access APIs - * (or native CCI usage if there is no alternative) - */ -@Deprecated -@FunctionalInterface -public interface RecordCreator { - - /** - * Create a CCI Record instance, usually based on the passed-in CCI RecordFactory. - *

    For use as input creator with CciTemplate's {@code execute} methods, - * this method should create a populated Record instance. For use as - * output Record creator, it should return an empty Record instance. - * @param recordFactory the CCI RecordFactory (never {@code null}, but not guaranteed to be - * supported by the connector: its create methods might throw NotSupportedException) - * @return the Record instance - * @throws ResourceException if thrown by a CCI method, to be auto-converted - * to a DataAccessException - * @throws DataAccessException in case of custom exceptions - */ - Record createRecord(RecordFactory recordFactory) throws ResourceException, DataAccessException; - -} diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/core/RecordExtractor.java b/spring-tx/src/main/java/org/springframework/jca/cci/core/RecordExtractor.java deleted file mode 100644 index 8c5e9e2b666..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/cci/core/RecordExtractor.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 2002-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.cci.core; - -import java.sql.SQLException; - -import javax.resource.ResourceException; -import javax.resource.cci.Record; - -import org.springframework.dao.DataAccessException; -import org.springframework.lang.Nullable; - -/** - * Callback interface for extracting a result object from a CCI Record instance. - * - *

    Used for output object creation in CciTemplate. Alternatively, output - * Records can also be returned to client code as-is. In case of a CCI ResultSet - * as execution result, you will almost always want to implement a RecordExtractor, - * to be able to read the ResultSet in a managed fashion, with the CCI Connection - * still open while reading the ResultSet. - * - *

    Implementations of this interface perform the actual work of extracting - * results, but don't need to worry about exception handling. ResourceExceptions - * will be caught and handled correctly by the CciTemplate class. - * - * @author Thierry Templier - * @author Juergen Hoeller - * @since 1.2 - * @param the result type - * @see CciTemplate#execute(javax.resource.cci.InteractionSpec, Record, RecordExtractor) - * @see CciTemplate#execute(javax.resource.cci.InteractionSpec, RecordCreator, RecordExtractor) - * @see javax.resource.cci.ResultSet - * @deprecated as of 5.3, in favor of specific data access APIs - * (or native CCI usage if there is no alternative) - */ -@Deprecated -@FunctionalInterface -public interface RecordExtractor { - - /** - * Process the data in the given Record, creating a corresponding result object. - * @param record the Record to extract data from - * (possibly a CCI ResultSet) - * @return an arbitrary result object, or {@code null} if none - * (the extractor will typically be stateful in the latter case) - * @throws ResourceException if thrown by a CCI method, to be auto-converted - * to a DataAccessException - * @throws SQLException if thrown by a ResultSet method, to be auto-converted - * to a DataAccessException - * @throws DataAccessException in case of custom exceptions - * @see javax.resource.cci.ResultSet - */ - @Nullable - T extractData(Record record) throws ResourceException, SQLException, DataAccessException; - -} diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/core/package-info.java b/spring-tx/src/main/java/org/springframework/jca/cci/core/package-info.java deleted file mode 100644 index 33d36edf29d..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/cci/core/package-info.java +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Provides the core JCA CCI support, based on CciTemplate - * and its associated callback interfaces. - */ -@NonNullApi -@NonNullFields -package org.springframework.jca.cci.core; - -import org.springframework.lang.NonNullApi; -import org.springframework.lang.NonNullFields; diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/core/support/CciDaoSupport.java b/spring-tx/src/main/java/org/springframework/jca/cci/core/support/CciDaoSupport.java deleted file mode 100644 index e650bae6051..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/cci/core/support/CciDaoSupport.java +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Copyright 2002-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.cci.core.support; - -import javax.resource.cci.Connection; -import javax.resource.cci.ConnectionFactory; -import javax.resource.cci.ConnectionSpec; - -import org.springframework.dao.support.DaoSupport; -import org.springframework.lang.Nullable; -import org.springframework.util.Assert; - -/** - * Convenient super class for CCI-based data access objects. - * - *

    Requires a {@link javax.resource.cci.ConnectionFactory} to be set, - * providing a {@link org.springframework.jca.cci.core.CciTemplate} based - * on it to subclasses through the {@link #getCciTemplate()} method. - * - *

    This base class is mainly intended for CciTemplate usage but can - * also be used when working with a Connection directly or when using - * {@code org.springframework.jca.cci.object} classes. - * - * @author Thierry Templier - * @author Juergen Hoeller - * @since 1.2 - * @see #setConnectionFactory - * @see #getCciTemplate - * @see org.springframework.jca.cci.core.CciTemplate - * @deprecated as of 5.3, in favor of specific data access APIs - * (or native CCI usage if there is no alternative) - */ -@Deprecated -public abstract class CciDaoSupport extends DaoSupport { - - @Nullable - private org.springframework.jca.cci.core.CciTemplate cciTemplate; - - - /** - * Set the ConnectionFactory to be used by this DAO. - */ - public final void setConnectionFactory(ConnectionFactory connectionFactory) { - if (this.cciTemplate == null || connectionFactory != this.cciTemplate.getConnectionFactory()) { - this.cciTemplate = createCciTemplate(connectionFactory); - } - } - - /** - * Create a CciTemplate for the given ConnectionFactory. - * Only invoked if populating the DAO with a ConnectionFactory reference! - *

    Can be overridden in subclasses to provide a CciTemplate instance - * with different configuration, or a custom CciTemplate subclass. - * @param connectionFactory the CCI ConnectionFactory to create a CciTemplate for - * @return the new CciTemplate instance - * @see #setConnectionFactory(javax.resource.cci.ConnectionFactory) - */ - protected org.springframework.jca.cci.core.CciTemplate createCciTemplate(ConnectionFactory connectionFactory) { - return new org.springframework.jca.cci.core.CciTemplate(connectionFactory); - } - - /** - * Return the ConnectionFactory used by this DAO. - */ - @Nullable - public final ConnectionFactory getConnectionFactory() { - return (this.cciTemplate != null ? this.cciTemplate.getConnectionFactory() : null); - } - - /** - * Set the CciTemplate for this DAO explicitly, - * as an alternative to specifying a ConnectionFactory. - */ - public final void setCciTemplate(org.springframework.jca.cci.core.CciTemplate cciTemplate) { - this.cciTemplate = cciTemplate; - } - - /** - * Return the CciTemplate for this DAO, - * pre-initialized with the ConnectionFactory or set explicitly. - */ - @Nullable - public final org.springframework.jca.cci.core.CciTemplate getCciTemplate() { - return this.cciTemplate; - } - - @Override - protected final void checkDaoConfig() { - if (this.cciTemplate == null) { - throw new IllegalArgumentException("'connectionFactory' or 'cciTemplate' is required"); - } - } - - - /** - * Obtain a CciTemplate derived from the main template instance, - * inheriting the ConnectionFactory and other settings but - * overriding the ConnectionSpec used for obtaining Connections. - * @param connectionSpec the CCI ConnectionSpec that the returned - * template instance is supposed to obtain Connections for - * @return the derived template instance - * @see org.springframework.jca.cci.core.CciTemplate#getDerivedTemplate(javax.resource.cci.ConnectionSpec) - */ - protected final org.springframework.jca.cci.core.CciTemplate getCciTemplate(ConnectionSpec connectionSpec) { - org.springframework.jca.cci.core.CciTemplate cciTemplate = getCciTemplate(); - Assert.state(cciTemplate != null, "No CciTemplate set"); - return cciTemplate.getDerivedTemplate(connectionSpec); - } - - /** - * Get a CCI Connection, either from the current transaction or a new one. - * @return the CCI Connection - * @throws org.springframework.jca.cci.CannotGetCciConnectionException - * if the attempt to get a Connection failed - * @see org.springframework.jca.cci.connection.ConnectionFactoryUtils#getConnection(javax.resource.cci.ConnectionFactory) - */ - protected final Connection getConnection() throws org.springframework.jca.cci.CannotGetCciConnectionException { - ConnectionFactory connectionFactory = getConnectionFactory(); - Assert.state(connectionFactory != null, "No ConnectionFactory set"); - return org.springframework.jca.cci.connection.ConnectionFactoryUtils.getConnection(connectionFactory); - } - - /** - * Close the given CCI Connection, created via this bean's ConnectionFactory, - * if it isn't bound to the thread. - * @param con the Connection to close - * @see org.springframework.jca.cci.connection.ConnectionFactoryUtils#releaseConnection - */ - protected final void releaseConnection(Connection con) { - org.springframework.jca.cci.connection.ConnectionFactoryUtils.releaseConnection(con, getConnectionFactory()); - } - -} diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/core/support/CommAreaRecord.java b/spring-tx/src/main/java/org/springframework/jca/cci/core/support/CommAreaRecord.java deleted file mode 100644 index 6f54b8b03ce..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/cci/core/support/CommAreaRecord.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright 2002-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.cci.core.support; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - -import javax.resource.cci.Record; -import javax.resource.cci.Streamable; - -import org.springframework.util.FileCopyUtils; - -/** - * CCI Record implementation for a COMMAREA, holding a byte array. - * - * @author Thierry Templier - * @author Juergen Hoeller - * @since 1.2 - * @see org.springframework.jca.cci.object.MappingCommAreaOperation - * @deprecated as of 5.3, in favor of specific data access APIs - * (or native CCI usage if there is no alternative) - */ -@Deprecated -@SuppressWarnings("serial") -public class CommAreaRecord implements Record, Streamable { - - private byte[] bytes = new byte[0]; - - private String recordName = ""; - - private String recordShortDescription = ""; - - - /** - * Create a new CommAreaRecord. - * @see #read(java.io.InputStream) - */ - public CommAreaRecord() { - } - - /** - * Create a new CommAreaRecord. - * @param bytes the bytes to fill the record with - */ - public CommAreaRecord(byte[] bytes) { - this.bytes = bytes; - } - - - @Override - public void setRecordName(String recordName) { - this.recordName = recordName; - } - - @Override - public String getRecordName() { - return this.recordName; - } - - @Override - public void setRecordShortDescription(String recordShortDescription) { - this.recordShortDescription = recordShortDescription; - } - - @Override - public String getRecordShortDescription() { - return this.recordShortDescription; - } - - - @Override - public void read(InputStream in) throws IOException { - this.bytes = FileCopyUtils.copyToByteArray(in); - } - - @Override - public void write(OutputStream out) throws IOException { - out.write(this.bytes); - out.flush(); - } - - public byte[] toByteArray() { - return this.bytes; - } - - - @Override - public Object clone() { - return new CommAreaRecord(this.bytes); - } - -} diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/core/support/package-info.java b/spring-tx/src/main/java/org/springframework/jca/cci/core/support/package-info.java deleted file mode 100644 index d7bfd6bc0f2..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/cci/core/support/package-info.java +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Classes supporting the {@code org.springframework.jca.cci.core} package. - * Contains a DAO base class for CciTemplate usage. - */ -@NonNullApi -@NonNullFields -package org.springframework.jca.cci.core.support; - -import org.springframework.lang.NonNullApi; -import org.springframework.lang.NonNullFields; diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/object/EisOperation.java b/spring-tx/src/main/java/org/springframework/jca/cci/object/EisOperation.java deleted file mode 100644 index 7cbe685ef03..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/cci/object/EisOperation.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright 2002-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.cci.object; - -import javax.resource.cci.ConnectionFactory; -import javax.resource.cci.InteractionSpec; - -import org.springframework.beans.factory.InitializingBean; -import org.springframework.lang.Nullable; -import org.springframework.util.Assert; - -/** - * Base class for EIS operation objects that work with the CCI API. - * Encapsulates a CCI ConnectionFactory and a CCI InteractionSpec. - * - *

    Works with a CciTemplate instance underneath. EIS operation objects - * are an alternative to working with a CciTemplate directly. - * - * @author Juergen Hoeller - * @since 1.2 - * @see #setConnectionFactory - * @see #setInteractionSpec - * @deprecated as of 5.3, in favor of specific data access APIs - * (or native CCI usage if there is no alternative) - */ -@Deprecated -public abstract class EisOperation implements InitializingBean { - - private org.springframework.jca.cci.core.CciTemplate cciTemplate = - new org.springframework.jca.cci.core.CciTemplate(); - - @Nullable - private InteractionSpec interactionSpec; - - - /** - * Set the CciTemplate to be used by this operation. - * Alternatively, specify a CCI ConnectionFactory. - * @see #setConnectionFactory - */ - public void setCciTemplate(org.springframework.jca.cci.core.CciTemplate cciTemplate) { - Assert.notNull(cciTemplate, "CciTemplate must not be null"); - this.cciTemplate = cciTemplate; - } - - /** - * Return the CciTemplate used by this operation. - */ - public org.springframework.jca.cci.core.CciTemplate getCciTemplate() { - return this.cciTemplate; - } - - /** - * Set the CCI ConnectionFactory to be used by this operation. - */ - public void setConnectionFactory(ConnectionFactory connectionFactory) { - this.cciTemplate.setConnectionFactory(connectionFactory); - } - - /** - * Set the CCI InteractionSpec for this operation. - */ - public void setInteractionSpec(@Nullable InteractionSpec interactionSpec) { - this.interactionSpec = interactionSpec; - } - - /** - * Return the CCI InteractionSpec for this operation. - */ - @Nullable - public InteractionSpec getInteractionSpec() { - return this.interactionSpec; - } - - - @Override - public void afterPropertiesSet() { - this.cciTemplate.afterPropertiesSet(); - - if (this.interactionSpec == null) { - throw new IllegalArgumentException("InteractionSpec is required"); - } - } - -} diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/object/MappingCommAreaOperation.java b/spring-tx/src/main/java/org/springframework/jca/cci/object/MappingCommAreaOperation.java deleted file mode 100644 index 25db832ae20..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/cci/object/MappingCommAreaOperation.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright 2002-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.cci.object; - -import java.io.IOException; - -import javax.resource.cci.ConnectionFactory; -import javax.resource.cci.InteractionSpec; -import javax.resource.cci.Record; -import javax.resource.cci.RecordFactory; - -import org.springframework.dao.DataAccessException; -import org.springframework.dao.DataRetrievalFailureException; - -/** - * EIS operation object for access to COMMAREA records. - * Subclass of the generic MappingRecordOperation class. - * - * @author Thierry Templier - * @since 1.2 - * @deprecated as of 5.3, in favor of specific data access APIs - * (or native CCI usage if there is no alternative) - */ -@Deprecated -public abstract class MappingCommAreaOperation extends MappingRecordOperation { - - /** - * Create a new MappingCommAreaQuery. - * @see #setConnectionFactory - * @see #setInteractionSpec - */ - public MappingCommAreaOperation() { - } - - /** - * Create a new MappingCommAreaQuery. - * @param connectionFactory the ConnectionFactory to use to obtain connections - * @param interactionSpec specification to configure the interaction - */ - public MappingCommAreaOperation(ConnectionFactory connectionFactory, InteractionSpec interactionSpec) { - super(connectionFactory, interactionSpec); - } - - - @Override - protected final Record createInputRecord(RecordFactory recordFactory, Object inObject) { - try { - return new org.springframework.jca.cci.core.support.CommAreaRecord(objectToBytes(inObject)); - } - catch (IOException ex) { - throw new DataRetrievalFailureException("I/O exception during bytes conversion", ex); - } - } - - @Override - protected final Object extractOutputData(Record record) throws DataAccessException { - org.springframework.jca.cci.core.support.CommAreaRecord commAreaRecord = - (org.springframework.jca.cci.core.support.CommAreaRecord) record; - try { - return bytesToObject(commAreaRecord.toByteArray()); - } - catch (IOException ex) { - throw new DataRetrievalFailureException("I/O exception during bytes conversion", ex); - } - } - - - /** - * Method used to convert an object into COMMAREA bytes. - * @param inObject the input data - * @return the COMMAREA's bytes - * @throws IOException if thrown by I/O methods - * @throws DataAccessException if conversion failed - */ - protected abstract byte[] objectToBytes(Object inObject) throws IOException, DataAccessException; - - /** - * Method used to convert the COMMAREA's bytes to an object. - * @param bytes the COMMAREA's bytes - * @return the output data - * @throws IOException if thrown by I/O methods - * @throws DataAccessException if conversion failed - */ - protected abstract Object bytesToObject(byte[] bytes) throws IOException, DataAccessException; - -} diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/object/MappingRecordOperation.java b/spring-tx/src/main/java/org/springframework/jca/cci/object/MappingRecordOperation.java deleted file mode 100644 index 148c181a44d..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/cci/object/MappingRecordOperation.java +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Copyright 2002-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.cci.object; - -import java.sql.SQLException; - -import javax.resource.ResourceException; -import javax.resource.cci.ConnectionFactory; -import javax.resource.cci.InteractionSpec; -import javax.resource.cci.Record; -import javax.resource.cci.RecordFactory; - -import org.springframework.dao.DataAccessException; -import org.springframework.lang.Nullable; -import org.springframework.util.Assert; - -/** - * EIS operation object that expects mapped input and output objects, - * converting to and from CCI Records. - * - *

    Concrete subclasses must implement the abstract - * {@code createInputRecord(RecordFactory, Object)} and - * {@code extractOutputData(Record)} methods, to create an input - * Record from an object and to convert an output Record into an object, - * respectively. - * - * @author Thierry Templier - * @author Juergen Hoeller - * @since 1.2 - * @see #createInputRecord(javax.resource.cci.RecordFactory, Object) - * @see #extractOutputData(javax.resource.cci.Record) - * @deprecated as of 5.3, in favor of specific data access APIs - * (or native CCI usage if there is no alternative) - */ -@Deprecated -public abstract class MappingRecordOperation extends EisOperation { - - /** - * Constructor that allows use as a JavaBean. - */ - public MappingRecordOperation() { - } - - /** - * Convenient constructor with ConnectionFactory and specifications - * (connection and interaction). - * @param connectionFactory the ConnectionFactory to use to obtain connections - */ - public MappingRecordOperation(ConnectionFactory connectionFactory, InteractionSpec interactionSpec) { - getCciTemplate().setConnectionFactory(connectionFactory); - setInteractionSpec(interactionSpec); - } - - /** - * Set a RecordCreator that should be used for creating default output Records. - *

    Default is none: CCI's {@code Interaction.execute} variant - * that returns an output Record will be called. - *

    Specify a RecordCreator here if you always need to call CCI's - * {@code Interaction.execute} variant with a passed-in output Record. - * This RecordCreator will then be invoked to create a default output Record instance. - * @see javax.resource.cci.Interaction#execute(javax.resource.cci.InteractionSpec, Record) - * @see javax.resource.cci.Interaction#execute(javax.resource.cci.InteractionSpec, Record, Record) - * @see org.springframework.jca.cci.core.CciTemplate#setOutputRecordCreator - */ - public void setOutputRecordCreator(org.springframework.jca.cci.core.RecordCreator creator) { - getCciTemplate().setOutputRecordCreator(creator); - } - - /** - * Execute the interaction encapsulated by this operation object. - * @param inputObject the input data, to be converted to a Record - * by the {@code createInputRecord} method - * @return the output data extracted with the {@code extractOutputData} method - * @throws DataAccessException if there is any problem - * @see #createInputRecord - * @see #extractOutputData - */ - @Nullable - public Object execute(Object inputObject) throws DataAccessException { - InteractionSpec interactionSpec = getInteractionSpec(); - Assert.state(interactionSpec != null, "No InteractionSpec set"); - return getCciTemplate().execute( - interactionSpec, new RecordCreatorImpl(inputObject), new RecordExtractorImpl()); - } - - - /** - * Subclasses must implement this method to generate an input Record - * from an input object passed into the {@code execute} method. - * @param inputObject the passed-in input object - * @return the CCI input Record - * @throws ResourceException if thrown by a CCI method, to be auto-converted - * to a DataAccessException - * @see #execute(Object) - */ - protected abstract Record createInputRecord(RecordFactory recordFactory, Object inputObject) - throws ResourceException, DataAccessException; - - /** - * Subclasses must implement this method to convert the Record returned - * by CCI execution into a result object for the {@code execute} method. - * @param outputRecord the Record returned by CCI execution - * @return the result object - * @throws ResourceException if thrown by a CCI method, to be auto-converted - * to a DataAccessException - * @see #execute(Object) - */ - protected abstract Object extractOutputData(Record outputRecord) - throws ResourceException, SQLException, DataAccessException; - - - /** - * Implementation of RecordCreator that calls the enclosing - * class's {@code createInputRecord} method. - */ - protected class RecordCreatorImpl implements org.springframework.jca.cci.core.RecordCreator { - - private final Object inputObject; - - public RecordCreatorImpl(Object inObject) { - this.inputObject = inObject; - } - - @Override - public Record createRecord(RecordFactory recordFactory) throws ResourceException, DataAccessException { - return createInputRecord(recordFactory, this.inputObject); - } - } - - - /** - * Implementation of RecordExtractor that calls the enclosing - * class's {@code extractOutputData} method. - */ - protected class RecordExtractorImpl implements org.springframework.jca.cci.core.RecordExtractor { - - @Override - public Object extractData(Record record) throws ResourceException, SQLException, DataAccessException { - return extractOutputData(record); - } - } - -} diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/object/SimpleRecordOperation.java b/spring-tx/src/main/java/org/springframework/jca/cci/object/SimpleRecordOperation.java deleted file mode 100644 index 5799ca935a8..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/cci/object/SimpleRecordOperation.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright 2002-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.cci.object; - -import javax.resource.cci.ConnectionFactory; -import javax.resource.cci.InteractionSpec; -import javax.resource.cci.Record; - -import org.springframework.dao.DataAccessException; -import org.springframework.lang.Nullable; -import org.springframework.util.Assert; - -/** - * EIS operation object that accepts a passed-in CCI input Record - * and returns a corresponding CCI output Record. - * - * @author Juergen Hoeller - * @since 1.2 - * @deprecated as of 5.3, in favor of specific data access APIs - * (or native CCI usage if there is no alternative) - */ -@Deprecated -public class SimpleRecordOperation extends EisOperation { - - /** - * Constructor that allows use as a JavaBean. - */ - public SimpleRecordOperation() { - } - - /** - * Convenient constructor with ConnectionFactory and specifications - * (connection and interaction). - * @param connectionFactory the ConnectionFactory to use to obtain connections - */ - public SimpleRecordOperation(ConnectionFactory connectionFactory, InteractionSpec interactionSpec) { - getCciTemplate().setConnectionFactory(connectionFactory); - setInteractionSpec(interactionSpec); - } - - - /** - * Execute the CCI interaction encapsulated by this operation object. - *

    This method will call CCI's {@code Interaction.execute} variant - * that returns an output Record. - * @param inputRecord the input record - * @return the output record - * @throws DataAccessException if there is any problem - * @see javax.resource.cci.Interaction#execute(javax.resource.cci.InteractionSpec, Record) - */ - @Nullable - public Record execute(Record inputRecord) throws DataAccessException { - InteractionSpec interactionSpec = getInteractionSpec(); - Assert.state(interactionSpec != null, "No InteractionSpec set"); - return getCciTemplate().execute(interactionSpec, inputRecord); - } - - /** - * Execute the CCI interaction encapsulated by this operation object. - *

    This method will call CCI's {@code Interaction.execute} variant - * with a passed-in output Record. - * @param inputRecord the input record - * @param outputRecord the output record - * @throws DataAccessException if there is any problem - * @see javax.resource.cci.Interaction#execute(javax.resource.cci.InteractionSpec, Record, Record) - */ - public void execute(Record inputRecord, Record outputRecord) throws DataAccessException { - InteractionSpec interactionSpec = getInteractionSpec(); - Assert.state(interactionSpec != null, "No InteractionSpec set"); - getCciTemplate().execute(interactionSpec, inputRecord, outputRecord); - } - -} diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/object/package-info.java b/spring-tx/src/main/java/org/springframework/jca/cci/object/package-info.java deleted file mode 100644 index 2c51b175d10..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/cci/object/package-info.java +++ /dev/null @@ -1,13 +0,0 @@ -/** - * The classes in this package represent EIS operations as threadsafe, - * reusable objects. This higher level of CCI abstraction depends on the - * lower-level abstraction in the {@code org.springframework.jca.cci.core} package. - * Exceptions thrown are as in the {@code org.springframework.dao} package, - * meaning that code using this package does not need to worry about error handling. - */ -@NonNullApi -@NonNullFields -package org.springframework.jca.cci.object; - -import org.springframework.lang.NonNullApi; -import org.springframework.lang.NonNullFields; diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/package-info.java b/spring-tx/src/main/java/org/springframework/jca/cci/package-info.java deleted file mode 100644 index 469cdc926b3..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/cci/package-info.java +++ /dev/null @@ -1,12 +0,0 @@ -/** - * This package contains Spring's support for the Common Client Interface (CCI), - * as defined by the J2EE Connector Architecture. It is conceptually similar - * to the {@code org.springframework.jdbc} package, providing the same - * levels of data access abstraction. - */ -@NonNullApi -@NonNullFields -package org.springframework.jca.cci; - -import org.springframework.lang.NonNullApi; -import org.springframework.lang.NonNullFields; diff --git a/spring-tx/src/main/java/org/springframework/jca/context/BootstrapContextAware.java b/spring-tx/src/main/java/org/springframework/jca/context/BootstrapContextAware.java deleted file mode 100644 index 66c6b65c1d3..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/context/BootstrapContextAware.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 2002-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.context; - -import javax.resource.spi.BootstrapContext; - -import org.springframework.beans.factory.Aware; - -/** - * Interface to be implemented by any object that wishes to be - * notified of the BootstrapContext (typically determined by the - * {@link ResourceAdapterApplicationContext}) that it runs in. - * - * @author Juergen Hoeller - * @author Chris Beams - * @since 2.5 - * @see javax.resource.spi.BootstrapContext - */ -public interface BootstrapContextAware extends Aware { - - /** - * Set the BootstrapContext that this object runs in. - *

    Invoked after population of normal bean properties but before an init - * callback like InitializingBean's {@code afterPropertiesSet} or a - * custom init-method. Invoked after ApplicationContextAware's - * {@code setApplicationContext}. - * @param bootstrapContext the BootstrapContext object to be used by this object - * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet - * @see org.springframework.context.ApplicationContextAware#setApplicationContext - */ - void setBootstrapContext(BootstrapContext bootstrapContext); - -} diff --git a/spring-tx/src/main/java/org/springframework/jca/context/BootstrapContextAwareProcessor.java b/spring-tx/src/main/java/org/springframework/jca/context/BootstrapContextAwareProcessor.java deleted file mode 100644 index 1efb9d9a691..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/context/BootstrapContextAwareProcessor.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright 2002-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.context; - -import javax.resource.spi.BootstrapContext; - -import org.springframework.beans.BeansException; -import org.springframework.beans.factory.config.BeanPostProcessor; -import org.springframework.lang.Nullable; - -/** - * {@link org.springframework.beans.factory.config.BeanPostProcessor} - * implementation that passes the BootstrapContext to beans that implement - * the {@link BootstrapContextAware} interface. - * - *

    {@link ResourceAdapterApplicationContext} automatically registers - * this processor with its underlying bean factory. - * - * @author Juergen Hoeller - * @since 2.5 - * @see BootstrapContextAware - */ -class BootstrapContextAwareProcessor implements BeanPostProcessor { - - @Nullable - private final BootstrapContext bootstrapContext; - - - /** - * Create a new BootstrapContextAwareProcessor for the given context. - */ - public BootstrapContextAwareProcessor(@Nullable BootstrapContext bootstrapContext) { - this.bootstrapContext = bootstrapContext; - } - - - @Override - public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { - if (this.bootstrapContext != null && bean instanceof BootstrapContextAware) { - ((BootstrapContextAware) bean).setBootstrapContext(this.bootstrapContext); - } - return bean; - } - - @Override - public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { - return bean; - } - -} diff --git a/spring-tx/src/main/java/org/springframework/jca/context/ResourceAdapterApplicationContext.java b/spring-tx/src/main/java/org/springframework/jca/context/ResourceAdapterApplicationContext.java deleted file mode 100644 index 4154e223046..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/context/ResourceAdapterApplicationContext.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright 2002-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.context; - -import javax.resource.spi.BootstrapContext; -import javax.resource.spi.work.WorkManager; - -import org.springframework.beans.BeansException; -import org.springframework.beans.factory.ObjectFactory; -import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; -import org.springframework.context.support.GenericApplicationContext; -import org.springframework.util.Assert; - -/** - * {@link org.springframework.context.ApplicationContext} implementation - * for a JCA ResourceAdapter. Needs to be initialized with the JCA - * {@link javax.resource.spi.BootstrapContext}, passing it on to - * Spring-managed beans that implement {@link BootstrapContextAware}. - * - * @author Juergen Hoeller - * @since 2.5 - * @see SpringContextResourceAdapter - * @see BootstrapContextAware - */ -public class ResourceAdapterApplicationContext extends GenericApplicationContext { - - private final BootstrapContext bootstrapContext; - - - /** - * Create a new ResourceAdapterApplicationContext for the given BootstrapContext. - * @param bootstrapContext the JCA BootstrapContext that the ResourceAdapter - * has been started with - */ - public ResourceAdapterApplicationContext(BootstrapContext bootstrapContext) { - Assert.notNull(bootstrapContext, "BootstrapContext must not be null"); - this.bootstrapContext = bootstrapContext; - } - - - @Override - protected void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { - beanFactory.addBeanPostProcessor(new BootstrapContextAwareProcessor(this.bootstrapContext)); - beanFactory.ignoreDependencyInterface(BootstrapContextAware.class); - beanFactory.registerResolvableDependency(BootstrapContext.class, this.bootstrapContext); - - // JCA WorkManager resolved lazily - may not be available. - beanFactory.registerResolvableDependency(WorkManager.class, - (ObjectFactory) this.bootstrapContext::getWorkManager); - } - -} diff --git a/spring-tx/src/main/java/org/springframework/jca/context/SpringContextResourceAdapter.java b/spring-tx/src/main/java/org/springframework/jca/context/SpringContextResourceAdapter.java deleted file mode 100644 index 3c99117f645..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/context/SpringContextResourceAdapter.java +++ /dev/null @@ -1,260 +0,0 @@ -/* - * Copyright 2002-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.context; - -import javax.resource.NotSupportedException; -import javax.resource.ResourceException; -import javax.resource.spi.ActivationSpec; -import javax.resource.spi.BootstrapContext; -import javax.resource.spi.ResourceAdapter; -import javax.resource.spi.ResourceAdapterInternalException; -import javax.resource.spi.endpoint.MessageEndpointFactory; -import javax.transaction.xa.XAResource; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import org.springframework.beans.factory.support.BeanDefinitionRegistry; -import org.springframework.beans.factory.xml.XmlBeanDefinitionReader; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.core.env.ConfigurableEnvironment; -import org.springframework.core.env.StandardEnvironment; -import org.springframework.lang.Nullable; -import org.springframework.util.ObjectUtils; -import org.springframework.util.StringUtils; - -/** - * JCA 1.7 {@link javax.resource.spi.ResourceAdapter} implementation - * that loads a Spring {@link org.springframework.context.ApplicationContext}, - * starting and stopping Spring-managed beans as part of the ResourceAdapter's - * lifecycle. - * - *

    Ideal for application contexts that do not need any HTTP entry points - * but rather just consist of message endpoints and scheduled jobs etc. - * Beans in such a context may use application server resources such as the - * JTA transaction manager and JNDI-bound JDBC DataSources and JMS - * ConnectionFactory instances, and may also register with the platform's - * JMX server - all through Spring's standard transaction management and - * JNDI and JMX support facilities. - * - *

    If the need for scheduling asynchronous work arises, consider using - * Spring's {@link org.springframework.jca.work.WorkManagerTaskExecutor} - * as a standard bean definition, to be injected into application beans - * through dependency injection. This WorkManagerTaskExecutor will automatically - * use the JCA WorkManager from the BootstrapContext that has been provided - * to this ResourceAdapter. - * - *

    The JCA {@link javax.resource.spi.BootstrapContext} may also be - * accessed directly, through application components that implement the - * {@link BootstrapContextAware} interface. When deployed using this - * ResourceAdapter, the BootstrapContext is guaranteed to be passed on - * to such components. - * - *

    This ResourceAdapter is to be defined in a "META-INF/ra.xml" file - * within a Java EE ".rar" deployment unit like as follows: - * - *

    - * <?xml version="1.0" encoding="UTF-8"?>
    - * <connector xmlns="http://java.sun.com/xml/ns/j2ee"
    - *		 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    - *		 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee https://java.sun.com/xml/ns/j2ee/connector_1_5.xsd"
    - *		 version="1.5">
    - *	 <vendor-name>Spring Framework</vendor-name>
    - *	 <eis-type>Spring Connector</eis-type>
    - *	 <resourceadapter-version>1.0</resourceadapter-version>
    - *	 <resourceadapter>
    - *		 <resourceadapter-class>org.springframework.jca.context.SpringContextResourceAdapter</resourceadapter-class>
    - *		 <config-property>
    - *			 <config-property-name>ContextConfigLocation</config-property-name>
    - *			 <config-property-type>java.lang.String</config-property-type>
    - *			 <config-property-value>META-INF/applicationContext.xml</config-property-value>
    - *		 </config-property>
    - *	 </resourceadapter>
    - * </connector>
    - * - * Note that "META-INF/applicationContext.xml" is the default context config - * location, so it doesn't have to specified unless you intend to specify - * different/additional config files. So in the default case, you may remove - * the entire {@code config-property} section above. - * - *

    For simple deployment needs, all you need to do is the following: - * Package all application classes into a RAR file (which is just a standard - * JAR file with a different file extension), add all required library jars - * into the root of the RAR archive, add a "META-INF/ra.xml" deployment - * descriptor as shown above as well as the corresponding Spring XML bean - * definition file(s) (typically "META-INF/applicationContext.xml"), - * and drop the resulting RAR file into your application server's - * deployment directory! - * - * @author Juergen Hoeller - * @since 2.5 - * @see #setContextConfigLocation - * @see #loadBeanDefinitions - * @see ResourceAdapterApplicationContext - */ -public class SpringContextResourceAdapter implements ResourceAdapter { - - /** - * Any number of these characters are considered delimiters between - * multiple context config paths in a single String value. - * @see #setContextConfigLocation - */ - public static final String CONFIG_LOCATION_DELIMITERS = ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS; - - /** - * The default {@code applicationContext.xml} location. - */ - public static final String DEFAULT_CONTEXT_CONFIG_LOCATION = "META-INF/applicationContext.xml"; - - - protected final Log logger = LogFactory.getLog(getClass()); - - private String contextConfigLocation = DEFAULT_CONTEXT_CONFIG_LOCATION; - - @Nullable - private ConfigurableApplicationContext applicationContext; - - - /** - * Set the location of the context configuration files, within the - * resource adapter's deployment unit. This can be a delimited - * String that consists of multiple resource location, separated - * by commas, semicolons, whitespace, or line breaks. - *

    This can be specified as "ContextConfigLocation" config - * property in the {@code ra.xml} deployment descriptor. - *

    The default is "classpath:META-INF/applicationContext.xml". - */ - public void setContextConfigLocation(String contextConfigLocation) { - this.contextConfigLocation = contextConfigLocation; - } - - /** - * Return the specified context configuration files. - */ - protected String getContextConfigLocation() { - return this.contextConfigLocation; - } - - /** - * Return a new {@link StandardEnvironment}. - *

    Subclasses may override this method in order to supply - * a custom {@link ConfigurableEnvironment} implementation. - */ - protected ConfigurableEnvironment createEnvironment() { - return new StandardEnvironment(); - } - - /** - * This implementation loads a Spring ApplicationContext through the - * {@link #createApplicationContext} template method. - */ - @Override - public void start(BootstrapContext bootstrapContext) throws ResourceAdapterInternalException { - if (logger.isDebugEnabled()) { - logger.debug("Starting SpringContextResourceAdapter with BootstrapContext: " + bootstrapContext); - } - this.applicationContext = createApplicationContext(bootstrapContext); - } - - /** - * Build a Spring ApplicationContext for the given JCA BootstrapContext. - *

    The default implementation builds a {@link ResourceAdapterApplicationContext} - * and delegates to {@link #loadBeanDefinitions} for actually parsing the - * specified configuration files. - * @param bootstrapContext this ResourceAdapter's BootstrapContext - * @return the Spring ApplicationContext instance - */ - protected ConfigurableApplicationContext createApplicationContext(BootstrapContext bootstrapContext) { - ResourceAdapterApplicationContext applicationContext = - new ResourceAdapterApplicationContext(bootstrapContext); - - // Set ResourceAdapter's ClassLoader as bean class loader. - applicationContext.setClassLoader(getClass().getClassLoader()); - - // Extract individual config locations. - String[] configLocations = - StringUtils.tokenizeToStringArray(getContextConfigLocation(), CONFIG_LOCATION_DELIMITERS); - - loadBeanDefinitions(applicationContext, configLocations); - applicationContext.refresh(); - - return applicationContext; - } - - /** - * Load the bean definitions into the given registry, - * based on the specified configuration files. - * @param registry the registry to load into - * @param configLocations the parsed config locations - * @see #setContextConfigLocation - */ - protected void loadBeanDefinitions(BeanDefinitionRegistry registry, String[] configLocations) { - new XmlBeanDefinitionReader(registry).loadBeanDefinitions(configLocations); - } - - /** - * This implementation closes the Spring ApplicationContext. - */ - @Override - public void stop() { - logger.debug("Stopping SpringContextResourceAdapter"); - if (this.applicationContext != null) { - this.applicationContext.close(); - } - } - - - /** - * This implementation always throws a NotSupportedException. - */ - @Override - public void endpointActivation(MessageEndpointFactory messageEndpointFactory, ActivationSpec activationSpec) - throws ResourceException { - - throw new NotSupportedException("SpringContextResourceAdapter does not support message endpoints"); - } - - /** - * This implementation does nothing. - */ - @Override - public void endpointDeactivation(MessageEndpointFactory messageEndpointFactory, ActivationSpec activationSpec) { - } - - /** - * This implementation always returns {@code null}. - */ - @Override - @Nullable - public XAResource[] getXAResources(ActivationSpec[] activationSpecs) throws ResourceException { - return null; - } - - - @Override - public boolean equals(@Nullable Object other) { - return (this == other || (other instanceof SpringContextResourceAdapter && - ObjectUtils.nullSafeEquals(getContextConfigLocation(), - ((SpringContextResourceAdapter) other).getContextConfigLocation()))); - } - - @Override - public int hashCode() { - return ObjectUtils.nullSafeHashCode(getContextConfigLocation()); - } - -} diff --git a/spring-tx/src/main/java/org/springframework/jca/context/package-info.java b/spring-tx/src/main/java/org/springframework/jca/context/package-info.java deleted file mode 100644 index 172bca88efe..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/context/package-info.java +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Integration package that allows for deploying a Spring application context - * as a JCA 1.7 compliant RAR file. - */ -@NonNullApi -@NonNullFields -package org.springframework.jca.context; - -import org.springframework.lang.NonNullApi; -import org.springframework.lang.NonNullFields; diff --git a/spring-tx/src/main/java/org/springframework/jca/endpoint/AbstractMessageEndpointFactory.java b/spring-tx/src/main/java/org/springframework/jca/endpoint/AbstractMessageEndpointFactory.java index 46ee354a773..bada813d61e 100644 --- a/spring-tx/src/main/java/org/springframework/jca/endpoint/AbstractMessageEndpointFactory.java +++ b/spring-tx/src/main/java/org/springframework/jca/endpoint/AbstractMessageEndpointFactory.java @@ -18,15 +18,15 @@ package org.springframework.jca.endpoint; import java.lang.reflect.Method; -import javax.resource.ResourceException; -import javax.resource.spi.ApplicationServerInternalException; -import javax.resource.spi.UnavailableException; -import javax.resource.spi.endpoint.MessageEndpoint; -import javax.resource.spi.endpoint.MessageEndpointFactory; -import javax.transaction.Transaction; -import javax.transaction.TransactionManager; import javax.transaction.xa.XAResource; +import jakarta.resource.ResourceException; +import jakarta.resource.spi.ApplicationServerInternalException; +import jakarta.resource.spi.UnavailableException; +import jakarta.resource.spi.endpoint.MessageEndpoint; +import jakarta.resource.spi.endpoint.MessageEndpointFactory; +import jakarta.transaction.Transaction; +import jakarta.transaction.TransactionManager; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -38,7 +38,7 @@ import org.springframework.util.Assert; /** * Abstract base implementation of the JCA 1.7 - * {@link javax.resource.spi.endpoint.MessageEndpointFactory} interface, + * {@link jakarta.resource.spi.endpoint.MessageEndpointFactory} interface, * providing transaction management capabilities as well as ClassLoader * exposure for endpoint invocations. * @@ -68,7 +68,7 @@ public abstract class AbstractMessageEndpointFactory implements MessageEndpointF * invocations, enlisting the endpoint resource in each such transaction. *

    The passed-in object may be a transaction manager which implements * Spring's {@link org.springframework.transaction.jta.TransactionFactory} - * interface, or a plain {@link javax.transaction.TransactionManager}. + * interface, or a plain {@link jakarta.transaction.TransactionManager}. *

    If no transaction manager is specified, the endpoint invocation * will simply not be wrapped in an XA transaction. Check out your * resource provider's ActivationSpec documentation for local @@ -86,7 +86,7 @@ public abstract class AbstractMessageEndpointFactory implements MessageEndpointF else { throw new IllegalArgumentException("Transaction manager [" + transactionManager + "] is neither a [org.springframework.transaction.jta.TransactionFactory} nor a " + - "[javax.transaction.TransactionManager]"); + "[jakarta.transaction.TransactionManager]"); } } diff --git a/spring-tx/src/main/java/org/springframework/jca/endpoint/GenericMessageEndpointFactory.java b/spring-tx/src/main/java/org/springframework/jca/endpoint/GenericMessageEndpointFactory.java index 15cb289dce3..996f366ee6c 100644 --- a/spring-tx/src/main/java/org/springframework/jca/endpoint/GenericMessageEndpointFactory.java +++ b/spring-tx/src/main/java/org/springframework/jca/endpoint/GenericMessageEndpointFactory.java @@ -16,11 +16,11 @@ package org.springframework.jca.endpoint; -import javax.resource.ResourceException; -import javax.resource.spi.UnavailableException; -import javax.resource.spi.endpoint.MessageEndpoint; import javax.transaction.xa.XAResource; +import jakarta.resource.ResourceException; +import jakarta.resource.spi.UnavailableException; +import jakarta.resource.spi.endpoint.MessageEndpoint; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; @@ -32,10 +32,10 @@ import org.springframework.util.ReflectionUtils; /** * Generic implementation of the JCA 1.7 - * {@link javax.resource.spi.endpoint.MessageEndpointFactory} interface, + * {@link jakarta.resource.spi.endpoint.MessageEndpointFactory} interface, * providing transaction management capabilities for any kind of message - * listener object (e.g. {@link javax.jms.MessageListener} objects or - * {@link javax.resource.cci.MessageListener} objects. + * listener object (e.g. {@link jakarta.jms.MessageListener} objects or + * {@link jakarta.resource.cci.MessageListener} objects. * *

    Uses AOP proxies for concrete endpoint instances, simply wrapping * the specified message listener object and exposing all of its implemented @@ -44,7 +44,7 @@ import org.springframework.util.ReflectionUtils; *

    Typically used with Spring's {@link GenericMessageEndpointManager}, * but not tied to it. As a consequence, this endpoint factory could * also be used with programmatic endpoint management on a native - * {@link javax.resource.spi.ResourceAdapter} instance. + * {@link jakarta.resource.spi.ResourceAdapter} instance. * * @author Juergen Hoeller * @since 2.5 @@ -60,8 +60,8 @@ public class GenericMessageEndpointFactory extends AbstractMessageEndpointFactor /** * Specify the message listener object that the endpoint should expose - * (e.g. a {@link javax.jms.MessageListener} objects or - * {@link javax.resource.cci.MessageListener} implementation). + * (e.g. a {@link jakarta.jms.MessageListener} objects or + * {@link jakarta.resource.cci.MessageListener} implementation). */ public void setMessageListener(Object messageListener) { this.messageListener = messageListener; diff --git a/spring-tx/src/main/java/org/springframework/jca/endpoint/GenericMessageEndpointManager.java b/spring-tx/src/main/java/org/springframework/jca/endpoint/GenericMessageEndpointManager.java index f97dcc9bc90..090c2a20a52 100644 --- a/spring-tx/src/main/java/org/springframework/jca/endpoint/GenericMessageEndpointManager.java +++ b/spring-tx/src/main/java/org/springframework/jca/endpoint/GenericMessageEndpointManager.java @@ -16,10 +16,10 @@ package org.springframework.jca.endpoint; -import javax.resource.ResourceException; -import javax.resource.spi.ActivationSpec; -import javax.resource.spi.ResourceAdapter; -import javax.resource.spi.endpoint.MessageEndpointFactory; +import jakarta.resource.ResourceException; +import jakarta.resource.spi.ActivationSpec; +import jakarta.resource.spi.ResourceAdapter; +import jakarta.resource.spi.endpoint.MessageEndpointFactory; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; @@ -48,7 +48,7 @@ import org.springframework.util.Assert; * <property name="activationSpec"> * <bean class="org.apache.activemq.ra.ActiveMQActivationSpec"> * <property name="destination" value="myQueue"/> - * <property name="destinationType" value="javax.jms.Queue"/> + * <property name="destinationType" value="jakarta.jms.Queue"/> * </bean> * </property> * </bean> @@ -56,7 +56,7 @@ import org.springframework.util.Assert; * In this example, Spring's own {@link GenericMessageEndpointFactory} is used * to point to a standard message listener object that happens to be supported * by the specified target ResourceAdapter: in this case, a JMS - * {@link javax.jms.MessageListener} object as supported by the ActiveMQ + * {@link jakarta.jms.MessageListener} object as supported by the ActiveMQ * message broker, defined as a Spring bean: * *

    @@ -84,7 +84,7 @@ import org.springframework.util.Assert;
      * For a different target resource, the configuration would simply point to a
      * different ResourceAdapter and a different ActivationSpec object (which are
      * both specific to the resource provider), and possibly a different message
    - * listener (e.g. a CCI {@link javax.resource.cci.MessageListener} for a
    + * listener (e.g. a CCI {@link jakarta.resource.cci.MessageListener} for a
      * resource adapter which is based on the JCA Common Client Interface).
      *
      * 

    The asynchronous execution strategy can be customized through the @@ -97,7 +97,7 @@ import org.springframework.util.Assert; * as built by the specified MessageEndpointFactory. {@link GenericMessageEndpointFactory} * supports XA transaction participation through its "transactionManager" property, * typically with a Spring {@link org.springframework.transaction.jta.JtaTransactionManager} - * or a plain {@link javax.transaction.TransactionManager} implementation specified there. + * or a plain {@link jakarta.transaction.TransactionManager} implementation specified there. * *

      * <bean class="org.springframework.jca.endpoint.GenericMessageEndpointManager">
    @@ -111,7 +111,7 @@ import org.springframework.util.Assert;
      * 	 <property name="activationSpec">
      *     <bean class="org.apache.activemq.ra.ActiveMQActivationSpec">
      *       <property name="destination" value="myQueue"/>
    - *       <property name="destinationType" value="javax.jms.Queue"/>
    + *       <property name="destinationType" value="jakarta.jms.Queue"/>
      *     </bean>
      *   </property>
      * </bean>
    @@ -133,7 +133,7 @@ import org.springframework.util.Assert;
      * 	 <property name="activationSpec">
      *     <bean class="org.apache.activemq.ra.ActiveMQActivationSpec">
      *       <property name="destination" value="myQueue"/>
    - *       <property name="destinationType" value="javax.jms.Queue"/>
    + *       <property name="destinationType" value="jakarta.jms.Queue"/>
      *       <property name="useRAManagedTransaction" value="true"/>
      *     </bean>
      *   </property>
    @@ -141,10 +141,10 @@ import org.springframework.util.Assert;
      *
      * @author Juergen Hoeller
      * @since 2.5
    - * @see javax.resource.spi.ResourceAdapter#endpointActivation
    - * @see javax.resource.spi.ResourceAdapter#endpointDeactivation
    - * @see javax.resource.spi.endpoint.MessageEndpointFactory
    - * @see javax.resource.spi.ActivationSpec
    + * @see jakarta.resource.spi.ResourceAdapter#endpointActivation
    + * @see jakarta.resource.spi.ResourceAdapter#endpointDeactivation
    + * @see jakarta.resource.spi.endpoint.MessageEndpointFactory
    + * @see jakarta.resource.spi.ActivationSpec
      */
     public class GenericMessageEndpointManager implements SmartLifecycle, InitializingBean, DisposableBean {
     
    diff --git a/spring-tx/src/main/java/org/springframework/jca/support/LocalConnectionFactoryBean.java b/spring-tx/src/main/java/org/springframework/jca/support/LocalConnectionFactoryBean.java
    index fd7d1bd0541..fe49bafdf5e 100644
    --- a/spring-tx/src/main/java/org/springframework/jca/support/LocalConnectionFactoryBean.java
    +++ b/spring-tx/src/main/java/org/springframework/jca/support/LocalConnectionFactoryBean.java
    @@ -16,9 +16,9 @@
     
     package org.springframework.jca.support;
     
    -import javax.resource.ResourceException;
    -import javax.resource.spi.ConnectionManager;
    -import javax.resource.spi.ManagedConnectionFactory;
    +import jakarta.resource.ResourceException;
    +import jakarta.resource.spi.ConnectionManager;
    +import jakarta.resource.spi.ManagedConnectionFactory;
     
     import org.springframework.beans.factory.FactoryBean;
     import org.springframework.beans.factory.InitializingBean;
    @@ -29,13 +29,13 @@ import org.springframework.lang.Nullable;
      * a local JCA connection factory in "non-managed" mode (as defined by the
      * Java Connector Architecture specification). This is a direct alternative
      * to a {@link org.springframework.jndi.JndiObjectFactoryBean} definition that
    - * obtains a connection factory handle from a Java EE server's naming environment.
    + * obtains a connection factory handle from a Jakarta EE server's naming environment.
      *
      * 

    The type of the connection factory is dependent on the actual connector: * the connector can either expose its native API (such as a JDBC - * {@link javax.sql.DataSource} or a JMS {@link javax.jms.ConnectionFactory}) + * {@link javax.sql.DataSource} or a JMS {@link jakarta.jms.ConnectionFactory}) * or follow the standard Common Client Interface (CCI), as defined by the JCA spec. - * The exposed interface in the CCI case is {@link javax.resource.cci.ConnectionFactory}. + * The exposed interface in the CCI case is {@link jakarta.resource.cci.ConnectionFactory}. * *

    In order to use this FactoryBean, you must specify the connector's * {@link #setManagedConnectionFactory "managedConnectionFactory"} (usually @@ -46,7 +46,7 @@ import org.springframework.lang.Nullable; * *

    NOTE: In non-managed mode, a connector is not deployed on an * application server, or more specifically not interacting with an application - * server. Consequently, it cannot use a Java EE server's system contracts: + * server. Consequently, it cannot use a Jakarta EE server's system contracts: * connection management, transaction management, and security management. * A custom ConnectionManager implementation has to be used for applying those * services in conjunction with a standalone transaction coordinator etc. @@ -65,8 +65,8 @@ import org.springframework.lang.Nullable; * @since 1.2 * @see #setManagedConnectionFactory * @see #setConnectionManager - * @see javax.resource.cci.ConnectionFactory - * @see javax.resource.cci.Connection#getLocalTransaction + * @see jakarta.resource.cci.ConnectionFactory + * @see jakarta.resource.cci.Connection#getLocalTransaction * @see org.springframework.jca.cci.connection.CciLocalTransactionManager */ public class LocalConnectionFactoryBean implements FactoryBean, InitializingBean { @@ -91,11 +91,11 @@ public class LocalConnectionFactoryBean implements FactoryBean, Initiali * EntityManagerFactory. *

    Note that the ManagerConnectionFactory implementation might expect * a reference to its JCA 1.7 ResourceAdapter, expressed through the - * {@link javax.resource.spi.ResourceAdapterAssociation} interface. + * {@link jakarta.resource.spi.ResourceAdapterAssociation} interface. * Simply inject the corresponding ResourceAdapter instance into its * "resourceAdapter" bean property in this case, before passing the * ManagerConnectionFactory into this LocalConnectionFactoryBean. - * @see javax.resource.spi.ManagedConnectionFactory#createConnectionFactory() + * @see jakarta.resource.spi.ManagedConnectionFactory#createConnectionFactory() */ public void setManagedConnectionFactory(ManagedConnectionFactory managedConnectionFactory) { this.managedConnectionFactory = managedConnectionFactory; @@ -107,7 +107,7 @@ public class LocalConnectionFactoryBean implements FactoryBean, Initiali *

    A ConnectionManager implementation for local usage is often * included with a JCA connector. Such an included ConnectionManager * might be set as default, with no need to explicitly specify one. - * @see javax.resource.spi.ManagedConnectionFactory#createConnectionFactory(javax.resource.spi.ConnectionManager) + * @see jakarta.resource.spi.ManagedConnectionFactory#createConnectionFactory(jakarta.resource.spi.ConnectionManager) */ public void setConnectionManager(ConnectionManager connectionManager) { this.connectionManager = connectionManager; diff --git a/spring-tx/src/main/java/org/springframework/jca/support/ResourceAdapterFactoryBean.java b/spring-tx/src/main/java/org/springframework/jca/support/ResourceAdapterFactoryBean.java index 7904e0bc614..9969c97d571 100644 --- a/spring-tx/src/main/java/org/springframework/jca/support/ResourceAdapterFactoryBean.java +++ b/spring-tx/src/main/java/org/springframework/jca/support/ResourceAdapterFactoryBean.java @@ -16,11 +16,11 @@ package org.springframework.jca.support; -import javax.resource.ResourceException; -import javax.resource.spi.BootstrapContext; -import javax.resource.spi.ResourceAdapter; -import javax.resource.spi.XATerminator; -import javax.resource.spi.work.WorkManager; +import jakarta.resource.ResourceException; +import jakarta.resource.spi.BootstrapContext; +import jakarta.resource.spi.ResourceAdapter; +import jakarta.resource.spi.XATerminator; +import jakarta.resource.spi.work.WorkManager; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.DisposableBean; @@ -30,8 +30,8 @@ import org.springframework.lang.Nullable; /** * {@link org.springframework.beans.factory.FactoryBean} that bootstraps - * the specified JCA 1.7 {@link javax.resource.spi.ResourceAdapter}, - * starting it with a local {@link javax.resource.spi.BootstrapContext} + * the specified JCA 1.7 {@link jakarta.resource.spi.ResourceAdapter}, + * starting it with a local {@link jakarta.resource.spi.BootstrapContext} * and exposing it for bean references. It will also stop the ResourceAdapter * on context shutdown. This corresponds to 'non-managed' bootstrap in a * local environment, according to the JCA 1.7 specification. @@ -45,8 +45,8 @@ import org.springframework.lang.Nullable; * @see #setResourceAdapter * @see #setBootstrapContext * @see #setWorkManager - * @see javax.resource.spi.ResourceAdapter#start(javax.resource.spi.BootstrapContext) - * @see javax.resource.spi.ResourceAdapter#stop() + * @see jakarta.resource.spi.ResourceAdapter#start(jakarta.resource.spi.BootstrapContext) + * @see jakarta.resource.spi.ResourceAdapter#stop() */ public class ResourceAdapterFactoryBean implements FactoryBean, InitializingBean, DisposableBean { @@ -114,7 +114,7 @@ public class ResourceAdapterFactoryBean implements FactoryBean, /** * Builds the BootstrapContext and starts the ResourceAdapter with it. - * @see javax.resource.spi.ResourceAdapter#start(javax.resource.spi.BootstrapContext) + * @see jakarta.resource.spi.ResourceAdapter#start(jakarta.resource.spi.BootstrapContext) */ @Override public void afterPropertiesSet() throws ResourceException { @@ -147,7 +147,7 @@ public class ResourceAdapterFactoryBean implements FactoryBean, /** * Stops the ResourceAdapter. - * @see javax.resource.spi.ResourceAdapter#stop() + * @see jakarta.resource.spi.ResourceAdapter#stop() */ @Override public void destroy() { diff --git a/spring-tx/src/main/java/org/springframework/jca/support/SimpleBootstrapContext.java b/spring-tx/src/main/java/org/springframework/jca/support/SimpleBootstrapContext.java index 8ca15b9d901..c607a6f2660 100644 --- a/spring-tx/src/main/java/org/springframework/jca/support/SimpleBootstrapContext.java +++ b/spring-tx/src/main/java/org/springframework/jca/support/SimpleBootstrapContext.java @@ -18,18 +18,18 @@ package org.springframework.jca.support; import java.util.Timer; -import javax.resource.spi.BootstrapContext; -import javax.resource.spi.UnavailableException; -import javax.resource.spi.XATerminator; -import javax.resource.spi.work.WorkContext; -import javax.resource.spi.work.WorkManager; -import javax.transaction.TransactionSynchronizationRegistry; +import jakarta.resource.spi.BootstrapContext; +import jakarta.resource.spi.UnavailableException; +import jakarta.resource.spi.XATerminator; +import jakarta.resource.spi.work.WorkContext; +import jakarta.resource.spi.work.WorkManager; +import jakarta.transaction.TransactionSynchronizationRegistry; import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** - * Simple implementation of the JCA 1.7 {@link javax.resource.spi.BootstrapContext} + * Simple implementation of the JCA 1.7 {@link jakarta.resource.spi.BootstrapContext} * interface, used for bootstrapping a JCA ResourceAdapter in a local environment. * *

    Delegates to the given WorkManager and XATerminator, if any. Creates simple @@ -37,7 +37,7 @@ import org.springframework.util.Assert; * * @author Juergen Hoeller * @since 2.0.3 - * @see javax.resource.spi.ResourceAdapter#start(javax.resource.spi.BootstrapContext) + * @see jakarta.resource.spi.ResourceAdapter#start(jakarta.resource.spi.BootstrapContext) * @see ResourceAdapterFactoryBean */ public class SimpleBootstrapContext implements BootstrapContext { diff --git a/spring-tx/src/main/java/org/springframework/jca/work/DelegatingWork.java b/spring-tx/src/main/java/org/springframework/jca/work/DelegatingWork.java deleted file mode 100644 index da52a853650..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/work/DelegatingWork.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.work; - -import javax.resource.spi.work.Work; - -import org.springframework.util.Assert; - -/** - * Simple Work adapter that delegates to a given Runnable. - * - * @author Juergen Hoeller - * @since 2.0.3 - * @see javax.resource.spi.work.Work - * @see Runnable - */ -public class DelegatingWork implements Work { - - private final Runnable delegate; - - - /** - * Create a new DelegatingWork. - * @param delegate the Runnable implementation to delegate to - */ - public DelegatingWork(Runnable delegate) { - Assert.notNull(delegate, "Delegate must not be null"); - this.delegate = delegate; - } - - /** - * Return the wrapped Runnable implementation. - */ - public final Runnable getDelegate() { - return this.delegate; - } - - - /** - * Delegates execution to the underlying Runnable. - */ - @Override - public void run() { - this.delegate.run(); - } - - /** - * This implementation is empty, since we expect the Runnable - * to terminate based on some specific shutdown signal. - */ - @Override - public void release() { - } - -} diff --git a/spring-tx/src/main/java/org/springframework/jca/work/SimpleTaskWorkManager.java b/spring-tx/src/main/java/org/springframework/jca/work/SimpleTaskWorkManager.java deleted file mode 100644 index 90b8214df34..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/work/SimpleTaskWorkManager.java +++ /dev/null @@ -1,257 +0,0 @@ -/* - * Copyright 2002-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.work; - -import javax.resource.spi.work.ExecutionContext; -import javax.resource.spi.work.Work; -import javax.resource.spi.work.WorkAdapter; -import javax.resource.spi.work.WorkCompletedException; -import javax.resource.spi.work.WorkEvent; -import javax.resource.spi.work.WorkException; -import javax.resource.spi.work.WorkListener; -import javax.resource.spi.work.WorkManager; -import javax.resource.spi.work.WorkRejectedException; - -import org.springframework.core.task.AsyncTaskExecutor; -import org.springframework.core.task.SimpleAsyncTaskExecutor; -import org.springframework.core.task.SyncTaskExecutor; -import org.springframework.core.task.TaskExecutor; -import org.springframework.core.task.TaskRejectedException; -import org.springframework.core.task.TaskTimeoutException; -import org.springframework.lang.Nullable; -import org.springframework.util.Assert; - -/** - * Simple JCA 1.7 {@link javax.resource.spi.work.WorkManager} implementation that - * delegates to a Spring {@link org.springframework.core.task.TaskExecutor}. - * Provides simple task execution including start timeouts, but without support - * for a JCA ExecutionContext (i.e. without support for imported transactions). - * - *

    Uses a {@link org.springframework.core.task.SyncTaskExecutor} for {@link #doWork} - * calls and a {@link org.springframework.core.task.SimpleAsyncTaskExecutor} - * for {@link #startWork} and {@link #scheduleWork} calls, by default. - * These default task executors can be overridden through configuration. - * - *

    NOTE: This WorkManager does not provide thread pooling by default! - * Specify a {@link org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor} - * (or any other thread-pooling TaskExecutor) as "asyncTaskExecutor" in order to - * achieve actual thread pooling. - * - *

    This WorkManager automatically detects a specified - * {@link org.springframework.core.task.AsyncTaskExecutor} implementation - * and uses its extended timeout functionality where appropriate. - * JCA WorkListeners are fully supported in any case. - * - * @author Juergen Hoeller - * @since 2.0.3 - * @see #setSyncTaskExecutor - * @see #setAsyncTaskExecutor - */ -public class SimpleTaskWorkManager implements WorkManager { - - @Nullable - private TaskExecutor syncTaskExecutor = new SyncTaskExecutor(); - - @Nullable - private AsyncTaskExecutor asyncTaskExecutor = new SimpleAsyncTaskExecutor(); - - - /** - * Specify the TaskExecutor to use for synchronous work execution - * (i.e. {@link #doWork} calls). - *

    Default is a {@link org.springframework.core.task.SyncTaskExecutor}. - */ - public void setSyncTaskExecutor(TaskExecutor syncTaskExecutor) { - this.syncTaskExecutor = syncTaskExecutor; - } - - /** - * Specify the TaskExecutor to use for asynchronous work execution - * (i.e. {@link #startWork} and {@link #scheduleWork} calls). - *

    This will typically (but not necessarily) be an - * {@link org.springframework.core.task.AsyncTaskExecutor} implementation. - * Default is a {@link org.springframework.core.task.SimpleAsyncTaskExecutor}. - */ - public void setAsyncTaskExecutor(AsyncTaskExecutor asyncTaskExecutor) { - this.asyncTaskExecutor = asyncTaskExecutor; - } - - - @Override - public void doWork(Work work) throws WorkException { - doWork(work, WorkManager.INDEFINITE, null, null); - } - - @Override - public void doWork(Work work, long startTimeout, @Nullable ExecutionContext executionContext, @Nullable WorkListener workListener) - throws WorkException { - - Assert.state(this.syncTaskExecutor != null, "No 'syncTaskExecutor' set"); - executeWork(this.syncTaskExecutor, work, startTimeout, false, executionContext, workListener); - } - - @Override - public long startWork(Work work) throws WorkException { - return startWork(work, WorkManager.INDEFINITE, null, null); - } - - @Override - public long startWork(Work work, long startTimeout, @Nullable ExecutionContext executionContext, @Nullable WorkListener workListener) - throws WorkException { - - Assert.state(this.asyncTaskExecutor != null, "No 'asyncTaskExecutor' set"); - return executeWork(this.asyncTaskExecutor, work, startTimeout, true, executionContext, workListener); - } - - @Override - public void scheduleWork(Work work) throws WorkException { - scheduleWork(work, WorkManager.INDEFINITE, null, null); - } - - @Override - public void scheduleWork(Work work, long startTimeout, @Nullable ExecutionContext executionContext, @Nullable WorkListener workListener) - throws WorkException { - - Assert.state(this.asyncTaskExecutor != null, "No 'asyncTaskExecutor' set"); - executeWork(this.asyncTaskExecutor, work, startTimeout, false, executionContext, workListener); - } - - - /** - * Execute the given Work on the specified TaskExecutor. - * @param taskExecutor the TaskExecutor to use - * @param work the Work to execute - * @param startTimeout the time duration within which the Work is supposed to start - * @param blockUntilStarted whether to block until the Work has started - * @param executionContext the JCA ExecutionContext for the given Work - * @param workListener the WorkListener to clal for the given Work - * @return the time elapsed from Work acceptance until start of execution - * (or -1 if not applicable or not known) - * @throws WorkException if the TaskExecutor did not accept the Work - */ - protected long executeWork(TaskExecutor taskExecutor, Work work, long startTimeout, boolean blockUntilStarted, - @Nullable ExecutionContext executionContext, @Nullable WorkListener workListener) throws WorkException { - - if (executionContext != null && executionContext.getXid() != null) { - throw new WorkException("SimpleTaskWorkManager does not supported imported XIDs: " + executionContext.getXid()); - } - WorkListener workListenerToUse = workListener; - if (workListenerToUse == null) { - workListenerToUse = new WorkAdapter(); - } - - boolean isAsync = (taskExecutor instanceof AsyncTaskExecutor); - DelegatingWorkAdapter workHandle = new DelegatingWorkAdapter(work, workListenerToUse, !isAsync); - try { - if (isAsync) { - ((AsyncTaskExecutor) taskExecutor).execute(workHandle, startTimeout); - } - else { - taskExecutor.execute(workHandle); - } - } - catch (TaskTimeoutException ex) { - WorkException wex = new WorkRejectedException("TaskExecutor rejected Work because of timeout: " + work, ex); - wex.setErrorCode(WorkException.START_TIMED_OUT); - workListenerToUse.workRejected(new WorkEvent(this, WorkEvent.WORK_REJECTED, work, wex)); - throw wex; - } - catch (TaskRejectedException ex) { - WorkException wex = new WorkRejectedException("TaskExecutor rejected Work: " + work, ex); - wex.setErrorCode(WorkException.INTERNAL); - workListenerToUse.workRejected(new WorkEvent(this, WorkEvent.WORK_REJECTED, work, wex)); - throw wex; - } - catch (Throwable ex) { - WorkException wex = new WorkException("TaskExecutor failed to execute Work: " + work, ex); - wex.setErrorCode(WorkException.INTERNAL); - throw wex; - } - if (isAsync) { - workListenerToUse.workAccepted(new WorkEvent(this, WorkEvent.WORK_ACCEPTED, work, null)); - } - - if (blockUntilStarted) { - long acceptanceTime = System.currentTimeMillis(); - synchronized (workHandle.monitor) { - try { - while (!workHandle.started) { - workHandle.monitor.wait(); - } - } - catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - } - } - return (System.currentTimeMillis() - acceptanceTime); - } - else { - return WorkManager.UNKNOWN; - } - } - - - /** - * Work adapter that supports start timeouts and WorkListener callbacks - * for a given Work that it delegates to. - */ - private static class DelegatingWorkAdapter implements Work { - - private final Work work; - - private final WorkListener workListener; - - private final boolean acceptOnExecution; - - public final Object monitor = new Object(); - - public boolean started = false; - - public DelegatingWorkAdapter(Work work, WorkListener workListener, boolean acceptOnExecution) { - this.work = work; - this.workListener = workListener; - this.acceptOnExecution = acceptOnExecution; - } - - @Override - public void run() { - if (this.acceptOnExecution) { - this.workListener.workAccepted(new WorkEvent(this, WorkEvent.WORK_ACCEPTED, this.work, null)); - } - synchronized (this.monitor) { - this.started = true; - this.monitor.notify(); - } - this.workListener.workStarted(new WorkEvent(this, WorkEvent.WORK_STARTED, this.work, null)); - try { - this.work.run(); - } - catch (RuntimeException | Error ex) { - this.workListener.workCompleted( - new WorkEvent(this, WorkEvent.WORK_COMPLETED, this.work, new WorkCompletedException(ex))); - throw ex; - } - this.workListener.workCompleted(new WorkEvent(this, WorkEvent.WORK_COMPLETED, this.work, null)); - } - - @Override - public void release() { - this.work.release(); - } - } - -} diff --git a/spring-tx/src/main/java/org/springframework/jca/work/WorkManagerTaskExecutor.java b/spring-tx/src/main/java/org/springframework/jca/work/WorkManagerTaskExecutor.java deleted file mode 100644 index e4fe06bfeb3..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/work/WorkManagerTaskExecutor.java +++ /dev/null @@ -1,337 +0,0 @@ -/* - * Copyright 2002-2020 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.work; - -import java.util.concurrent.Callable; -import java.util.concurrent.Future; -import java.util.concurrent.FutureTask; - -import javax.naming.NamingException; -import javax.resource.spi.BootstrapContext; -import javax.resource.spi.work.ExecutionContext; -import javax.resource.spi.work.Work; -import javax.resource.spi.work.WorkException; -import javax.resource.spi.work.WorkListener; -import javax.resource.spi.work.WorkManager; -import javax.resource.spi.work.WorkRejectedException; - -import org.springframework.beans.factory.InitializingBean; -import org.springframework.core.task.AsyncListenableTaskExecutor; -import org.springframework.core.task.TaskDecorator; -import org.springframework.core.task.TaskRejectedException; -import org.springframework.core.task.TaskTimeoutException; -import org.springframework.jca.context.BootstrapContextAware; -import org.springframework.jndi.JndiLocatorSupport; -import org.springframework.lang.Nullable; -import org.springframework.scheduling.SchedulingException; -import org.springframework.scheduling.SchedulingTaskExecutor; -import org.springframework.util.Assert; -import org.springframework.util.concurrent.ListenableFuture; -import org.springframework.util.concurrent.ListenableFutureTask; - -/** - * {@link org.springframework.core.task.TaskExecutor} implementation - * that delegates to a JCA 1.7 WorkManager, implementing the - * {@link javax.resource.spi.work.WorkManager} interface. - * - *

    This is mainly intended for use within a JCA ResourceAdapter implementation, - * but may also be used in a standalone environment, delegating to a locally - * embedded WorkManager implementation (such as Geronimo's). - * - *

    Also implements the JCA 1.7 WorkManager interface itself, delegating all - * calls to the target WorkManager. Hence, a caller can choose whether it wants - * to talk to this executor through the Spring TaskExecutor interface or the - * WorkManager interface. - * - *

    This adapter is also capable of obtaining a JCA WorkManager from JNDI. - * This is for example appropriate on the Geronimo application server, where - * WorkManager GBeans (e.g. Geronimo's default "DefaultWorkManager" GBean) - * can be linked into the Java EE environment through "gbean-ref" entries - * in the {@code geronimo-web.xml} deployment descriptor. - * - * @author Juergen Hoeller - * @since 2.0.3 - * @see #setWorkManager - * @see javax.resource.spi.work.WorkManager#scheduleWork - */ -public class WorkManagerTaskExecutor extends JndiLocatorSupport - implements AsyncListenableTaskExecutor, SchedulingTaskExecutor, WorkManager, BootstrapContextAware, InitializingBean { - - @Nullable - private WorkManager workManager; - - @Nullable - private String workManagerName; - - private boolean blockUntilStarted = false; - - private boolean blockUntilCompleted = false; - - @Nullable - private WorkListener workListener; - - @Nullable - private TaskDecorator taskDecorator; - - - /** - * Create a new WorkManagerTaskExecutor, expecting bean-style configuration. - * @see #setWorkManager - */ - public WorkManagerTaskExecutor() { - } - - /** - * Create a new WorkManagerTaskExecutor for the given WorkManager. - * @param workManager the JCA WorkManager to delegate to - */ - public WorkManagerTaskExecutor(WorkManager workManager) { - setWorkManager(workManager); - } - - - /** - * Specify the JCA WorkManager instance to delegate to. - */ - public void setWorkManager(WorkManager workManager) { - Assert.notNull(workManager, "WorkManager must not be null"); - this.workManager = workManager; - } - - /** - * Set the JNDI name of the JCA WorkManager. - *

    This can either be a fully qualified JNDI name, - * or the JNDI name relative to the current environment - * naming context if "resourceRef" is set to "true". - * @see #setWorkManager - * @see #setResourceRef - */ - public void setWorkManagerName(String workManagerName) { - this.workManagerName = workManagerName; - } - - /** - * Specify the JCA BootstrapContext that contains the - * WorkManager to delegate to. - */ - @Override - public void setBootstrapContext(BootstrapContext bootstrapContext) { - Assert.notNull(bootstrapContext, "BootstrapContext must not be null"); - this.workManager = bootstrapContext.getWorkManager(); - } - - /** - * Set whether to let {@link #execute} block until the work - * has been actually started. - *

    Uses the JCA {@code startWork} operation underneath, - * instead of the default {@code scheduleWork}. - * @see javax.resource.spi.work.WorkManager#startWork - * @see javax.resource.spi.work.WorkManager#scheduleWork - */ - public void setBlockUntilStarted(boolean blockUntilStarted) { - this.blockUntilStarted = blockUntilStarted; - } - - /** - * Set whether to let {@link #execute} block until the work - * has been completed. - *

    Uses the JCA {@code doWork} operation underneath, - * instead of the default {@code scheduleWork}. - * @see javax.resource.spi.work.WorkManager#doWork - * @see javax.resource.spi.work.WorkManager#scheduleWork - */ - public void setBlockUntilCompleted(boolean blockUntilCompleted) { - this.blockUntilCompleted = blockUntilCompleted; - } - - /** - * Specify a JCA WorkListener to apply, if any. - *

    This shared WorkListener instance will be passed on to the - * WorkManager by all {@link #execute} calls on this TaskExecutor. - */ - public void setWorkListener(@Nullable WorkListener workListener) { - this.workListener = workListener; - } - - /** - * Specify a custom {@link TaskDecorator} to be applied to any {@link Runnable} - * about to be executed. - *

    Note that such a decorator is not necessarily being applied to the - * user-supplied {@code Runnable}/{@code Callable} but rather to the actual - * execution callback (which may be a wrapper around the user-supplied task). - *

    The primary use case is to set some execution context around the task's - * invocation, or to provide some monitoring/statistics for task execution. - *

    NOTE: Exception handling in {@code TaskDecorator} implementations - * is limited to plain {@code Runnable} execution via {@code execute} calls. - * In case of {@code #submit} calls, the exposed {@code Runnable} will be a - * {@code FutureTask} which does not propagate any exceptions; you might - * have to cast it and call {@code Future#get} to evaluate exceptions. - * @since 4.3 - */ - public void setTaskDecorator(TaskDecorator taskDecorator) { - this.taskDecorator = taskDecorator; - } - - @Override - public void afterPropertiesSet() throws NamingException { - if (this.workManager == null) { - if (this.workManagerName != null) { - this.workManager = lookup(this.workManagerName, WorkManager.class); - } - else { - this.workManager = getDefaultWorkManager(); - } - } - } - - /** - * Obtain a default WorkManager to delegate to. - * Called if no explicit WorkManager or WorkManager JNDI name has been specified. - *

    The default implementation returns a {@link SimpleTaskWorkManager}. - * Can be overridden in subclasses. - */ - protected WorkManager getDefaultWorkManager() { - return new SimpleTaskWorkManager(); - } - - private WorkManager obtainWorkManager() { - Assert.state(this.workManager != null, "No WorkManager specified"); - return this.workManager; - } - - - //------------------------------------------------------------------------- - // Implementation of the Spring SchedulingTaskExecutor interface - //------------------------------------------------------------------------- - - @Override - public void execute(Runnable task) { - execute(task, TIMEOUT_INDEFINITE); - } - - @Override - public void execute(Runnable task, long startTimeout) { - Work work = new DelegatingWork(this.taskDecorator != null ? this.taskDecorator.decorate(task) : task); - try { - if (this.blockUntilCompleted) { - if (startTimeout != TIMEOUT_INDEFINITE || this.workListener != null) { - obtainWorkManager().doWork(work, startTimeout, null, this.workListener); - } - else { - obtainWorkManager().doWork(work); - } - } - else if (this.blockUntilStarted) { - if (startTimeout != TIMEOUT_INDEFINITE || this.workListener != null) { - obtainWorkManager().startWork(work, startTimeout, null, this.workListener); - } - else { - obtainWorkManager().startWork(work); - } - } - else { - if (startTimeout != TIMEOUT_INDEFINITE || this.workListener != null) { - obtainWorkManager().scheduleWork(work, startTimeout, null, this.workListener); - } - else { - obtainWorkManager().scheduleWork(work); - } - } - } - catch (WorkRejectedException ex) { - if (WorkException.START_TIMED_OUT.equals(ex.getErrorCode())) { - throw new TaskTimeoutException("JCA WorkManager rejected task because of timeout: " + task, ex); - } - else { - throw new TaskRejectedException("JCA WorkManager rejected task: " + task, ex); - } - } - catch (WorkException ex) { - throw new SchedulingException("Could not schedule task on JCA WorkManager", ex); - } - } - - @Override - public Future submit(Runnable task) { - FutureTask future = new FutureTask<>(task, null); - execute(future, TIMEOUT_INDEFINITE); - return future; - } - - @Override - public Future submit(Callable task) { - FutureTask future = new FutureTask<>(task); - execute(future, TIMEOUT_INDEFINITE); - return future; - } - - @Override - public ListenableFuture submitListenable(Runnable task) { - ListenableFutureTask future = new ListenableFutureTask<>(task, null); - execute(future, TIMEOUT_INDEFINITE); - return future; - } - - @Override - public ListenableFuture submitListenable(Callable task) { - ListenableFutureTask future = new ListenableFutureTask<>(task); - execute(future, TIMEOUT_INDEFINITE); - return future; - } - - - //------------------------------------------------------------------------- - // Implementation of the JCA WorkManager interface - //------------------------------------------------------------------------- - - @Override - public void doWork(Work work) throws WorkException { - obtainWorkManager().doWork(work); - } - - @Override - public void doWork(Work work, long delay, ExecutionContext executionContext, WorkListener workListener) - throws WorkException { - - obtainWorkManager().doWork(work, delay, executionContext, workListener); - } - - @Override - public long startWork(Work work) throws WorkException { - return obtainWorkManager().startWork(work); - } - - @Override - public long startWork(Work work, long delay, ExecutionContext executionContext, WorkListener workListener) - throws WorkException { - - return obtainWorkManager().startWork(work, delay, executionContext, workListener); - } - - @Override - public void scheduleWork(Work work) throws WorkException { - obtainWorkManager().scheduleWork(work); - } - - @Override - public void scheduleWork(Work work, long delay, ExecutionContext executionContext, WorkListener workListener) - throws WorkException { - - obtainWorkManager().scheduleWork(work, delay, executionContext, workListener); - } - -} diff --git a/spring-tx/src/main/java/org/springframework/jca/work/package-info.java b/spring-tx/src/main/java/org/springframework/jca/work/package-info.java deleted file mode 100644 index a797e721507..00000000000 --- a/spring-tx/src/main/java/org/springframework/jca/work/package-info.java +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Convenience classes for scheduling based on the JCA WorkManager facility, - * as supported within ResourceAdapters. - */ -@NonNullApi -@NonNullFields -package org.springframework.jca.work; - -import org.springframework.lang.NonNullApi; -import org.springframework.lang.NonNullFields; diff --git a/spring-tx/src/main/java/org/springframework/transaction/TransactionDefinition.java b/spring-tx/src/main/java/org/springframework/transaction/TransactionDefinition.java index 1e2a44e8fe1..1aa8901f3f7 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/TransactionDefinition.java +++ b/spring-tx/src/main/java/org/springframework/transaction/TransactionDefinition.java @@ -86,8 +86,8 @@ public interface TransactionDefinition { *

    NOTE: Actual transaction suspension will not work out-of-the-box * on all transaction managers. This in particular applies to * {@link org.springframework.transaction.jta.JtaTransactionManager}, - * which requires the {@code javax.transaction.TransactionManager} to be - * made available it to it (which is server-specific in standard Java EE). + * which requires the {@code jakarta.transaction.TransactionManager} to be + * made available it to it (which is server-specific in standard Jakarta EE). *

    A {@code PROPAGATION_REQUIRES_NEW} scope always defines its own * transaction synchronizations. Existing synchronizations will be suspended * and resumed appropriately. @@ -101,8 +101,8 @@ public interface TransactionDefinition { *

    NOTE: Actual transaction suspension will not work out-of-the-box * on all transaction managers. This in particular applies to * {@link org.springframework.transaction.jta.JtaTransactionManager}, - * which requires the {@code javax.transaction.TransactionManager} to be - * made available it to it (which is server-specific in standard Java EE). + * which requires the {@code jakarta.transaction.TransactionManager} to be + * made available it to it (which is server-specific in standard Jakarta EE). *

    Note that transaction synchronization is not available within a * {@code PROPAGATION_NOT_SUPPORTED} scope. Existing synchronizations * will be suspended and resumed appropriately. diff --git a/spring-tx/src/main/java/org/springframework/transaction/annotation/AnnotationTransactionAttributeSource.java b/spring-tx/src/main/java/org/springframework/transaction/annotation/AnnotationTransactionAttributeSource.java index 4f8e46f6e96..13f16a20e93 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/annotation/AnnotationTransactionAttributeSource.java +++ b/spring-tx/src/main/java/org/springframework/transaction/annotation/AnnotationTransactionAttributeSource.java @@ -37,8 +37,8 @@ import org.springframework.util.ClassUtils; * *

    This class reads Spring's JDK 1.5+ {@link Transactional} annotation and * exposes corresponding transaction attributes to Spring's transaction infrastructure. - * Also supports JTA 1.2's {@link javax.transaction.Transactional} and EJB3's - * {@link javax.ejb.TransactionAttribute} annotation (if present). + * Also supports JTA 1.2's {@link jakarta.transaction.Transactional} and EJB3's + * {@link jakarta.ejb.TransactionAttribute} annotation (if present). * This class may also serve as base class for a custom TransactionAttributeSource, * or get customized through {@link TransactionAnnotationParser} strategies. * @@ -62,8 +62,8 @@ public class AnnotationTransactionAttributeSource extends AbstractFallbackTransa static { ClassLoader classLoader = AnnotationTransactionAttributeSource.class.getClassLoader(); - jta12Present = ClassUtils.isPresent("javax.transaction.Transactional", classLoader); - ejb3Present = ClassUtils.isPresent("javax.ejb.TransactionAttribute", classLoader); + jta12Present = ClassUtils.isPresent("jakarta.transaction.Transactional", classLoader); + ejb3Present = ClassUtils.isPresent("jakarta.ejb.TransactionAttribute", classLoader); } private final boolean publicMethodsOnly; @@ -74,7 +74,7 @@ public class AnnotationTransactionAttributeSource extends AbstractFallbackTransa /** * Create a default AnnotationTransactionAttributeSource, supporting * public methods that carry the {@code Transactional} annotation - * or the EJB3 {@link javax.ejb.TransactionAttribute} annotation. + * or the EJB3 {@link jakarta.ejb.TransactionAttribute} annotation. */ public AnnotationTransactionAttributeSource() { this(true); @@ -83,7 +83,7 @@ public class AnnotationTransactionAttributeSource extends AbstractFallbackTransa /** * Create a custom AnnotationTransactionAttributeSource, supporting * public methods that carry the {@code Transactional} annotation - * or the EJB3 {@link javax.ejb.TransactionAttribute} annotation. + * or the EJB3 {@link jakarta.ejb.TransactionAttribute} annotation. * @param publicMethodsOnly whether to support public methods that carry * the {@code Transactional} annotation only (typically for use * with proxy-based AOP), or protected/private methods as well diff --git a/spring-tx/src/main/java/org/springframework/transaction/annotation/Ejb3TransactionAnnotationParser.java b/spring-tx/src/main/java/org/springframework/transaction/annotation/Ejb3TransactionAnnotationParser.java index 8fd2db23d51..ae8e5d23742 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/annotation/Ejb3TransactionAnnotationParser.java +++ b/spring-tx/src/main/java/org/springframework/transaction/annotation/Ejb3TransactionAnnotationParser.java @@ -19,8 +19,8 @@ package org.springframework.transaction.annotation; import java.io.Serializable; import java.lang.reflect.AnnotatedElement; -import javax.ejb.ApplicationException; -import javax.ejb.TransactionAttributeType; +import jakarta.ejb.ApplicationException; +import jakarta.ejb.TransactionAttributeType; import org.springframework.core.annotation.AnnotationUtils; import org.springframework.lang.Nullable; @@ -28,7 +28,7 @@ import org.springframework.transaction.interceptor.DefaultTransactionAttribute; import org.springframework.transaction.interceptor.TransactionAttribute; /** - * Strategy implementation for parsing EJB3's {@link javax.ejb.TransactionAttribute} + * Strategy implementation for parsing EJB3's {@link jakarta.ejb.TransactionAttribute} * annotation. * * @author Juergen Hoeller @@ -39,13 +39,13 @@ public class Ejb3TransactionAnnotationParser implements TransactionAnnotationPar @Override public boolean isCandidateClass(Class targetClass) { - return AnnotationUtils.isCandidateClass(targetClass, javax.ejb.TransactionAttribute.class); + return AnnotationUtils.isCandidateClass(targetClass, jakarta.ejb.TransactionAttribute.class); } @Override @Nullable public TransactionAttribute parseTransactionAnnotation(AnnotatedElement element) { - javax.ejb.TransactionAttribute ann = element.getAnnotation(javax.ejb.TransactionAttribute.class); + jakarta.ejb.TransactionAttribute ann = element.getAnnotation(jakarta.ejb.TransactionAttribute.class); if (ann != null) { return parseTransactionAnnotation(ann); } @@ -54,7 +54,7 @@ public class Ejb3TransactionAnnotationParser implements TransactionAnnotationPar } } - public TransactionAttribute parseTransactionAnnotation(javax.ejb.TransactionAttribute ann) { + public TransactionAttribute parseTransactionAnnotation(jakarta.ejb.TransactionAttribute ann) { return new Ejb3TransactionAttribute(ann.value()); } diff --git a/spring-tx/src/main/java/org/springframework/transaction/annotation/JtaTransactionAnnotationParser.java b/spring-tx/src/main/java/org/springframework/transaction/annotation/JtaTransactionAnnotationParser.java index ccc018f6be6..9e3b956848d 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/annotation/JtaTransactionAnnotationParser.java +++ b/spring-tx/src/main/java/org/springframework/transaction/annotation/JtaTransactionAnnotationParser.java @@ -31,7 +31,7 @@ import org.springframework.transaction.interceptor.RuleBasedTransactionAttribute import org.springframework.transaction.interceptor.TransactionAttribute; /** - * Strategy implementation for parsing JTA 1.2's {@link javax.transaction.Transactional} annotation. + * Strategy implementation for parsing JTA 1.2's {@link jakarta.transaction.Transactional} annotation. * * @author Juergen Hoeller * @since 4.0 @@ -41,14 +41,14 @@ public class JtaTransactionAnnotationParser implements TransactionAnnotationPars @Override public boolean isCandidateClass(Class targetClass) { - return AnnotationUtils.isCandidateClass(targetClass, javax.transaction.Transactional.class); + return AnnotationUtils.isCandidateClass(targetClass, jakarta.transaction.Transactional.class); } @Override @Nullable public TransactionAttribute parseTransactionAnnotation(AnnotatedElement element) { AnnotationAttributes attributes = AnnotatedElementUtils.getMergedAnnotationAttributes( - element, javax.transaction.Transactional.class); + element, jakarta.transaction.Transactional.class); if (attributes != null) { return parseTransactionAnnotation(attributes); } @@ -57,7 +57,7 @@ public class JtaTransactionAnnotationParser implements TransactionAnnotationPars } } - public TransactionAttribute parseTransactionAnnotation(javax.transaction.Transactional ann) { + public TransactionAttribute parseTransactionAnnotation(jakarta.transaction.Transactional ann) { return parseTransactionAnnotation(AnnotationUtils.getAnnotationAttributes(ann, false, false)); } diff --git a/spring-tx/src/main/java/org/springframework/transaction/annotation/Propagation.java b/spring-tx/src/main/java/org/springframework/transaction/annotation/Propagation.java index 1e235ce8770..18e43cf16e8 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/annotation/Propagation.java +++ b/spring-tx/src/main/java/org/springframework/transaction/annotation/Propagation.java @@ -61,8 +61,8 @@ public enum Propagation { *

    NOTE: Actual transaction suspension will not work out-of-the-box * on all transaction managers. This in particular applies to * {@link org.springframework.transaction.jta.JtaTransactionManager}, - * which requires the {@code javax.transaction.TransactionManager} to be - * made available to it (which is server-specific in standard Java EE). + * which requires the {@code jakarta.transaction.TransactionManager} to be + * made available to it (which is server-specific in standard Jakarta EE). * @see org.springframework.transaction.jta.JtaTransactionManager#setTransactionManager */ REQUIRES_NEW(TransactionDefinition.PROPAGATION_REQUIRES_NEW), @@ -73,8 +73,8 @@ public enum Propagation { *

    NOTE: Actual transaction suspension will not work out-of-the-box * on all transaction managers. This in particular applies to * {@link org.springframework.transaction.jta.JtaTransactionManager}, - * which requires the {@code javax.transaction.TransactionManager} to be - * made available to it (which is server-specific in standard Java EE). + * which requires the {@code jakarta.transaction.TransactionManager} to be + * made available to it (which is server-specific in standard Jakarta EE). * @see org.springframework.transaction.jta.JtaTransactionManager#setTransactionManager */ NOT_SUPPORTED(TransactionDefinition.PROPAGATION_NOT_SUPPORTED), diff --git a/spring-tx/src/main/java/org/springframework/transaction/annotation/TransactionAnnotationParser.java b/spring-tx/src/main/java/org/springframework/transaction/annotation/TransactionAnnotationParser.java index e486fbbdaaf..0e9ee83a568 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/annotation/TransactionAnnotationParser.java +++ b/spring-tx/src/main/java/org/springframework/transaction/annotation/TransactionAnnotationParser.java @@ -25,8 +25,8 @@ import org.springframework.transaction.interceptor.TransactionAttribute; * Strategy interface for parsing known transaction annotation types. * {@link AnnotationTransactionAttributeSource} delegates to such * parsers for supporting specific annotation types such as Spring's own - * {@link Transactional}, JTA 1.2's {@link javax.transaction.Transactional} - * or EJB3's {@link javax.ejb.TransactionAttribute}. + * {@link Transactional}, JTA 1.2's {@link jakarta.transaction.Transactional} + * or EJB3's {@link jakarta.ejb.TransactionAttribute}. * * @author Juergen Hoeller * @since 2.5 diff --git a/spring-tx/src/main/java/org/springframework/transaction/annotation/TransactionManagementConfigurationSelector.java b/spring-tx/src/main/java/org/springframework/transaction/annotation/TransactionManagementConfigurationSelector.java index 5e16f915f81..22551ceed15 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/annotation/TransactionManagementConfigurationSelector.java +++ b/spring-tx/src/main/java/org/springframework/transaction/annotation/TransactionManagementConfigurationSelector.java @@ -57,7 +57,7 @@ public class TransactionManagementConfigurationSelector extends AdviceModeImport } private String determineTransactionAspectClass() { - return (ClassUtils.isPresent("javax.transaction.Transactional", getClass().getClassLoader()) ? + return (ClassUtils.isPresent("jakarta.transaction.Transactional", getClass().getClassLoader()) ? TransactionManagementConfigUtils.JTA_TRANSACTION_ASPECT_CONFIGURATION_CLASS_NAME : TransactionManagementConfigUtils.TRANSACTION_ASPECT_CONFIGURATION_CLASS_NAME); } diff --git a/spring-tx/src/main/java/org/springframework/transaction/annotation/Transactional.java b/spring-tx/src/main/java/org/springframework/transaction/annotation/Transactional.java index 42537572223..d399e8b04eb 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/annotation/Transactional.java +++ b/spring-tx/src/main/java/org/springframework/transaction/annotation/Transactional.java @@ -188,7 +188,7 @@ public @interface Transactional { * a transaction rollback. *

    This can be a substring of a fully qualified class name, with no wildcard * support at present. For example, a value of {@code "ServletException"} would - * match {@code javax.servlet.ServletException} and its subclasses. + * match {@code jakarta.servlet.ServletException} and its subclasses. *

    NB: Consider carefully how specific the pattern is and whether * to include package information (which isn't mandatory). For example, * {@code "Exception"} will match nearly anything and will probably hide other diff --git a/spring-tx/src/main/java/org/springframework/transaction/config/AnnotationDrivenBeanDefinitionParser.java b/spring-tx/src/main/java/org/springframework/transaction/config/AnnotationDrivenBeanDefinitionParser.java index 8d6ba603deb..d7dca39ef5d 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/config/AnnotationDrivenBeanDefinitionParser.java +++ b/spring-tx/src/main/java/org/springframework/transaction/config/AnnotationDrivenBeanDefinitionParser.java @@ -65,7 +65,7 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { if ("aspectj".equals(mode)) { // mode="aspectj" registerTransactionAspect(element, parserContext); - if (ClassUtils.isPresent("javax.transaction.Transactional", getClass().getClassLoader())) { + if (ClassUtils.isPresent("jakarta.transaction.Transactional", getClass().getClassLoader())) { registerJtaTransactionAspect(element, parserContext); } } diff --git a/spring-tx/src/main/java/org/springframework/transaction/config/JtaTransactionManagerBeanDefinitionParser.java b/spring-tx/src/main/java/org/springframework/transaction/config/JtaTransactionManagerBeanDefinitionParser.java index cae08558e4a..055b127e662 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/config/JtaTransactionManagerBeanDefinitionParser.java +++ b/spring-tx/src/main/java/org/springframework/transaction/config/JtaTransactionManagerBeanDefinitionParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,23 +21,20 @@ import org.w3c.dom.Element; import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; +import org.springframework.transaction.jta.JtaTransactionManager; /** - * Parser for the <tx:jta-transaction-manager/> XML configuration element, - * autodetecting WebLogic and WebSphere servers and exposing the corresponding - * {@link org.springframework.transaction.jta.JtaTransactionManager} subclass. + * Parser for the <tx:jta-transaction-manager/> XML configuration element. * * @author Juergen Hoeller * @author Christian Dupuis * @since 2.5 - * @see org.springframework.transaction.jta.WebLogicJtaTransactionManager - * @see org.springframework.transaction.jta.WebSphereUowTransactionManager */ public class JtaTransactionManagerBeanDefinitionParser extends AbstractSingleBeanDefinitionParser { @Override - protected String getBeanClassName(Element element) { - return JtaTransactionManagerFactoryBean.resolveJtaTransactionManagerClassName(); + protected Class getBeanClass(Element element) { + return JtaTransactionManager.class; } @Override diff --git a/spring-tx/src/main/java/org/springframework/transaction/config/JtaTransactionManagerFactoryBean.java b/spring-tx/src/main/java/org/springframework/transaction/config/JtaTransactionManagerFactoryBean.java index 09fe5062f3f..a1cc1b87c6e 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/config/JtaTransactionManagerFactoryBean.java +++ b/spring-tx/src/main/java/org/springframework/transaction/config/JtaTransactionManagerFactoryBean.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,62 +16,23 @@ package org.springframework.transaction.config; -import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.lang.Nullable; import org.springframework.transaction.TransactionSystemException; import org.springframework.transaction.jta.JtaTransactionManager; -import org.springframework.util.ClassUtils; /** - * A {@link FactoryBean} equivalent to the <tx:jta-transaction-manager/> XML element, - * autodetecting WebLogic and WebSphere servers and exposing the corresponding - * {@link org.springframework.transaction.jta.JtaTransactionManager} subclass. + * A {@link FactoryBean} equivalent to the <tx:jta-transaction-manager/> XML element. * * @author Juergen Hoeller * @since 4.1.1 - * @see org.springframework.transaction.jta.WebLogicJtaTransactionManager - * @see org.springframework.transaction.jta.WebSphereUowTransactionManager + * @deprecated as of 6.0, in favor of a straight {@link JtaTransactionManager} definition */ +@Deprecated public class JtaTransactionManagerFactoryBean implements FactoryBean, InitializingBean { - private static final String WEBLOGIC_JTA_TRANSACTION_MANAGER_CLASS_NAME = - "org.springframework.transaction.jta.WebLogicJtaTransactionManager"; - - private static final String WEBSPHERE_TRANSACTION_MANAGER_CLASS_NAME = - "org.springframework.transaction.jta.WebSphereUowTransactionManager"; - - private static final String JTA_TRANSACTION_MANAGER_CLASS_NAME = - "org.springframework.transaction.jta.JtaTransactionManager"; - - - private static final boolean weblogicPresent; - - private static final boolean webspherePresent; - - static { - ClassLoader classLoader = JtaTransactionManagerFactoryBean.class.getClassLoader(); - weblogicPresent = ClassUtils.isPresent("weblogic.transaction.UserTransaction", classLoader); - webspherePresent = ClassUtils.isPresent("com.ibm.wsspi.uow.UOWManager", classLoader); - } - - - private final JtaTransactionManager transactionManager; - - - @SuppressWarnings("unchecked") - public JtaTransactionManagerFactoryBean() { - String className = resolveJtaTransactionManagerClassName(); - try { - Class clazz = (Class) - ClassUtils.forName(className, JtaTransactionManagerFactoryBean.class.getClassLoader()); - this.transactionManager = BeanUtils.instantiateClass(clazz); - } - catch (ClassNotFoundException ex) { - throw new IllegalStateException("Failed to load JtaTransactionManager class: " + className, ex); - } - } + private final JtaTransactionManager transactionManager = new JtaTransactionManager(); @Override @@ -95,17 +56,4 @@ public class JtaTransactionManagerFactoryBean implements FactoryBeanThis can be a substring, with no wildcard support at present. A value * of "ServletException" would match - * {@code javax.servlet.ServletException} and subclasses, for example. + * {@code jakarta.servlet.ServletException} and subclasses, for example. *

    NB: Consider carefully how specific the pattern is, and * whether to include package information (which is not mandatory). For * example, "Exception" will match nearly anything, and will probably hide diff --git a/spring-tx/src/main/java/org/springframework/transaction/jta/JtaAfterCompletionSynchronization.java b/spring-tx/src/main/java/org/springframework/transaction/jta/JtaAfterCompletionSynchronization.java index 807a19fcf71..15eb93ce505 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/jta/JtaAfterCompletionSynchronization.java +++ b/spring-tx/src/main/java/org/springframework/transaction/jta/JtaAfterCompletionSynchronization.java @@ -18,8 +18,8 @@ package org.springframework.transaction.jta; import java.util.List; -import javax.transaction.Status; -import javax.transaction.Synchronization; +import jakarta.transaction.Status; +import jakarta.transaction.Synchronization; import org.springframework.transaction.support.TransactionSynchronization; import org.springframework.transaction.support.TransactionSynchronizationUtils; diff --git a/spring-tx/src/main/java/org/springframework/transaction/jta/JtaTransactionManager.java b/spring-tx/src/main/java/org/springframework/transaction/jta/JtaTransactionManager.java index c993fbf31fe..6488332e75a 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/jta/JtaTransactionManager.java +++ b/spring-tx/src/main/java/org/springframework/transaction/jta/JtaTransactionManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,17 +23,18 @@ import java.util.List; import java.util.Properties; import javax.naming.NamingException; -import javax.transaction.HeuristicMixedException; -import javax.transaction.HeuristicRollbackException; -import javax.transaction.InvalidTransactionException; -import javax.transaction.NotSupportedException; -import javax.transaction.RollbackException; -import javax.transaction.Status; -import javax.transaction.SystemException; -import javax.transaction.Transaction; -import javax.transaction.TransactionManager; -import javax.transaction.TransactionSynchronizationRegistry; -import javax.transaction.UserTransaction; + +import jakarta.transaction.HeuristicMixedException; +import jakarta.transaction.HeuristicRollbackException; +import jakarta.transaction.InvalidTransactionException; +import jakarta.transaction.NotSupportedException; +import jakarta.transaction.RollbackException; +import jakarta.transaction.Status; +import jakarta.transaction.SystemException; +import jakarta.transaction.Transaction; +import jakarta.transaction.TransactionManager; +import jakarta.transaction.TransactionSynchronizationRegistry; +import jakarta.transaction.UserTransaction; import org.springframework.beans.factory.InitializingBean; import org.springframework.jndi.JndiTemplate; @@ -56,7 +57,7 @@ import org.springframework.util.StringUtils; /** * {@link org.springframework.transaction.PlatformTransactionManager} implementation * for JTA, delegating to a backend JTA provider. This is typically used to delegate - * to a Java EE server's transaction coordinator, but may also be configured with a + * to a Jakarta EE server's transaction coordinator, but may also be configured with a * local JTA provider which is embedded within the application. * *

    This transaction manager is appropriate for handling distributed transactions, @@ -67,8 +68,8 @@ import org.springframework.util.StringUtils; * HibernateTransactionManager is appropriate, for example. * *

    For typical JTA transactions (REQUIRED, SUPPORTS, MANDATORY, NEVER), a plain - * JtaTransactionManager definition is all you need, portable across all Java EE servers. - * This corresponds to the functionality of the JTA UserTransaction, for which Java EE + * JtaTransactionManager definition is all you need, portable across all Jakarta EE servers. + * This corresponds to the functionality of the JTA UserTransaction, for which Jakarta EE * specifies a standard JNDI name ("java:comp/UserTransaction"). There is no need to * configure a server-specific TransactionManager lookup for this kind of JTA usage. * @@ -77,26 +78,17 @@ import org.springframework.util.StringUtils; * autodetected by JtaTransactionManager, provided that the "autodetectTransactionManager" * flag is set to "true" (which it is by default). * - *

    Note: Support for the JTA TransactionManager interface is not required by Java EE. - * Almost all Java EE servers expose it, but do so as extension to EE. There might be some + *

    Note: Support for the JTA TransactionManager interface is not required by Jakarta EE. + * Almost all Jakarta EE servers expose it, but do so as extension to EE. There might be some * issues with compatibility, despite the TransactionManager interface being part of JTA. - * As a consequence, Spring provides various vendor-specific PlatformTransactionManagers, - * which are recommended to be used if appropriate: {@link WebLogicJtaTransactionManager} - * and {@link WebSphereUowTransactionManager}. For all other Java EE servers, the - * standard JtaTransactionManager is sufficient. * *

    This pure JtaTransactionManager class supports timeouts but not per-transaction * isolation levels. Custom subclasses may override the {@link #doJtaBegin} method for - * specific JTA extensions in order to provide this functionality; Spring includes a - * corresponding {@link WebLogicJtaTransactionManager} class for WebLogic Server. Such - * adapters for specific Java EE transaction coordinators may also expose transaction - * names for monitoring; with standard JTA, transaction names will simply be ignored. - * - *

    Consider using Spring's {@code tx:jta-transaction-manager} configuration - * element for automatically picking the appropriate JTA platform transaction manager - * (automatically detecting WebLogic and WebSphere). + * specific JTA extensions in order to provide this functionality. Such adapters for + * specific Jakarta EE transaction coordinators may also expose transaction names for + * monitoring; with standard JTA, transaction names will simply be ignored. * - *

    JTA 1.1 adds the TransactionSynchronizationRegistry facility, as public Java EE 5 + *

    JTA 1.1 adds the TransactionSynchronizationRegistry facility, as public Jakarta EE * API in addition to the standard JTA UserTransaction handle. As of Spring 2.5, this * JtaTransactionManager autodetects the TransactionSynchronizationRegistry and uses * it for registering Spring-managed synchronizations when participating in an existing @@ -108,21 +100,20 @@ import org.springframework.util.StringUtils; * * @author Juergen Hoeller * @since 24.03.2003 - * @see javax.transaction.UserTransaction - * @see javax.transaction.TransactionManager - * @see javax.transaction.TransactionSynchronizationRegistry + * @see jakarta.transaction.UserTransaction + * @see jakarta.transaction.TransactionManager + * @see jakarta.transaction.TransactionSynchronizationRegistry * @see #setUserTransactionName * @see #setUserTransaction * @see #setTransactionManagerName * @see #setTransactionManager - * @see WebLogicJtaTransactionManager */ @SuppressWarnings("serial") public class JtaTransactionManager extends AbstractPlatformTransactionManager implements TransactionFactory, InitializingBean, Serializable { /** - * Default JNDI location for the JTA UserTransaction. Many Java EE servers + * Default JNDI location for the JTA UserTransaction. Many Jakarta EE servers * also provide support for the JTA TransactionManager interface there. * @see #setUserTransactionName * @see #setAutodetectTransactionManager @@ -141,7 +132,7 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager "java:pm/TransactionManager", "java:/TransactionManager"}; /** - * Standard Java EE 5 JNDI location for the JTA TransactionSynchronizationRegistry. + * Standard Jakarta EE JNDI location for the JTA TransactionSynchronizationRegistry. * Autodetected when available. */ public static final String DEFAULT_TRANSACTION_SYNCHRONIZATION_REGISTRY_NAME = @@ -265,7 +256,7 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager /** * Set the JTA UserTransaction to use as direct reference. - *

    Typically just used for local JTA setups; in a Java EE environment, + *

    Typically just used for local JTA setups; in a Jakarta EE environment, * the UserTransaction will always be fetched from JNDI. * @see #setUserTransactionName * @see #setAutodetectUserTransaction @@ -284,7 +275,7 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager /** * Set the JNDI name of the JTA UserTransaction. - *

    Note that the UserTransaction will be autodetected at the Java EE + *

    Note that the UserTransaction will be autodetected at the Jakarta EE * default location "java:comp/UserTransaction" if not specified explicitly. * @see #DEFAULT_USER_TRANSACTION_NAME * @see #setUserTransaction @@ -296,7 +287,7 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager /** * Set whether to autodetect the JTA UserTransaction at its default - * JNDI location "java:comp/UserTransaction", as specified by Java EE. + * JNDI location "java:comp/UserTransaction", as specified by Jakarta EE. * Will proceed without UserTransaction if none found. *

    Default is "true", autodetecting the UserTransaction unless * it has been specified explicitly. Turn this flag off to allow for @@ -381,7 +372,7 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager *

    A TransactionSynchronizationRegistry allows for interposed registration * of transaction synchronizations, as an alternative to the regular registration * methods on the JTA TransactionManager API. Also, it is an official part of the - * Java EE 5 platform, in contrast to the JTA TransactionManager itself. + * Jakarta EE platform, in contrast to the JTA TransactionManager itself. *

    Note that the TransactionSynchronizationRegistry will be autodetected in JNDI and * also from the UserTransaction/TransactionManager object if implemented there as well. * @see #setTransactionSynchronizationRegistryName @@ -402,7 +393,7 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager /** * Set the JNDI name of the JTA 1.1 TransactionSynchronizationRegistry. *

    Note that the TransactionSynchronizationRegistry will be autodetected - * at the Java EE 5 default location "java:comp/TransactionSynchronizationRegistry" + * at the Jakarta EE default location "java:comp/TransactionSynchronizationRegistry" * if not specified explicitly. * @see #DEFAULT_TRANSACTION_SYNCHRONIZATION_REGISTRY_NAME */ @@ -741,7 +732,7 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager /** * Find the JTA 1.1 TransactionSynchronizationRegistry through autodetection: * checking whether the UserTransaction object or TransactionManager object - * implements it, and checking Java EE 5's standard JNDI location. + * implements it, and checking Jakarta EE's standard JNDI location. *

    The default implementation simply returns {@code null}. * @param ut the JTA UserTransaction object * @param tm the JTA TransactionManager object @@ -834,7 +825,7 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager *

    JTA implementations might support nested transactions via further * {@code UserTransaction.begin()} invocations, but never support savepoints. * @see #doBegin - * @see javax.transaction.UserTransaction#begin() + * @see jakarta.transaction.UserTransaction#begin() */ @Override protected boolean useSavepointForNestedTransaction() { @@ -874,8 +865,8 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager * @see #applyIsolationLevel * @see #applyTimeout * @see JtaTransactionObject#getUserTransaction() - * @see javax.transaction.UserTransaction#setTransactionTimeout - * @see javax.transaction.UserTransaction#begin + * @see jakarta.transaction.UserTransaction#setTransactionTimeout + * @see jakarta.transaction.UserTransaction#begin */ protected void doJtaBegin(JtaTransactionObject txObject, TransactionDefinition definition) throws NotSupportedException, SystemException { @@ -918,7 +909,7 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager * @throws SystemException if thrown by the JTA implementation * @see #doJtaBegin * @see JtaTransactionObject#getUserTransaction() - * @see javax.transaction.UserTransaction#setTransactionTimeout(int) + * @see jakarta.transaction.UserTransaction#setTransactionTimeout(int) */ protected void applyTimeout(JtaTransactionObject txObject, int timeout) throws SystemException { if (timeout > TransactionDefinition.TIMEOUT_DEFAULT) { @@ -948,7 +939,7 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager * @return the suspended JTA Transaction object * @throws SystemException if thrown by JTA methods * @see #getTransactionManager() - * @see javax.transaction.TransactionManager#suspend() + * @see jakarta.transaction.TransactionManager#suspend() */ protected Object doJtaSuspend(JtaTransactionObject txObject) throws SystemException { if (getTransactionManager() == null) { @@ -984,7 +975,7 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager * @throws InvalidTransactionException if thrown by JTA methods * @throws SystemException if thrown by JTA methods * @see #getTransactionManager() - * @see javax.transaction.TransactionManager#resume(javax.transaction.Transaction) + * @see jakarta.transaction.TransactionManager#resume(jakarta.transaction.Transaction) */ protected void doJtaResume(@Nullable JtaTransactionObject txObject, Object suspendedTransaction) throws InvalidTransactionException, SystemException { @@ -1144,8 +1135,8 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager * @throws RollbackException if thrown by JTA methods * @throws SystemException if thrown by JTA methods * @see #getTransactionManager() - * @see javax.transaction.Transaction#registerSynchronization - * @see javax.transaction.TransactionSynchronizationRegistry#registerInterposedSynchronization + * @see jakarta.transaction.Transaction#registerSynchronization + * @see jakarta.transaction.TransactionSynchronizationRegistry#registerInterposedSynchronization */ protected void doRegisterAfterCompletionWithJtaTransaction( JtaTransactionObject txObject, List synchronizations) diff --git a/spring-tx/src/main/java/org/springframework/transaction/jta/JtaTransactionObject.java b/spring-tx/src/main/java/org/springframework/transaction/jta/JtaTransactionObject.java index 4bbc8ff46ac..b92453fa92a 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/jta/JtaTransactionObject.java +++ b/spring-tx/src/main/java/org/springframework/transaction/jta/JtaTransactionObject.java @@ -16,16 +16,16 @@ package org.springframework.transaction.jta; -import javax.transaction.Status; -import javax.transaction.SystemException; -import javax.transaction.UserTransaction; +import jakarta.transaction.Status; +import jakarta.transaction.SystemException; +import jakarta.transaction.UserTransaction; import org.springframework.transaction.TransactionSystemException; import org.springframework.transaction.support.SmartTransactionObject; import org.springframework.transaction.support.TransactionSynchronizationUtils; /** - * JTA transaction object, representing a {@link javax.transaction.UserTransaction}. + * JTA transaction object, representing a {@link jakarta.transaction.UserTransaction}. * Used as transaction object by Spring's {@link JtaTransactionManager}. * *

    Note: This is an SPI class, not intended to be used by applications. @@ -33,7 +33,7 @@ import org.springframework.transaction.support.TransactionSynchronizationUtils; * @author Juergen Hoeller * @since 1.1 * @see JtaTransactionManager - * @see javax.transaction.UserTransaction + * @see jakarta.transaction.UserTransaction */ public class JtaTransactionObject implements SmartTransactionObject { diff --git a/spring-tx/src/main/java/org/springframework/transaction/jta/ManagedTransactionAdapter.java b/spring-tx/src/main/java/org/springframework/transaction/jta/ManagedTransactionAdapter.java index 47a804abc84..6d5542b14d8 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/jta/ManagedTransactionAdapter.java +++ b/spring-tx/src/main/java/org/springframework/transaction/jta/ManagedTransactionAdapter.java @@ -16,21 +16,22 @@ package org.springframework.transaction.jta; -import javax.transaction.HeuristicMixedException; -import javax.transaction.HeuristicRollbackException; -import javax.transaction.RollbackException; -import javax.transaction.Synchronization; -import javax.transaction.SystemException; -import javax.transaction.Transaction; -import javax.transaction.TransactionManager; import javax.transaction.xa.XAResource; +import jakarta.transaction.HeuristicMixedException; +import jakarta.transaction.HeuristicRollbackException; +import jakarta.transaction.RollbackException; +import jakarta.transaction.Synchronization; +import jakarta.transaction.SystemException; +import jakarta.transaction.Transaction; +import jakarta.transaction.TransactionManager; + import org.springframework.util.Assert; /** * Adapter for a managed JTA Transaction handle, taking a JTA - * {@link javax.transaction.TransactionManager} reference and creating - * a JTA {@link javax.transaction.Transaction} handle for it. + * {@link jakarta.transaction.TransactionManager} reference and creating + * a JTA {@link jakarta.transaction.Transaction} handle for it. * * @author Juergen Hoeller * @since 3.0.2 diff --git a/spring-tx/src/main/java/org/springframework/transaction/jta/SimpleTransactionFactory.java b/spring-tx/src/main/java/org/springframework/transaction/jta/SimpleTransactionFactory.java index bd0828a9c37..f0977ac25e3 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/jta/SimpleTransactionFactory.java +++ b/spring-tx/src/main/java/org/springframework/transaction/jta/SimpleTransactionFactory.java @@ -16,25 +16,25 @@ package org.springframework.transaction.jta; -import javax.transaction.NotSupportedException; -import javax.transaction.SystemException; -import javax.transaction.Transaction; -import javax.transaction.TransactionManager; +import jakarta.transaction.NotSupportedException; +import jakarta.transaction.SystemException; +import jakarta.transaction.Transaction; +import jakarta.transaction.TransactionManager; import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** * Default implementation of the {@link TransactionFactory} strategy interface, - * simply wrapping a standard JTA {@link javax.transaction.TransactionManager}. + * simply wrapping a standard JTA {@link jakarta.transaction.TransactionManager}. * *

    Does not support transaction names; simply ignores any specified name. * * @author Juergen Hoeller * @since 2.5 - * @see javax.transaction.TransactionManager#setTransactionTimeout(int) - * @see javax.transaction.TransactionManager#begin() - * @see javax.transaction.TransactionManager#getTransaction() + * @see jakarta.transaction.TransactionManager#setTransactionTimeout(int) + * @see jakarta.transaction.TransactionManager#begin() + * @see jakarta.transaction.TransactionManager#getTransaction() */ public class SimpleTransactionFactory implements TransactionFactory { diff --git a/spring-tx/src/main/java/org/springframework/transaction/jta/SpringJtaSynchronizationAdapter.java b/spring-tx/src/main/java/org/springframework/transaction/jta/SpringJtaSynchronizationAdapter.java index d2f8282ef15..aa718d7aed6 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/jta/SpringJtaSynchronizationAdapter.java +++ b/spring-tx/src/main/java/org/springframework/transaction/jta/SpringJtaSynchronizationAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,11 +16,10 @@ package org.springframework.transaction.jta; -import javax.transaction.Status; -import javax.transaction.Synchronization; -import javax.transaction.TransactionManager; -import javax.transaction.UserTransaction; - +import jakarta.transaction.Status; +import jakarta.transaction.Synchronization; +import jakarta.transaction.TransactionManager; +import jakarta.transaction.UserTransaction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -30,7 +29,7 @@ import org.springframework.transaction.support.TransactionSynchronizationManager import org.springframework.util.Assert; /** - * Adapter that implements the JTA {@link javax.transaction.Synchronization} + * Adapter that implements the JTA {@link jakarta.transaction.Synchronization} * interface delegating to an underlying Spring * {@link org.springframework.transaction.support.TransactionSynchronization}. * @@ -40,7 +39,7 @@ import org.springframework.util.Assert; * * @author Juergen Hoeller * @since 2.0 - * @see javax.transaction.Transaction#registerSynchronization + * @see jakarta.transaction.Transaction#registerSynchronization * @see org.springframework.transaction.support.TransactionSynchronization */ public class SpringJtaSynchronizationAdapter implements Synchronization { @@ -82,9 +81,7 @@ public class SpringJtaSynchronizationAdapter implements Synchronization { @Nullable UserTransaction jtaUserTransaction) { this(springSynchronization); - if (jtaUserTransaction != null && !jtaUserTransaction.getClass().getName().startsWith("weblogic.")) { - this.jtaTransaction = jtaUserTransaction; - } + this.jtaTransaction = jtaUserTransaction; } /** @@ -104,9 +101,7 @@ public class SpringJtaSynchronizationAdapter implements Synchronization { TransactionSynchronization springSynchronization, @Nullable TransactionManager jtaTransactionManager) { this(springSynchronization); - if (jtaTransactionManager != null && !jtaTransactionManager.getClass().getName().startsWith("weblogic.")) { - this.jtaTransaction = new UserTransactionAdapter(jtaTransactionManager); - } + this.jtaTransaction = new UserTransactionAdapter(jtaTransactionManager); } diff --git a/spring-tx/src/main/java/org/springframework/transaction/jta/TransactionFactory.java b/spring-tx/src/main/java/org/springframework/transaction/jta/TransactionFactory.java index 9317e9bb8eb..b0ac3142083 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/jta/TransactionFactory.java +++ b/spring-tx/src/main/java/org/springframework/transaction/jta/TransactionFactory.java @@ -16,24 +16,24 @@ package org.springframework.transaction.jta; -import javax.transaction.NotSupportedException; -import javax.transaction.SystemException; -import javax.transaction.Transaction; +import jakarta.transaction.NotSupportedException; +import jakarta.transaction.SystemException; +import jakarta.transaction.Transaction; import org.springframework.lang.Nullable; /** - * Strategy interface for creating JTA {@link javax.transaction.Transaction} + * Strategy interface for creating JTA {@link jakarta.transaction.Transaction} * objects based on specified transactional characteristics. * *

    The default implementation, {@link SimpleTransactionFactory}, simply - * wraps a standard JTA {@link javax.transaction.TransactionManager}. + * wraps a standard JTA {@link jakarta.transaction.TransactionManager}. * This strategy interface allows for more sophisticated implementations * that adapt to vendor-specific JTA extensions. * * @author Juergen Hoeller * @since 2.5 - * @see javax.transaction.TransactionManager#getTransaction() + * @see jakarta.transaction.TransactionManager#getTransaction() * @see SimpleTransactionFactory * @see JtaTransactionManager */ @@ -58,8 +58,8 @@ public interface TransactionFactory { * {@link org.springframework.jca.endpoint.AbstractMessageEndpointFactory} * in order to differentiate between invalid configuration and valid * ResourceAdapter-managed transactions. - * @see javax.resource.spi.ResourceAdapter#endpointActivation - * @see javax.resource.spi.endpoint.MessageEndpointFactory#isDeliveryTransacted + * @see jakarta.resource.spi.ResourceAdapter#endpointActivation + * @see jakarta.resource.spi.endpoint.MessageEndpointFactory#isDeliveryTransacted */ boolean supportsResourceAdapterManagedTransactions(); diff --git a/spring-tx/src/main/java/org/springframework/transaction/jta/UserTransactionAdapter.java b/spring-tx/src/main/java/org/springframework/transaction/jta/UserTransactionAdapter.java index 8302071f0e3..faf610fcced 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/jta/UserTransactionAdapter.java +++ b/spring-tx/src/main/java/org/springframework/transaction/jta/UserTransactionAdapter.java @@ -16,20 +16,20 @@ package org.springframework.transaction.jta; -import javax.transaction.HeuristicMixedException; -import javax.transaction.HeuristicRollbackException; -import javax.transaction.NotSupportedException; -import javax.transaction.RollbackException; -import javax.transaction.SystemException; -import javax.transaction.TransactionManager; -import javax.transaction.UserTransaction; +import jakarta.transaction.HeuristicMixedException; +import jakarta.transaction.HeuristicRollbackException; +import jakarta.transaction.NotSupportedException; +import jakarta.transaction.RollbackException; +import jakarta.transaction.SystemException; +import jakarta.transaction.TransactionManager; +import jakarta.transaction.UserTransaction; import org.springframework.util.Assert; /** * Adapter for a JTA UserTransaction handle, taking a JTA - * {@link javax.transaction.TransactionManager} reference and creating - * a JTA {@link javax.transaction.UserTransaction} handle for it. + * {@link jakarta.transaction.TransactionManager} reference and creating + * a JTA {@link jakarta.transaction.UserTransaction} handle for it. * *

    The JTA UserTransaction interface is an exact subset of the JTA * TransactionManager interface. Unfortunately, it does not serve as diff --git a/spring-tx/src/main/java/org/springframework/transaction/jta/WebLogicJtaTransactionManager.java b/spring-tx/src/main/java/org/springframework/transaction/jta/WebLogicJtaTransactionManager.java deleted file mode 100644 index 9d2cc38a723..00000000000 --- a/spring-tx/src/main/java/org/springframework/transaction/jta/WebLogicJtaTransactionManager.java +++ /dev/null @@ -1,366 +0,0 @@ -/* - * Copyright 2002-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.transaction.jta; - -import java.io.Serializable; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - -import javax.transaction.InvalidTransactionException; -import javax.transaction.NotSupportedException; -import javax.transaction.SystemException; -import javax.transaction.Transaction; -import javax.transaction.TransactionManager; -import javax.transaction.UserTransaction; - -import org.springframework.lang.Nullable; -import org.springframework.transaction.TransactionDefinition; -import org.springframework.transaction.TransactionSystemException; -import org.springframework.util.Assert; - -/** - * Special {@link JtaTransactionManager} variant for BEA WebLogic (9.0 and higher). - * Supports the full power of Spring's transaction definitions on WebLogic's - * transaction coordinator, beyond standard JTA: transaction names, - * per-transaction isolation levels, and proper resuming of transactions in all cases. - * - *

    Uses WebLogic's special {@code begin(name)} method to start a JTA transaction, - * in order to make Spring-driven transactions visible in WebLogic's transaction - * monitor. In case of Spring's declarative transactions, the exposed name will - * (by default) be the fully-qualified class name + "." + method name. - * - *

    Supports a per-transaction isolation level through WebLogic's corresponding - * JTA transaction property "ISOLATION LEVEL". This will apply the specified isolation - * level (e.g. ISOLATION_SERIALIZABLE) to all JDBC Connections that participate in the - * given transaction. - * - *

    Invokes WebLogic's special {@code forceResume} method if standard JTA resume - * failed, to also resume if the target transaction was marked rollback-only. - * If you're not relying on this feature of transaction suspension in the first - * place, Spring's standard JtaTransactionManager will behave properly too. - * - *

    By default, the JTA UserTransaction and TransactionManager handles are - * fetched directly from WebLogic's {@code TransactionHelper}. This can be - * overridden by specifying "userTransaction"/"userTransactionName" and - * "transactionManager"/"transactionManagerName", passing in existing handles - * or specifying corresponding JNDI locations to look up. - * - *

    NOTE: This JtaTransactionManager is intended to refine specific transaction - * demarcation behavior on Spring's side. It will happily co-exist with independently - * configured WebLogic transaction strategies in your persistence provider, with no - * need to specifically connect those setups in any way. - * - * @author Juergen Hoeller - * @since 1.1 - * @see org.springframework.transaction.TransactionDefinition#getName - * @see org.springframework.transaction.TransactionDefinition#getIsolationLevel - * @see weblogic.transaction.UserTransaction#begin(String) - * @see weblogic.transaction.Transaction#setProperty - * @see weblogic.transaction.TransactionManager#forceResume - * @see weblogic.transaction.TransactionHelper - */ -@SuppressWarnings("serial") -public class WebLogicJtaTransactionManager extends JtaTransactionManager { - - private static final String USER_TRANSACTION_CLASS_NAME = "weblogic.transaction.UserTransaction"; - - private static final String CLIENT_TRANSACTION_MANAGER_CLASS_NAME = "weblogic.transaction.ClientTransactionManager"; - - private static final String TRANSACTION_CLASS_NAME = "weblogic.transaction.Transaction"; - - private static final String TRANSACTION_HELPER_CLASS_NAME = "weblogic.transaction.TransactionHelper"; - - private static final String ISOLATION_LEVEL_KEY = "ISOLATION LEVEL"; - - - private boolean weblogicUserTransactionAvailable; - - @Nullable - private Method beginWithNameMethod; - - @Nullable - private Method beginWithNameAndTimeoutMethod; - - private boolean weblogicTransactionManagerAvailable; - - @Nullable - private Method forceResumeMethod; - - @Nullable - private Method setPropertyMethod; - - @Nullable - private Object transactionHelper; - - - @Override - public void afterPropertiesSet() throws TransactionSystemException { - super.afterPropertiesSet(); - loadWebLogicTransactionClasses(); - } - - @Override - @Nullable - protected UserTransaction retrieveUserTransaction() throws TransactionSystemException { - Object helper = loadWebLogicTransactionHelper(); - try { - logger.trace("Retrieving JTA UserTransaction from WebLogic TransactionHelper"); - Method getUserTransactionMethod = helper.getClass().getMethod("getUserTransaction"); - return (UserTransaction) getUserTransactionMethod.invoke(this.transactionHelper); - } - catch (InvocationTargetException ex) { - throw new TransactionSystemException( - "WebLogic's TransactionHelper.getUserTransaction() method failed", ex.getTargetException()); - } - catch (Exception ex) { - throw new TransactionSystemException( - "Could not invoke WebLogic's TransactionHelper.getUserTransaction() method", ex); - } - } - - @Override - @Nullable - protected TransactionManager retrieveTransactionManager() throws TransactionSystemException { - Object helper = loadWebLogicTransactionHelper(); - try { - logger.trace("Retrieving JTA TransactionManager from WebLogic TransactionHelper"); - Method getTransactionManagerMethod = helper.getClass().getMethod("getTransactionManager"); - return (TransactionManager) getTransactionManagerMethod.invoke(this.transactionHelper); - } - catch (InvocationTargetException ex) { - throw new TransactionSystemException( - "WebLogic's TransactionHelper.getTransactionManager() method failed", ex.getTargetException()); - } - catch (Exception ex) { - throw new TransactionSystemException( - "Could not invoke WebLogic's TransactionHelper.getTransactionManager() method", ex); - } - } - - private Object loadWebLogicTransactionHelper() throws TransactionSystemException { - Object helper = this.transactionHelper; - if (helper == null) { - try { - Class transactionHelperClass = getClass().getClassLoader().loadClass(TRANSACTION_HELPER_CLASS_NAME); - Method getTransactionHelperMethod = transactionHelperClass.getMethod("getTransactionHelper"); - helper = getTransactionHelperMethod.invoke(null); - this.transactionHelper = helper; - logger.trace("WebLogic TransactionHelper found"); - } - catch (InvocationTargetException ex) { - throw new TransactionSystemException( - "WebLogic's TransactionHelper.getTransactionHelper() method failed", ex.getTargetException()); - } - catch (Exception ex) { - throw new TransactionSystemException( - "Could not initialize WebLogicJtaTransactionManager because WebLogic API classes are not available", - ex); - } - } - return helper; - } - - private void loadWebLogicTransactionClasses() throws TransactionSystemException { - try { - Class userTransactionClass = getClass().getClassLoader().loadClass(USER_TRANSACTION_CLASS_NAME); - this.weblogicUserTransactionAvailable = userTransactionClass.isInstance(getUserTransaction()); - if (this.weblogicUserTransactionAvailable) { - this.beginWithNameMethod = userTransactionClass.getMethod("begin", String.class); - this.beginWithNameAndTimeoutMethod = userTransactionClass.getMethod("begin", String.class, int.class); - logger.debug("Support for WebLogic transaction names available"); - } - else { - logger.debug("Support for WebLogic transaction names not available"); - } - - // Obtain WebLogic ClientTransactionManager interface. - Class transactionManagerClass = - getClass().getClassLoader().loadClass(CLIENT_TRANSACTION_MANAGER_CLASS_NAME); - logger.trace("WebLogic ClientTransactionManager found"); - - this.weblogicTransactionManagerAvailable = transactionManagerClass.isInstance(getTransactionManager()); - if (this.weblogicTransactionManagerAvailable) { - Class transactionClass = getClass().getClassLoader().loadClass(TRANSACTION_CLASS_NAME); - this.forceResumeMethod = transactionManagerClass.getMethod("forceResume", Transaction.class); - this.setPropertyMethod = transactionClass.getMethod("setProperty", String.class, Serializable.class); - logger.debug("Support for WebLogic forceResume available"); - } - else { - logger.debug("Support for WebLogic forceResume not available"); - } - } - catch (Exception ex) { - throw new TransactionSystemException( - "Could not initialize WebLogicJtaTransactionManager because WebLogic API classes are not available", - ex); - } - } - - private TransactionManager obtainTransactionManager() { - TransactionManager tm = getTransactionManager(); - Assert.state(tm != null, "No TransactionManager set"); - return tm; - } - - - @Override - protected void doJtaBegin(JtaTransactionObject txObject, TransactionDefinition definition) - throws NotSupportedException, SystemException { - - int timeout = determineTimeout(definition); - - // Apply transaction name (if any) to WebLogic transaction. - if (this.weblogicUserTransactionAvailable && definition.getName() != null) { - try { - if (timeout > TransactionDefinition.TIMEOUT_DEFAULT) { - /* - weblogic.transaction.UserTransaction wut = (weblogic.transaction.UserTransaction) ut; - wut.begin(definition.getName(), timeout); - */ - Assert.state(this.beginWithNameAndTimeoutMethod != null, "WebLogic JTA API not initialized"); - this.beginWithNameAndTimeoutMethod.invoke(txObject.getUserTransaction(), definition.getName(), timeout); - } - else { - /* - weblogic.transaction.UserTransaction wut = (weblogic.transaction.UserTransaction) ut; - wut.begin(definition.getName()); - */ - Assert.state(this.beginWithNameMethod != null, "WebLogic JTA API not initialized"); - this.beginWithNameMethod.invoke(txObject.getUserTransaction(), definition.getName()); - } - } - catch (InvocationTargetException ex) { - throw new TransactionSystemException( - "WebLogic's UserTransaction.begin() method failed", ex.getTargetException()); - } - catch (Exception ex) { - throw new TransactionSystemException( - "Could not invoke WebLogic's UserTransaction.begin() method", ex); - } - } - else { - // No WebLogic UserTransaction available or no transaction name specified - // -> standard JTA begin call. - applyTimeout(txObject, timeout); - txObject.getUserTransaction().begin(); - } - - // Specify isolation level, if any, through corresponding WebLogic transaction property. - if (this.weblogicTransactionManagerAvailable) { - if (definition.getIsolationLevel() != TransactionDefinition.ISOLATION_DEFAULT) { - try { - Transaction tx = obtainTransactionManager().getTransaction(); - Integer isolationLevel = definition.getIsolationLevel(); - /* - weblogic.transaction.Transaction wtx = (weblogic.transaction.Transaction) tx; - wtx.setProperty(ISOLATION_LEVEL_KEY, isolationLevel); - */ - Assert.state(this.setPropertyMethod != null, "WebLogic JTA API not initialized"); - this.setPropertyMethod.invoke(tx, ISOLATION_LEVEL_KEY, isolationLevel); - } - catch (InvocationTargetException ex) { - throw new TransactionSystemException( - "WebLogic's Transaction.setProperty(String, Serializable) method failed", ex.getTargetException()); - } - catch (Exception ex) { - throw new TransactionSystemException( - "Could not invoke WebLogic's Transaction.setProperty(String, Serializable) method", ex); - } - } - } - else { - applyIsolationLevel(txObject, definition.getIsolationLevel()); - } - } - - @Override - protected void doJtaResume(@Nullable JtaTransactionObject txObject, Object suspendedTransaction) - throws InvalidTransactionException, SystemException { - - try { - obtainTransactionManager().resume((Transaction) suspendedTransaction); - } - catch (InvalidTransactionException ex) { - if (!this.weblogicTransactionManagerAvailable) { - throw ex; - } - - if (logger.isDebugEnabled()) { - logger.debug("Standard JTA resume threw InvalidTransactionException: " + ex.getMessage() + - " - trying WebLogic JTA forceResume"); - } - /* - weblogic.transaction.TransactionManager wtm = - (weblogic.transaction.TransactionManager) getTransactionManager(); - wtm.forceResume(suspendedTransaction); - */ - try { - Assert.state(this.forceResumeMethod != null, "WebLogic JTA API not initialized"); - this.forceResumeMethod.invoke(getTransactionManager(), suspendedTransaction); - } - catch (InvocationTargetException ex2) { - throw new TransactionSystemException( - "WebLogic's TransactionManager.forceResume(Transaction) method failed", ex2.getTargetException()); - } - catch (Exception ex2) { - throw new TransactionSystemException( - "Could not access WebLogic's TransactionManager.forceResume(Transaction) method", ex2); - } - } - } - - @Override - public Transaction createTransaction(@Nullable String name, int timeout) throws NotSupportedException, SystemException { - if (this.weblogicUserTransactionAvailable && name != null) { - try { - if (timeout >= 0) { - Assert.state(this.beginWithNameAndTimeoutMethod != null, "WebLogic JTA API not initialized"); - this.beginWithNameAndTimeoutMethod.invoke(getUserTransaction(), name, timeout); - } - else { - Assert.state(this.beginWithNameMethod != null, "WebLogic JTA API not initialized"); - this.beginWithNameMethod.invoke(getUserTransaction(), name); - } - } - catch (InvocationTargetException ex) { - if (ex.getTargetException() instanceof NotSupportedException) { - throw (NotSupportedException) ex.getTargetException(); - } - else if (ex.getTargetException() instanceof SystemException) { - throw (SystemException) ex.getTargetException(); - } - else if (ex.getTargetException() instanceof RuntimeException) { - throw (RuntimeException) ex.getTargetException(); - } - else { - throw new SystemException( - "WebLogic's begin() method failed with an unexpected error: " + ex.getTargetException()); - } - } - catch (Exception ex) { - throw new SystemException("Could not invoke WebLogic's UserTransaction.begin() method: " + ex); - } - return new ManagedTransactionAdapter(obtainTransactionManager()); - } - - else { - // No name specified - standard JTA is sufficient. - return super.createTransaction(name, timeout); - } - } - -} diff --git a/spring-tx/src/main/java/org/springframework/transaction/jta/WebSphereUowTransactionManager.java b/spring-tx/src/main/java/org/springframework/transaction/jta/WebSphereUowTransactionManager.java deleted file mode 100644 index 256cc965295..00000000000 --- a/spring-tx/src/main/java/org/springframework/transaction/jta/WebSphereUowTransactionManager.java +++ /dev/null @@ -1,423 +0,0 @@ -/* - * Copyright 2002-2020 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.transaction.jta; - -import java.util.List; - -import javax.naming.NamingException; - -import com.ibm.websphere.uow.UOWSynchronizationRegistry; -import com.ibm.wsspi.uow.UOWAction; -import com.ibm.wsspi.uow.UOWActionException; -import com.ibm.wsspi.uow.UOWException; -import com.ibm.wsspi.uow.UOWManager; -import com.ibm.wsspi.uow.UOWManagerFactory; - -import org.springframework.lang.Nullable; -import org.springframework.transaction.IllegalTransactionStateException; -import org.springframework.transaction.InvalidTimeoutException; -import org.springframework.transaction.NestedTransactionNotSupportedException; -import org.springframework.transaction.TransactionDefinition; -import org.springframework.transaction.TransactionException; -import org.springframework.transaction.TransactionSystemException; -import org.springframework.transaction.support.CallbackPreferringPlatformTransactionManager; -import org.springframework.transaction.support.DefaultTransactionStatus; -import org.springframework.transaction.support.SmartTransactionObject; -import org.springframework.transaction.support.TransactionCallback; -import org.springframework.transaction.support.TransactionSynchronization; -import org.springframework.transaction.support.TransactionSynchronizationManager; -import org.springframework.transaction.support.TransactionSynchronizationUtils; -import org.springframework.util.Assert; -import org.springframework.util.ReflectionUtils; - -/** - * WebSphere-specific PlatformTransactionManager implementation that delegates - * to a {@link com.ibm.wsspi.uow.UOWManager} instance, obtained from WebSphere's - * JNDI environment. This allows Spring to leverage the full power of the WebSphere - * transaction coordinator, including transaction suspension, in a manner that is - * perfectly compliant with officially supported WebSphere API. - * - *

    The {@link CallbackPreferringPlatformTransactionManager} interface - * implemented by this class indicates that callers should preferably pass in - * a {@link TransactionCallback} through the {@link #execute} method, which - * will be handled through the callback-based WebSphere UOWManager API instead - * of through standard JTA API (UserTransaction / TransactionManager). This avoids - * the use of the non-public {@code javax.transaction.TransactionManager} - * API on WebSphere, staying within supported WebSphere API boundaries. - * - *

    This transaction manager implementation derives from Spring's standard - * {@link JtaTransactionManager}, inheriting the capability to support programmatic - * transaction demarcation via {@code getTransaction} / {@code commit} / - * {@code rollback} calls through a JTA UserTransaction handle, for callers - * that do not use the TransactionCallback-based {@link #execute} method. However, - * transaction suspension is not supported in this {@code getTransaction} - * style (unless you explicitly specify a {@link #setTransactionManager} reference, - * despite the official WebSphere recommendations). Use the {@link #execute} style - * for any code that might require transaction suspension. - * - *

    This transaction manager is compatible with WebSphere 6.1.0.9 and above. - * The default JNDI location for the UOWManager is "java:comp/websphere/UOWManager". - * If the location happens to differ according to your WebSphere documentation, - * simply specify the actual location through this transaction manager's - * "uowManagerName" bean property. - * - *

    NOTE: This JtaTransactionManager is intended to refine specific transaction - * demarcation behavior on Spring's side. It will happily co-exist with independently - * configured WebSphere transaction strategies in your persistence provider, with no - * need to specifically connect those setups in any way. - * - * @author Juergen Hoeller - * @since 2.5 - * @see #setUowManager - * @see #setUowManagerName - * @see com.ibm.wsspi.uow.UOWManager - */ -@SuppressWarnings("serial") -public class WebSphereUowTransactionManager extends JtaTransactionManager - implements CallbackPreferringPlatformTransactionManager { - - /** - * Default JNDI location for the WebSphere UOWManager. - * @see #setUowManagerName - */ - public static final String DEFAULT_UOW_MANAGER_NAME = "java:comp/websphere/UOWManager"; - - - @Nullable - private UOWManager uowManager; - - @Nullable - private String uowManagerName; - - - /** - * Create a new WebSphereUowTransactionManager. - */ - public WebSphereUowTransactionManager() { - setAutodetectTransactionManager(false); - } - - /** - * Create a new WebSphereUowTransactionManager for the given UOWManager. - * @param uowManager the WebSphere UOWManager to use as direct reference - */ - public WebSphereUowTransactionManager(UOWManager uowManager) { - this(); - this.uowManager = uowManager; - } - - - /** - * Set the WebSphere UOWManager to use as direct reference. - *

    Typically just used for test setups; in a Java EE environment, - * the UOWManager will always be fetched from JNDI. - * @see #setUserTransactionName - */ - public void setUowManager(UOWManager uowManager) { - this.uowManager = uowManager; - } - - /** - * Set the JNDI name of the WebSphere UOWManager. - * The default "java:comp/websphere/UOWManager" is used if not set. - * @see #DEFAULT_USER_TRANSACTION_NAME - * @see #setUowManager - */ - public void setUowManagerName(String uowManagerName) { - this.uowManagerName = uowManagerName; - } - - - @Override - public void afterPropertiesSet() throws TransactionSystemException { - initUserTransactionAndTransactionManager(); - - // Fetch UOWManager handle from JNDI, if necessary. - if (this.uowManager == null) { - if (this.uowManagerName != null) { - this.uowManager = lookupUowManager(this.uowManagerName); - } - else { - this.uowManager = lookupDefaultUowManager(); - } - } - } - - /** - * Look up the WebSphere UOWManager in JNDI via the configured name. - * @param uowManagerName the JNDI name of the UOWManager - * @return the UOWManager object - * @throws TransactionSystemException if the JNDI lookup failed - * @see #setJndiTemplate - * @see #setUowManagerName - */ - protected UOWManager lookupUowManager(String uowManagerName) throws TransactionSystemException { - try { - if (logger.isDebugEnabled()) { - logger.debug("Retrieving WebSphere UOWManager from JNDI location [" + uowManagerName + "]"); - } - return getJndiTemplate().lookup(uowManagerName, UOWManager.class); - } - catch (NamingException ex) { - throw new TransactionSystemException( - "WebSphere UOWManager is not available at JNDI location [" + uowManagerName + "]", ex); - } - } - - /** - * Obtain the WebSphere UOWManager from the default JNDI location - * "java:comp/websphere/UOWManager". - * @return the UOWManager object - * @throws TransactionSystemException if the JNDI lookup failed - * @see #setJndiTemplate - */ - protected UOWManager lookupDefaultUowManager() throws TransactionSystemException { - try { - logger.debug("Retrieving WebSphere UOWManager from default JNDI location [" + DEFAULT_UOW_MANAGER_NAME + "]"); - return getJndiTemplate().lookup(DEFAULT_UOW_MANAGER_NAME, UOWManager.class); - } - catch (NamingException ex) { - logger.debug("WebSphere UOWManager is not available at default JNDI location [" + - DEFAULT_UOW_MANAGER_NAME + "] - falling back to UOWManagerFactory lookup"); - return UOWManagerFactory.getUOWManager(); - } - } - - private UOWManager obtainUOWManager() { - Assert.state(this.uowManager != null, "No UOWManager set"); - return this.uowManager; - } - - - /** - * Registers the synchronizations as interposed JTA Synchronization on the UOWManager. - */ - @Override - protected void doRegisterAfterCompletionWithJtaTransaction( - JtaTransactionObject txObject, List synchronizations) { - - obtainUOWManager().registerInterposedSynchronization(new JtaAfterCompletionSynchronization(synchronizations)); - } - - /** - * Returns {@code true} since WebSphere ResourceAdapters (as exposed in JNDI) - * implicitly perform transaction enlistment if the MessageEndpointFactory's - * {@code isDeliveryTransacted} method returns {@code true}. - * In that case we'll simply skip the {@link #createTransaction} call. - * @see javax.resource.spi.endpoint.MessageEndpointFactory#isDeliveryTransacted - * @see org.springframework.jca.endpoint.AbstractMessageEndpointFactory - * @see TransactionFactory#createTransaction - */ - @Override - public boolean supportsResourceAdapterManagedTransactions() { - return true; - } - - - @Override - @Nullable - public T execute(@Nullable TransactionDefinition definition, TransactionCallback callback) - throws TransactionException { - - // Use defaults if no transaction definition given. - TransactionDefinition def = (definition != null ? definition : TransactionDefinition.withDefaults()); - - if (def.getTimeout() < TransactionDefinition.TIMEOUT_DEFAULT) { - throw new InvalidTimeoutException("Invalid transaction timeout", def.getTimeout()); - } - - UOWManager uowManager = obtainUOWManager(); - int pb = def.getPropagationBehavior(); - boolean existingTx = (uowManager.getUOWStatus() != UOWSynchronizationRegistry.UOW_STATUS_NONE && - uowManager.getUOWType() != UOWSynchronizationRegistry.UOW_TYPE_LOCAL_TRANSACTION); - - int uowType = UOWSynchronizationRegistry.UOW_TYPE_GLOBAL_TRANSACTION; - boolean joinTx = false; - boolean newSynch = false; - - if (existingTx) { - if (pb == TransactionDefinition.PROPAGATION_NEVER) { - throw new IllegalTransactionStateException( - "Transaction propagation 'never' but existing transaction found"); - } - if (pb == TransactionDefinition.PROPAGATION_NESTED) { - throw new NestedTransactionNotSupportedException( - "Transaction propagation 'nested' not supported for WebSphere UOW transactions"); - } - if (pb == TransactionDefinition.PROPAGATION_SUPPORTS || - pb == TransactionDefinition.PROPAGATION_REQUIRED || - pb == TransactionDefinition.PROPAGATION_MANDATORY) { - joinTx = true; - newSynch = (getTransactionSynchronization() != SYNCHRONIZATION_NEVER); - } - else if (pb == TransactionDefinition.PROPAGATION_NOT_SUPPORTED) { - uowType = UOWSynchronizationRegistry.UOW_TYPE_LOCAL_TRANSACTION; - newSynch = (getTransactionSynchronization() == SYNCHRONIZATION_ALWAYS); - } - else { - newSynch = (getTransactionSynchronization() != SYNCHRONIZATION_NEVER); - } - } - else { - if (pb == TransactionDefinition.PROPAGATION_MANDATORY) { - throw new IllegalTransactionStateException( - "Transaction propagation 'mandatory' but no existing transaction found"); - } - if (pb == TransactionDefinition.PROPAGATION_SUPPORTS || - pb == TransactionDefinition.PROPAGATION_NOT_SUPPORTED || - pb == TransactionDefinition.PROPAGATION_NEVER) { - uowType = UOWSynchronizationRegistry.UOW_TYPE_LOCAL_TRANSACTION; - newSynch = (getTransactionSynchronization() == SYNCHRONIZATION_ALWAYS); - } - else { - newSynch = (getTransactionSynchronization() != SYNCHRONIZATION_NEVER); - } - } - - boolean debug = logger.isDebugEnabled(); - if (debug) { - logger.debug("Creating new transaction with name [" + def.getName() + "]: " + def); - } - SuspendedResourcesHolder suspendedResources = (!joinTx ? suspend(null) : null); - UOWActionAdapter action = null; - try { - boolean actualTransaction = (uowType == UOWManager.UOW_TYPE_GLOBAL_TRANSACTION); - if (actualTransaction && def.getTimeout() > TransactionDefinition.TIMEOUT_DEFAULT) { - uowManager.setUOWTimeout(uowType, def.getTimeout()); - } - if (debug) { - logger.debug("Invoking WebSphere UOW action: type=" + uowType + ", join=" + joinTx); - } - action = new UOWActionAdapter<>(def, callback, actualTransaction, !joinTx, newSynch, debug); - uowManager.runUnderUOW(uowType, joinTx, action); - if (debug) { - logger.debug("Returned from WebSphere UOW action: type=" + uowType + ", join=" + joinTx); - } - return action.getResult(); - } - catch (UOWException | UOWActionException ex) { - TransactionSystemException tse = - new TransactionSystemException("UOWManager transaction processing failed", ex); - Throwable appEx = action.getException(); - if (appEx != null) { - logger.error("Application exception overridden by rollback exception", appEx); - tse.initApplicationException(appEx); - } - throw tse; - } - finally { - if (suspendedResources != null) { - resume(null, suspendedResources); - } - } - } - - - /** - * Adapter that executes the given Spring transaction within the WebSphere UOWAction shape. - */ - private class UOWActionAdapter implements UOWAction, SmartTransactionObject { - - private final TransactionDefinition definition; - - private final TransactionCallback callback; - - private final boolean actualTransaction; - - private final boolean newTransaction; - - private final boolean newSynchronization; - - private boolean debug; - - @Nullable - private T result; - - @Nullable - private Throwable exception; - - public UOWActionAdapter(TransactionDefinition definition, TransactionCallback callback, - boolean actualTransaction, boolean newTransaction, boolean newSynchronization, boolean debug) { - - this.definition = definition; - this.callback = callback; - this.actualTransaction = actualTransaction; - this.newTransaction = newTransaction; - this.newSynchronization = newSynchronization; - this.debug = debug; - } - - @Override - public void run() { - UOWManager uowManager = obtainUOWManager(); - DefaultTransactionStatus status = prepareTransactionStatus( - this.definition, (this.actualTransaction ? this : null), - this.newTransaction, this.newSynchronization, this.debug, null); - try { - this.result = this.callback.doInTransaction(status); - triggerBeforeCommit(status); - } - catch (Throwable ex) { - this.exception = ex; - if (status.isDebug()) { - logger.debug("Rolling back on application exception from transaction callback", ex); - } - uowManager.setRollbackOnly(); - } - finally { - if (status.isLocalRollbackOnly()) { - if (status.isDebug()) { - logger.debug("Transaction callback has explicitly requested rollback"); - } - uowManager.setRollbackOnly(); - } - triggerBeforeCompletion(status); - if (status.isNewSynchronization()) { - List synchronizations = TransactionSynchronizationManager.getSynchronizations(); - TransactionSynchronizationManager.clear(); - if (!synchronizations.isEmpty()) { - uowManager.registerInterposedSynchronization(new JtaAfterCompletionSynchronization(synchronizations)); - } - } - } - } - - @Nullable - public T getResult() { - if (this.exception != null) { - ReflectionUtils.rethrowRuntimeException(this.exception); - } - return this.result; - } - - @Nullable - public Throwable getException() { - return this.exception; - } - - @Override - public boolean isRollbackOnly() { - return obtainUOWManager().getRollbackOnly(); - } - - @Override - public void flush() { - TransactionSynchronizationUtils.triggerFlush(); - } - } - -} diff --git a/spring-tx/src/main/java/org/springframework/transaction/support/AbstractPlatformTransactionManager.java b/spring-tx/src/main/java/org/springframework/transaction/support/AbstractPlatformTransactionManager.java index 74dc7a3d5a1..0d21f4c8939 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/support/AbstractPlatformTransactionManager.java +++ b/spring-tx/src/main/java/org/springframework/transaction/support/AbstractPlatformTransactionManager.java @@ -1152,8 +1152,8 @@ public abstract class AbstractPlatformTransactionManager implements PlatformTran * @see DefaultTransactionStatus#isLocalRollbackOnly() * @see org.springframework.transaction.TransactionStatus#setRollbackOnly() * @see org.springframework.transaction.UnexpectedRollbackException - * @see javax.transaction.UserTransaction#commit() - * @see javax.transaction.RollbackException + * @see jakarta.transaction.UserTransaction#commit() + * @see jakarta.transaction.RollbackException */ protected boolean shouldCommitOnGlobalRollbackOnly() { return false; diff --git a/spring-tx/src/main/java/org/springframework/transaction/support/SmartTransactionObject.java b/spring-tx/src/main/java/org/springframework/transaction/support/SmartTransactionObject.java index 923e0048045..90d0662c10d 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/support/SmartTransactionObject.java +++ b/spring-tx/src/main/java/org/springframework/transaction/support/SmartTransactionObject.java @@ -36,8 +36,8 @@ public interface SmartTransactionObject extends Flushable { /** * Return whether the transaction is internally marked as rollback-only. * Can, for example, check the JTA UserTransaction. - * @see javax.transaction.UserTransaction#getStatus - * @see javax.transaction.Status#STATUS_MARKED_ROLLBACK + * @see jakarta.transaction.UserTransaction#getStatus + * @see jakarta.transaction.Status#STATUS_MARKED_ROLLBACK */ boolean isRollbackOnly(); diff --git a/spring-tx/src/test/java/org/springframework/dao/annotation/PersistenceExceptionTranslationAdvisorTests.java b/spring-tx/src/test/java/org/springframework/dao/annotation/PersistenceExceptionTranslationAdvisorTests.java index dff65b71ed1..c052cea1463 100644 --- a/spring-tx/src/test/java/org/springframework/dao/annotation/PersistenceExceptionTranslationAdvisorTests.java +++ b/spring-tx/src/test/java/org/springframework/dao/annotation/PersistenceExceptionTranslationAdvisorTests.java @@ -21,8 +21,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import javax.persistence.PersistenceException; - +import jakarta.persistence.PersistenceException; import org.junit.jupiter.api.Test; import org.springframework.aop.framework.ProxyFactory; diff --git a/spring-tx/src/test/java/org/springframework/dao/annotation/PersistenceExceptionTranslationPostProcessorTests.java b/spring-tx/src/test/java/org/springframework/dao/annotation/PersistenceExceptionTranslationPostProcessorTests.java index a0955948113..46e125464da 100644 --- a/spring-tx/src/test/java/org/springframework/dao/annotation/PersistenceExceptionTranslationPostProcessorTests.java +++ b/spring-tx/src/test/java/org/springframework/dao/annotation/PersistenceExceptionTranslationPostProcessorTests.java @@ -16,8 +16,7 @@ package org.springframework.dao.annotation; -import javax.persistence.PersistenceException; - +import jakarta.persistence.PersistenceException; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; diff --git a/spring-tx/src/test/java/org/springframework/jca/cci/CciLocalTransactionTests.java b/spring-tx/src/test/java/org/springframework/jca/cci/CciLocalTransactionTests.java deleted file mode 100644 index d45b326c090..00000000000 --- a/spring-tx/src/test/java/org/springframework/jca/cci/CciLocalTransactionTests.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright 2002-2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.cci; - -import javax.resource.ResourceException; -import javax.resource.cci.Connection; -import javax.resource.cci.ConnectionFactory; -import javax.resource.cci.Interaction; -import javax.resource.cci.InteractionSpec; -import javax.resource.cci.LocalTransaction; -import javax.resource.cci.Record; - -import org.junit.jupiter.api.Test; - -import org.springframework.dao.DataRetrievalFailureException; -import org.springframework.jca.cci.connection.CciLocalTransactionManager; -import org.springframework.jca.cci.core.CciTemplate; -import org.springframework.transaction.TransactionStatus; -import org.springframework.transaction.support.TransactionCallback; -import org.springframework.transaction.support.TransactionCallbackWithoutResult; -import org.springframework.transaction.support.TransactionSynchronizationManager; -import org.springframework.transaction.support.TransactionTemplate; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.BDDMockito.given; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; - -/** - * @author Thierry Templier - * @author Chris Beams - */ -@Deprecated -public class CciLocalTransactionTests { - - /** - * Test if a transaction ( begin / commit ) is executed on the - * LocalTransaction when CciLocalTransactionManager is specified as - * transaction manager. - */ - @Test - public void testLocalTransactionCommit() throws ResourceException { - final ConnectionFactory connectionFactory = mock(ConnectionFactory.class); - Connection connection = mock(Connection.class); - Interaction interaction = mock(Interaction.class); - LocalTransaction localTransaction = mock(LocalTransaction.class); - final Record record = mock(Record.class); - final InteractionSpec interactionSpec = mock(InteractionSpec.class); - - given(connectionFactory.getConnection()).willReturn(connection); - given(connection.getLocalTransaction()).willReturn(localTransaction); - given(connection.createInteraction()).willReturn(interaction); - given(interaction.execute(interactionSpec, record, record)).willReturn(true); - given(connection.getLocalTransaction()).willReturn(localTransaction); - - CciLocalTransactionManager tm = new CciLocalTransactionManager(); - tm.setConnectionFactory(connectionFactory); - TransactionTemplate tt = new TransactionTemplate(tm); - - tt.execute(new TransactionCallbackWithoutResult() { - @Override - protected void doInTransactionWithoutResult(TransactionStatus status) { - assertThat(TransactionSynchronizationManager.hasResource(connectionFactory)).as("Has thread connection").isTrue(); - CciTemplate ct = new CciTemplate(connectionFactory); - ct.execute(interactionSpec, record, record); - } - }); - - verify(localTransaction).begin(); - verify(interaction).close(); - verify(localTransaction).commit(); - verify(connection).close(); - } - - /** - * Test if a transaction ( begin / rollback ) is executed on the - * LocalTransaction when CciLocalTransactionManager is specified as - * transaction manager and a non-checked exception is thrown. - */ - @Test - public void testLocalTransactionRollback() throws ResourceException { - final ConnectionFactory connectionFactory = mock(ConnectionFactory.class); - Connection connection = mock(Connection.class); - Interaction interaction = mock(Interaction.class); - LocalTransaction localTransaction = mock(LocalTransaction.class); - final Record record = mock(Record.class); - final InteractionSpec interactionSpec = mock(InteractionSpec.class); - - given(connectionFactory.getConnection()).willReturn(connection); - given(connection.getLocalTransaction()).willReturn(localTransaction); - given(connection.createInteraction()).willReturn(interaction); - given(interaction.execute(interactionSpec, record, record)).willReturn(true); - given(connection.getLocalTransaction()).willReturn(localTransaction); - - CciLocalTransactionManager tm = new CciLocalTransactionManager(); - tm.setConnectionFactory(connectionFactory); - TransactionTemplate tt = new TransactionTemplate(tm); - - try { - tt.execute(new TransactionCallback() { - @Override - public Void doInTransaction(TransactionStatus status) { - assertThat(TransactionSynchronizationManager.hasResource(connectionFactory)).as("Has thread connection").isTrue(); - CciTemplate ct = new CciTemplate(connectionFactory); - ct.execute(interactionSpec, record, record); - throw new DataRetrievalFailureException("error"); - } - }); - } - catch (Exception ex) { - } - - verify(localTransaction).begin(); - verify(interaction).close(); - verify(localTransaction).rollback(); - verify(connection).close(); - } -} diff --git a/spring-tx/src/test/java/org/springframework/jca/cci/CciTemplateTests.java b/spring-tx/src/test/java/org/springframework/jca/cci/CciTemplateTests.java deleted file mode 100644 index a67028f162a..00000000000 --- a/spring-tx/src/test/java/org/springframework/jca/cci/CciTemplateTests.java +++ /dev/null @@ -1,545 +0,0 @@ -/* - * Copyright 2002-2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.cci; - -import java.sql.SQLException; - -import javax.resource.NotSupportedException; -import javax.resource.ResourceException; -import javax.resource.cci.Connection; -import javax.resource.cci.ConnectionFactory; -import javax.resource.cci.ConnectionSpec; -import javax.resource.cci.IndexedRecord; -import javax.resource.cci.Interaction; -import javax.resource.cci.InteractionSpec; -import javax.resource.cci.MappedRecord; -import javax.resource.cci.Record; -import javax.resource.cci.RecordFactory; -import javax.resource.cci.ResultSet; - -import org.junit.jupiter.api.Test; - -import org.springframework.jca.cci.connection.ConnectionSpecConnectionFactoryAdapter; -import org.springframework.jca.cci.connection.NotSupportedRecordFactory; -import org.springframework.jca.cci.core.CciTemplate; -import org.springframework.jca.cci.core.ConnectionCallback; -import org.springframework.jca.cci.core.InteractionCallback; -import org.springframework.jca.cci.core.RecordCreator; -import org.springframework.jca.cci.core.RecordExtractor; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.BDDMockito.given; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; - -/** - * @author Thierry Templier - * @author Juergen Hoeller - * @author Chris Beams - */ -@Deprecated -public class CciTemplateTests { - - @Test - public void testCreateIndexedRecord() throws ResourceException { - ConnectionFactory connectionFactory = mock(ConnectionFactory.class); - RecordFactory recordFactory = mock(RecordFactory.class); - IndexedRecord indexedRecord = mock(IndexedRecord.class); - given(connectionFactory.getRecordFactory()).willReturn(recordFactory); - given(recordFactory.createIndexedRecord("name")).willReturn(indexedRecord); - - CciTemplate ct = new CciTemplate(connectionFactory); - ct.createIndexedRecord("name"); - - verify(recordFactory).createIndexedRecord("name"); - } - - @Test - public void testCreateMappedRecord() throws ResourceException { - ConnectionFactory connectionFactory = mock(ConnectionFactory.class); - RecordFactory recordFactory = mock(RecordFactory.class); - MappedRecord mappedRecord = mock(MappedRecord.class); - - given(connectionFactory.getRecordFactory()).willReturn(recordFactory); - given(recordFactory.createMappedRecord("name")).willReturn(mappedRecord); - - CciTemplate ct = new CciTemplate(connectionFactory); - ct.createMappedRecord("name"); - - verify(recordFactory).createMappedRecord("name"); - } - - @Test - public void testTemplateExecuteInputOutput() throws ResourceException { - ConnectionFactory connectionFactory = mock(ConnectionFactory.class); - Connection connection = mock(Connection.class); - Interaction interaction = mock(Interaction.class); - - Record inputRecord = mock(Record.class); - Record outputRecord = mock(Record.class); - - InteractionSpec interactionSpec = mock(InteractionSpec.class); - - given(connectionFactory.getConnection()).willReturn(connection); - given(connection.createInteraction()).willReturn(interaction); - given(interaction.execute(interactionSpec, inputRecord, outputRecord)).willReturn(true); - - - CciTemplate ct = new CciTemplate(connectionFactory); - ct.execute(interactionSpec, inputRecord, outputRecord); - - verify(interaction).execute(interactionSpec, inputRecord, outputRecord); - verify(interaction).close(); - verify(connection).close(); - } - - @Test - public void testTemplateExecuteWithCreatorAndRecordFactoryNotSupported() - throws ResourceException { - ConnectionFactory connectionFactory = mock(ConnectionFactory.class); - Connection connection = mock(Connection.class); - Interaction interaction = mock(Interaction.class); - - Record inputRecord = mock(Record.class); - final Record outputRecord = mock(Record.class); - - InteractionSpec interactionSpec = mock(InteractionSpec.class); - - given(connectionFactory.getConnection()).willReturn(connection); - given(connectionFactory.getRecordFactory()).willThrow(new NotSupportedException("not supported")); - given(connection.createInteraction()).willReturn(interaction); - given(interaction.execute(interactionSpec, inputRecord, outputRecord)).willReturn(true); - - CciTemplate ct = new CciTemplate(connectionFactory); - ct.setOutputRecordCreator(new RecordCreator() { - @Override - public Record createRecord(RecordFactory recordFactory) { - boolean condition = recordFactory instanceof NotSupportedRecordFactory; - assertThat(condition).isTrue(); - return outputRecord; - } - }); - ct.execute(interactionSpec, inputRecord); - - verify(interaction).execute(interactionSpec, inputRecord, outputRecord); - verify(interaction).close(); - verify(connection).close(); - } - - @Test - public void testTemplateExecuteInputTrueWithCreator2() - throws ResourceException { - ConnectionFactory connectionFactory = mock(ConnectionFactory.class); - RecordFactory recordFactory = mock(RecordFactory.class); - Connection connection = mock(Connection.class); - Interaction interaction = mock(Interaction.class); - RecordCreator creator = mock(RecordCreator.class); - - Record inputRecord = mock(Record.class); - final Record outputRecord = mock(Record.class); - - InteractionSpec interactionSpec = mock(InteractionSpec.class); - - given(connectionFactory.getConnection()).willReturn(connection); - given(connectionFactory.getRecordFactory()).willReturn(recordFactory); - given(connection.createInteraction()).willReturn(interaction); - given(creator.createRecord(recordFactory)).willReturn(outputRecord); - given(interaction.execute(interactionSpec, inputRecord, outputRecord)).willReturn(true); - - CciTemplate ct = new CciTemplate(connectionFactory); - ct.setOutputRecordCreator(creator); - ct.execute(interactionSpec, inputRecord); - - verify(interaction).execute(interactionSpec, inputRecord, outputRecord); - verify(interaction).close(); - verify(connection).close(); - } - - @Test - public void testTemplateExecuteInputFalse() throws ResourceException { - ConnectionFactory connectionFactory = mock(ConnectionFactory.class); - Connection connection = mock(Connection.class); - Interaction interaction = mock(Interaction.class); - - Record inputRecord = mock(Record.class); - Record outputRecord = mock(Record.class); - - InteractionSpec interactionSpec = mock(InteractionSpec.class); - - given(connectionFactory.getConnection()).willReturn(connection); - given(connection.createInteraction()).willReturn(interaction); - given(interaction.execute(interactionSpec, inputRecord)).willReturn(outputRecord); - - CciTemplate ct = new CciTemplate(connectionFactory); - ct.execute(interactionSpec, inputRecord); - - verify(interaction).execute(interactionSpec, inputRecord); - verify(interaction).close(); - verify(connection).close(); - } - - @SuppressWarnings("unchecked") - @Test - public void testTemplateExecuteInputExtractorTrueWithCreator() - throws ResourceException, SQLException { - ConnectionFactory connectionFactory = mock(ConnectionFactory.class); - RecordFactory recordFactory = mock(RecordFactory.class); - Connection connection = mock(Connection.class); - Interaction interaction = mock(Interaction.class); - RecordExtractor extractor = mock(RecordExtractor.class); - RecordCreator creator = mock(RecordCreator.class); - - Record inputRecord = mock(Record.class); - Record outputRecord = mock(Record.class); - - InteractionSpec interactionSpec = mock(InteractionSpec.class); - - given(connectionFactory.getConnection()).willReturn(connection); - given(connection.createInteraction()).willReturn(interaction); - given(connectionFactory.getRecordFactory()).willReturn(recordFactory); - given(creator.createRecord(recordFactory)).willReturn(outputRecord); - given(interaction.execute(interactionSpec, inputRecord, outputRecord)).willReturn(true); - given(extractor.extractData(outputRecord)).willReturn(new Object()); - - CciTemplate ct = new CciTemplate(connectionFactory); - ct.setOutputRecordCreator(creator); - ct.execute(interactionSpec, inputRecord, extractor); - - verify(extractor).extractData(outputRecord); - verify(interaction).close(); - verify(connection).close(); - } - - @SuppressWarnings("unchecked") - @Test - public void testTemplateExecuteInputExtractorFalse() - throws ResourceException, SQLException { - ConnectionFactory connectionFactory = mock(ConnectionFactory.class); - Connection connection = mock(Connection.class); - Interaction interaction = mock(Interaction.class); - RecordExtractor extractor = mock(RecordExtractor.class); - - Record inputRecord = mock(Record.class); - Record outputRecord = mock(Record.class); - - InteractionSpec interactionSpec = mock(InteractionSpec.class); - - given(connectionFactory.getConnection()).willReturn(connection); - given(connection.createInteraction()).willReturn(interaction); - given(interaction.execute(interactionSpec, inputRecord)).willReturn(outputRecord); - given(extractor.extractData(outputRecord)).willReturn(new Object()); - - CciTemplate ct = new CciTemplate(connectionFactory); - ct.execute(interactionSpec, inputRecord, extractor); - - verify(extractor).extractData(outputRecord); - verify(interaction).close(); - verify(connection).close(); - } - - @Test - public void testTemplateExecuteInputGeneratorTrueWithCreator() - throws ResourceException { - ConnectionFactory connectionFactory = mock(ConnectionFactory.class); - RecordFactory recordFactory = mock(RecordFactory.class); - Connection connection = mock(Connection.class); - Interaction interaction = mock(Interaction.class); - RecordCreator generator = mock(RecordCreator.class); - RecordCreator creator = mock(RecordCreator.class); - - Record inputRecord = mock(Record.class); - Record outputRecord = mock(Record.class); - - InteractionSpec interactionSpec = mock(InteractionSpec.class); - - given(connectionFactory.getRecordFactory()).willReturn(recordFactory); - given(generator.createRecord(recordFactory)).willReturn(inputRecord); - given(connectionFactory.getConnection()).willReturn(connection); - given(connection.createInteraction()).willReturn(interaction); - given(creator.createRecord(recordFactory)).willReturn(outputRecord); - given(connectionFactory.getRecordFactory()).willReturn(recordFactory); - given(interaction.execute(interactionSpec, inputRecord, outputRecord)).willReturn(true); - - - CciTemplate ct = new CciTemplate(connectionFactory); - ct.setOutputRecordCreator(creator); - ct.execute(interactionSpec, generator); - - verify(interaction).execute(interactionSpec, inputRecord, outputRecord); - verify(interaction).close(); - verify(connection).close(); - } - - @Test - public void testTemplateExecuteInputGeneratorFalse() - throws ResourceException { - ConnectionFactory connectionFactory = mock(ConnectionFactory.class); - RecordFactory recordFactory = mock(RecordFactory.class); - Connection connection = mock(Connection.class); - Interaction interaction = mock(Interaction.class); - RecordCreator generator = mock(RecordCreator.class); - - Record inputRecord = mock(Record.class); - Record outputRecord = mock(Record.class); - - InteractionSpec interactionSpec = mock(InteractionSpec.class); - - given(connectionFactory.getRecordFactory()).willReturn(recordFactory); - given(connectionFactory.getConnection()).willReturn(connection); - given(connection.createInteraction()).willReturn(interaction); - given(generator.createRecord(recordFactory)).willReturn(inputRecord); - given(interaction.execute(interactionSpec, inputRecord)).willReturn(outputRecord); - - CciTemplate ct = new CciTemplate(connectionFactory); - ct.execute(interactionSpec, generator); - - verify(interaction).execute(interactionSpec, inputRecord); - verify(interaction).close(); - verify(connection).close(); - } - - @SuppressWarnings("unchecked") - @Test - public void testTemplateExecuteInputGeneratorExtractorTrueWithCreator() - throws ResourceException, SQLException { - ConnectionFactory connectionFactory = mock(ConnectionFactory.class); - RecordFactory recordFactory = mock(RecordFactory.class); - Connection connection = mock(Connection.class); - Interaction interaction = mock(Interaction.class); - RecordCreator generator = mock(RecordCreator.class); - RecordExtractor extractor = mock(RecordExtractor.class); - RecordCreator creator = mock(RecordCreator.class); - - Record inputRecord = mock(Record.class); - Record outputRecord = mock(Record.class); - - Object obj = new Object(); - - InteractionSpec interactionSpec = mock(InteractionSpec.class); - - given(connectionFactory.getRecordFactory()).willReturn(recordFactory); - given(connectionFactory.getConnection()).willReturn(connection); - given(connection.createInteraction()).willReturn(interaction); - given(creator.createRecord(recordFactory)).willReturn(outputRecord); - given(connectionFactory.getRecordFactory()).willReturn(recordFactory); - given(generator.createRecord(recordFactory)).willReturn(inputRecord); - given(interaction.execute(interactionSpec, inputRecord, outputRecord)).willReturn(true); - given(extractor.extractData(outputRecord)).willReturn(obj); - - CciTemplate ct = new CciTemplate(connectionFactory); - ct.setOutputRecordCreator(creator); - assertThat(ct.execute(interactionSpec, generator, extractor)).isEqualTo(obj); - - verify(interaction).close(); - verify(connection).close(); - } - - @SuppressWarnings("unchecked") - @Test - public void testTemplateExecuteInputGeneratorExtractorFalse() - throws ResourceException, SQLException { - ConnectionFactory connectionFactory = mock(ConnectionFactory.class); - RecordFactory recordFactory = mock(RecordFactory.class); - Connection connection = mock(Connection.class); - Interaction interaction = mock(Interaction.class); - RecordCreator generator = mock(RecordCreator.class); - RecordExtractor extractor = mock(RecordExtractor.class); - - Record inputRecord = mock(Record.class); - Record outputRecord = mock(Record.class); - - InteractionSpec interactionSpec = mock(InteractionSpec.class); - - given(connectionFactory.getRecordFactory()).willReturn(recordFactory); - given(connectionFactory.getConnection()).willReturn(connection); - given(connection.createInteraction()).willReturn(interaction); - given(generator.createRecord(recordFactory)).willReturn(inputRecord); - given(interaction.execute(interactionSpec, inputRecord)).willReturn(outputRecord); - given(extractor.extractData(outputRecord)).willReturn(new Object()); - - CciTemplate ct = new CciTemplate(connectionFactory); - ct.execute(interactionSpec, generator, extractor); - - verify(extractor).extractData(outputRecord); - verify(interaction).close(); - verify(connection).close(); - } - - @Test - public void testTemplateExecuteInputOutputConnectionSpec() throws ResourceException { - ConnectionFactory connectionFactory = mock(ConnectionFactory.class); - ConnectionSpec connectionSpec = mock(ConnectionSpec.class); - Connection connection = mock(Connection.class); - Interaction interaction = mock(Interaction.class); - - Record inputRecord = mock(Record.class); - Record outputRecord = mock(Record.class); - - InteractionSpec interactionSpec = mock(InteractionSpec.class); - - given(connectionFactory.getConnection(connectionSpec)).willReturn(connection); - given(connection.createInteraction()).willReturn(interaction); - given(interaction.execute(interactionSpec, inputRecord, outputRecord)).willReturn(true); - - ConnectionSpecConnectionFactoryAdapter adapter = new ConnectionSpecConnectionFactoryAdapter(); - adapter.setTargetConnectionFactory(connectionFactory); - adapter.setConnectionSpec(connectionSpec); - CciTemplate ct = new CciTemplate(adapter); - ct.execute(interactionSpec, inputRecord, outputRecord); - - verify(interaction).execute(interactionSpec, inputRecord, outputRecord); - verify(interaction).close(); - verify(connection).close(); - } - - @SuppressWarnings("unchecked") - @Test - public void testTemplateExecuteInputOutputResultsSetFalse() - throws ResourceException, SQLException { - ConnectionFactory connectionFactory = mock(ConnectionFactory.class); - RecordFactory recordFactory = mock(RecordFactory.class); - Connection connection = mock(Connection.class); - Interaction interaction = mock(Interaction.class); - Record record = mock(Record.class); - ResultSet resultset = mock(ResultSet.class); - RecordCreator generator = mock(RecordCreator.class); - RecordExtractor extractor = mock(RecordExtractor.class); - - InteractionSpec interactionSpec = mock(InteractionSpec.class); - - given(connectionFactory.getRecordFactory()).willReturn(recordFactory); - given(connectionFactory.getConnection()).willReturn(connection); - given(connection.createInteraction()).willReturn(interaction); - given(generator.createRecord(recordFactory)).willReturn(record); - given(interaction.execute(interactionSpec, record)).willReturn(resultset); - given(extractor.extractData(resultset)).willReturn(new Object()); - - CciTemplate ct = new CciTemplate(connectionFactory); - ct.execute(interactionSpec, generator, extractor); - - verify(extractor).extractData(resultset); - verify(resultset).close(); - verify(interaction).close(); - verify(connection).close(); - } - - @SuppressWarnings("unchecked") - @Test - public void testTemplateExecuteConnectionCallback() - throws ResourceException, SQLException { - ConnectionFactory connectionFactory = mock(ConnectionFactory.class); - Connection connection = mock(Connection.class); - ConnectionCallback connectionCallback = mock(ConnectionCallback.class); - - given(connectionFactory.getConnection()).willReturn(connection); - given(connectionCallback.doInConnection(connection, connectionFactory)).willReturn(new Object()); - - CciTemplate ct = new CciTemplate(connectionFactory); - ct.execute(connectionCallback); - - verify(connectionCallback).doInConnection(connection, connectionFactory); - verify(connection).close(); - } - - @SuppressWarnings("unchecked") - @Test - public void testTemplateExecuteInteractionCallback() - throws ResourceException, SQLException { - ConnectionFactory connectionFactory = mock(ConnectionFactory.class); - Connection connection = mock(Connection.class); - Interaction interaction = mock(Interaction.class); - InteractionCallback interactionCallback = mock(InteractionCallback.class); - - given(connectionFactory.getConnection()).willReturn(connection); - given(connection.createInteraction()).willReturn(interaction); - given(interactionCallback.doInInteraction(interaction,connectionFactory)).willReturn(new Object()); - - CciTemplate ct = new CciTemplate(connectionFactory); - ct.execute(interactionCallback); - - verify(interactionCallback).doInInteraction(interaction,connectionFactory); - verify(interaction).close(); - verify(connection).close(); - } - - @Test - public void testTemplateExecuteInputTrueTrueWithCreator() - throws ResourceException { - ConnectionFactory connectionFactory = mock(ConnectionFactory.class); - Connection connection = mock(Connection.class); - Interaction interaction = mock(Interaction.class); - RecordCreator creator = mock(RecordCreator.class); - - Record inputOutputRecord = mock(Record.class); - - InteractionSpec interactionSpec = mock(InteractionSpec.class); - - given(connectionFactory.getConnection()).willReturn(connection); - given(connection.createInteraction()).willReturn(interaction); - given(interaction.execute(interactionSpec, inputOutputRecord, inputOutputRecord)).willReturn(true); - - CciTemplate ct = new CciTemplate(connectionFactory); - ct.setOutputRecordCreator(creator); - ct.execute(interactionSpec, inputOutputRecord, inputOutputRecord); - - verify(interaction).execute(interactionSpec, inputOutputRecord, inputOutputRecord); - verify(interaction).close(); - verify(connection).close(); - } - - @Test - public void testTemplateExecuteInputTrueTrue() throws ResourceException { - ConnectionFactory connectionFactory = mock(ConnectionFactory.class); - Connection connection = mock(Connection.class); - Interaction interaction = mock(Interaction.class); - Record inputOutputRecord = mock(Record.class); - InteractionSpec interactionSpec = mock(InteractionSpec.class); - - given(connectionFactory.getConnection()).willReturn(connection); - given(connection.createInteraction()).willReturn(interaction); - given(interaction.execute(interactionSpec, inputOutputRecord, inputOutputRecord)).willReturn(true); - - CciTemplate ct = new CciTemplate(connectionFactory); - ct.execute(interactionSpec, inputOutputRecord, inputOutputRecord); - - verify(interaction).execute(interactionSpec, inputOutputRecord, inputOutputRecord); - verify(interaction).close(); - verify(connection).close(); - } - - @Test - public void testTemplateExecuteInputFalseTrue() throws ResourceException { - ConnectionFactory connectionFactory = mock(ConnectionFactory.class); - Connection connection = mock(Connection.class); - Interaction interaction = mock(Interaction.class); - Record inputOutputRecord = mock(Record.class); - InteractionSpec interactionSpec = mock(InteractionSpec.class); - - given(connectionFactory.getConnection()).willReturn(connection); - given(connection.createInteraction()).willReturn(interaction); - given(interaction.execute(interactionSpec, inputOutputRecord)).willReturn(null); - - CciTemplate ct = new CciTemplate(connectionFactory); - Record tmpOutputRecord = ct.execute(interactionSpec, inputOutputRecord); - assertThat(tmpOutputRecord).isNull(); - - verify(interaction).execute(interactionSpec, inputOutputRecord); - verify(interaction).close(); - verify(connection).close(); - } - -} diff --git a/spring-tx/src/test/java/org/springframework/jca/cci/EisOperationTests.java b/spring-tx/src/test/java/org/springframework/jca/cci/EisOperationTests.java deleted file mode 100644 index 30f6febbda2..00000000000 --- a/spring-tx/src/test/java/org/springframework/jca/cci/EisOperationTests.java +++ /dev/null @@ -1,217 +0,0 @@ -/* - * Copyright 2002-2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.jca.cci; - -import javax.resource.ResourceException; -import javax.resource.cci.Connection; -import javax.resource.cci.ConnectionFactory; -import javax.resource.cci.Interaction; -import javax.resource.cci.InteractionSpec; -import javax.resource.cci.Record; -import javax.resource.cci.RecordFactory; - -import org.junit.jupiter.api.Test; - -import org.springframework.jca.cci.core.RecordCreator; -import org.springframework.jca.cci.object.MappingRecordOperation; -import org.springframework.jca.cci.object.SimpleRecordOperation; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.BDDMockito.given; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; - -/** - * @author Thierry Templier - * @author Chris Beams - */ -@Deprecated -public class EisOperationTests { - - @Test - public void testSimpleRecordOperation() throws ResourceException { - ConnectionFactory connectionFactory = mock(ConnectionFactory.class); - Connection connection = mock(Connection.class); - Interaction interaction = mock(Interaction.class); - - Record inputRecord = mock(Record.class); - Record outputRecord = mock(Record.class); - - InteractionSpec interactionSpec = mock(InteractionSpec.class); - - SimpleRecordOperation query = new SimpleRecordOperation(connectionFactory, interactionSpec); - - given(connectionFactory.getConnection()).willReturn(connection); - given(connection.createInteraction()).willReturn(interaction); - given(interaction.execute(interactionSpec, inputRecord)).willReturn(outputRecord); - - query.execute(inputRecord); - - verify(interaction).execute(interactionSpec, inputRecord); - verify(interaction).close(); - verify(connection).close(); - } - - @Test - public void testSimpleRecordOperationWithExplicitOutputRecord() throws ResourceException { - ConnectionFactory connectionFactory = mock(ConnectionFactory.class); - Connection connection = mock(Connection.class); - Interaction interaction = mock(Interaction.class); - - Record inputRecord = mock(Record.class); - Record outputRecord = mock(Record.class); - - InteractionSpec interactionSpec = mock(InteractionSpec.class); - - SimpleRecordOperation operation = new SimpleRecordOperation(connectionFactory, interactionSpec); - - given(connectionFactory.getConnection()).willReturn(connection); - given(connection.createInteraction()).willReturn(interaction); - given(interaction.execute(interactionSpec, inputRecord, outputRecord)).willReturn(true); - - operation.execute(inputRecord, outputRecord); - - verify(interaction).execute(interactionSpec, inputRecord, outputRecord); - verify(interaction).close(); - verify(connection).close(); - } - - @Test - public void testSimpleRecordOperationWithInputOutputRecord() throws ResourceException { - ConnectionFactory connectionFactory = mock(ConnectionFactory.class); - Connection connection = mock(Connection.class); - Interaction interaction = mock(Interaction.class); - - Record inputOutputRecord = mock(Record.class); - - InteractionSpec interactionSpec = mock(InteractionSpec.class); - - SimpleRecordOperation query = new SimpleRecordOperation(connectionFactory, interactionSpec); - - given(connectionFactory.getConnection()).willReturn(connection); - given(connection.createInteraction()).willReturn(interaction); - given(interaction.execute(interactionSpec, inputOutputRecord, inputOutputRecord)).willReturn(true); - - query.execute(inputOutputRecord, inputOutputRecord); - - verify(interaction).execute(interactionSpec, inputOutputRecord, inputOutputRecord); - verify(interaction).close(); - verify(connection).close(); - } - - @Test - public void testMappingRecordOperation() throws ResourceException { - ConnectionFactory connectionFactory = mock(ConnectionFactory.class); - Connection connection = mock(Connection.class); - Interaction interaction = mock(Interaction.class); - RecordFactory recordFactory = mock(RecordFactory.class); - - Record inputRecord = mock(Record.class); - Record outputRecord = mock(Record.class); - - InteractionSpec interactionSpec = mock(InteractionSpec.class); - - QueryCallDetector callDetector = mock(QueryCallDetector.class); - - MappingRecordOperationImpl query = new MappingRecordOperationImpl(connectionFactory, interactionSpec); - query.setCallDetector(callDetector); - - Object inObj = new Object(); - Object outObj = new Object(); - - given(connectionFactory.getRecordFactory()).willReturn(recordFactory); - given(callDetector.callCreateInputRecord(recordFactory, inObj)).willReturn(inputRecord); - given(connectionFactory.getConnection()).willReturn(connection); - given(connection.createInteraction()).willReturn(interaction); - given(interaction.execute(interactionSpec, inputRecord)).willReturn(outputRecord); - given(callDetector.callExtractOutputData(outputRecord)).willReturn(outObj); - - assertThat(query.execute(inObj)).isSameAs(outObj); - verify(interaction).close(); - verify(connection).close(); - } - - @Test - public void testMappingRecordOperationWithOutputRecordCreator() throws ResourceException { - ConnectionFactory connectionFactory = mock(ConnectionFactory.class); - Connection connection = mock(Connection.class); - Interaction interaction = mock(Interaction.class); - RecordFactory recordFactory = mock(RecordFactory.class); - - Record inputRecord = mock(Record.class); - Record outputRecord = mock(Record.class); - - RecordCreator outputCreator = mock(RecordCreator.class); - - InteractionSpec interactionSpec = mock(InteractionSpec.class); - - QueryCallDetector callDetector = mock(QueryCallDetector.class); - - MappingRecordOperationImpl query = new MappingRecordOperationImpl(connectionFactory, interactionSpec); - query.setOutputRecordCreator(outputCreator); - query.setCallDetector(callDetector); - - Object inObj = new Object(); - Object outObj = new Object(); - - given(connectionFactory.getRecordFactory()).willReturn(recordFactory); - given(callDetector.callCreateInputRecord(recordFactory, inObj)).willReturn(inputRecord); - given(connectionFactory.getConnection()).willReturn(connection); - given(connection.createInteraction()).willReturn(interaction); - given(connectionFactory.getRecordFactory()).willReturn(recordFactory); - given(outputCreator.createRecord(recordFactory)).willReturn(outputRecord); - given(interaction.execute(interactionSpec, inputRecord, outputRecord)).willReturn(true); - given(callDetector.callExtractOutputData(outputRecord)).willReturn(outObj); - - assertThat(query.execute(inObj)).isSameAs(outObj); - verify(interaction).close(); - verify(connection).close(); - } - - - private class MappingRecordOperationImpl extends MappingRecordOperation { - - private QueryCallDetector callDetector; - - public MappingRecordOperationImpl(ConnectionFactory connectionFactory, InteractionSpec interactionSpec) { - super(connectionFactory, interactionSpec); - } - - public void setCallDetector(QueryCallDetector callDetector) { - this.callDetector = callDetector; - } - - @Override - protected Record createInputRecord(RecordFactory recordFactory, Object inputObject) { - return this.callDetector.callCreateInputRecord(recordFactory, inputObject); - } - - @Override - protected Object extractOutputData(Record outputRecord) throws ResourceException { - return this.callDetector.callExtractOutputData(outputRecord); - } - } - - - private interface QueryCallDetector { - - Record callCreateInputRecord(RecordFactory recordFactory, Object inputObject); - - Object callExtractOutputData(Record outputRecord); - } - -} diff --git a/spring-tx/src/test/java/org/springframework/jca/support/LocalConnectionFactoryBeanTests.java b/spring-tx/src/test/java/org/springframework/jca/support/LocalConnectionFactoryBeanTests.java index 37511b7dfaa..0ab4b95edda 100644 --- a/spring-tx/src/test/java/org/springframework/jca/support/LocalConnectionFactoryBeanTests.java +++ b/spring-tx/src/test/java/org/springframework/jca/support/LocalConnectionFactoryBeanTests.java @@ -16,9 +16,8 @@ package org.springframework.jca.support; -import javax.resource.spi.ConnectionManager; -import javax.resource.spi.ManagedConnectionFactory; - +import jakarta.resource.spi.ConnectionManager; +import jakarta.resource.spi.ManagedConnectionFactory; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; diff --git a/spring-tx/src/test/java/org/springframework/transaction/JndiJtaTransactionManagerTests.java b/spring-tx/src/test/java/org/springframework/transaction/JndiJtaTransactionManagerTests.java index 2319d34261f..611792ba826 100644 --- a/spring-tx/src/test/java/org/springframework/transaction/JndiJtaTransactionManagerTests.java +++ b/spring-tx/src/test/java/org/springframework/transaction/JndiJtaTransactionManagerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,10 +16,9 @@ package org.springframework.transaction; -import javax.transaction.Status; -import javax.transaction.TransactionManager; -import javax.transaction.UserTransaction; - +import jakarta.transaction.Status; +import jakarta.transaction.TransactionManager; +import jakarta.transaction.UserTransaction; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; diff --git a/spring-tx/src/test/java/org/springframework/transaction/JtaTransactionManagerTests.java b/spring-tx/src/test/java/org/springframework/transaction/JtaTransactionManagerTests.java index 8666e6155bf..84955e4cdea 100644 --- a/spring-tx/src/test/java/org/springframework/transaction/JtaTransactionManagerTests.java +++ b/spring-tx/src/test/java/org/springframework/transaction/JtaTransactionManagerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2020 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,16 +16,15 @@ package org.springframework.transaction; -import javax.transaction.HeuristicMixedException; -import javax.transaction.HeuristicRollbackException; -import javax.transaction.NotSupportedException; -import javax.transaction.RollbackException; -import javax.transaction.Status; -import javax.transaction.SystemException; -import javax.transaction.Transaction; -import javax.transaction.TransactionManager; -import javax.transaction.UserTransaction; - +import jakarta.transaction.HeuristicMixedException; +import jakarta.transaction.HeuristicRollbackException; +import jakarta.transaction.NotSupportedException; +import jakarta.transaction.RollbackException; +import jakarta.transaction.Status; +import jakarta.transaction.SystemException; +import jakarta.transaction.Transaction; +import jakarta.transaction.TransactionManager; +import jakarta.transaction.UserTransaction; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; diff --git a/spring-tx/src/test/java/org/springframework/transaction/MockJtaTransaction.java b/spring-tx/src/test/java/org/springframework/transaction/MockJtaTransaction.java index 2adbfa549bc..0b45ade6c55 100644 --- a/spring-tx/src/test/java/org/springframework/transaction/MockJtaTransaction.java +++ b/spring-tx/src/test/java/org/springframework/transaction/MockJtaTransaction.java @@ -16,15 +16,16 @@ package org.springframework.transaction; -import javax.transaction.Status; -import javax.transaction.Synchronization; import javax.transaction.xa.XAResource; +import jakarta.transaction.Status; +import jakarta.transaction.Synchronization; + /** * @author Juergen Hoeller * @since 31.08.2004 */ -public class MockJtaTransaction implements javax.transaction.Transaction { +public class MockJtaTransaction implements jakarta.transaction.Transaction { private Synchronization synchronization; diff --git a/spring-tx/src/test/java/org/springframework/transaction/annotation/AnnotationTransactionAttributeSourceTests.java b/spring-tx/src/test/java/org/springframework/transaction/annotation/AnnotationTransactionAttributeSourceTests.java index d94dc4bf495..aa02845750a 100644 --- a/spring-tx/src/test/java/org/springframework/transaction/annotation/AnnotationTransactionAttributeSourceTests.java +++ b/spring-tx/src/test/java/org/springframework/transaction/annotation/AnnotationTransactionAttributeSourceTests.java @@ -22,10 +22,9 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.reflect.Method; -import javax.ejb.TransactionAttributeType; - import groovy.lang.GroovyObject; import groovy.lang.MetaClass; +import jakarta.ejb.TransactionAttributeType; import org.junit.jupiter.api.Test; import org.springframework.aop.framework.Advised; @@ -745,7 +744,7 @@ public class AnnotationTransactionAttributeSourceTests { private int age; @Override - @javax.ejb.TransactionAttribute(TransactionAttributeType.SUPPORTS) + @jakarta.ejb.TransactionAttribute(TransactionAttributeType.SUPPORTS) public String getName() { return name; } @@ -756,7 +755,7 @@ public class AnnotationTransactionAttributeSourceTests { } @Override - @javax.ejb.TransactionAttribute + @jakarta.ejb.TransactionAttribute public int getAge() { return age; } @@ -768,7 +767,7 @@ public class AnnotationTransactionAttributeSourceTests { } - @javax.ejb.TransactionAttribute(TransactionAttributeType.SUPPORTS) + @jakarta.ejb.TransactionAttribute(TransactionAttributeType.SUPPORTS) static class Ejb3AnnotatedBean2 implements ITestBean1 { private String name; @@ -786,7 +785,7 @@ public class AnnotationTransactionAttributeSourceTests { } @Override - @javax.ejb.TransactionAttribute + @jakarta.ejb.TransactionAttribute public int getAge() { return age; } @@ -798,10 +797,10 @@ public class AnnotationTransactionAttributeSourceTests { } - @javax.ejb.TransactionAttribute(TransactionAttributeType.SUPPORTS) + @jakarta.ejb.TransactionAttribute(TransactionAttributeType.SUPPORTS) interface ITestEjb { - @javax.ejb.TransactionAttribute + @jakarta.ejb.TransactionAttribute int getAge(); void setAge(int age); @@ -847,7 +846,7 @@ public class AnnotationTransactionAttributeSourceTests { private int age; @Override - @javax.transaction.Transactional(javax.transaction.Transactional.TxType.SUPPORTS) + @jakarta.transaction.Transactional(jakarta.transaction.Transactional.TxType.SUPPORTS) public String getName() { return name; } @@ -858,7 +857,7 @@ public class AnnotationTransactionAttributeSourceTests { } @Override - @javax.transaction.Transactional + @jakarta.transaction.Transactional public int getAge() { return age; } @@ -870,7 +869,7 @@ public class AnnotationTransactionAttributeSourceTests { } - @javax.transaction.Transactional(javax.transaction.Transactional.TxType.SUPPORTS) + @jakarta.transaction.Transactional(jakarta.transaction.Transactional.TxType.SUPPORTS) static class JtaAnnotatedBean2 implements ITestBean1 { private String name; @@ -888,7 +887,7 @@ public class AnnotationTransactionAttributeSourceTests { } @Override - @javax.transaction.Transactional + @jakarta.transaction.Transactional public int getAge() { return age; } @@ -900,10 +899,10 @@ public class AnnotationTransactionAttributeSourceTests { } - @javax.transaction.Transactional(javax.transaction.Transactional.TxType.SUPPORTS) + @jakarta.transaction.Transactional(jakarta.transaction.Transactional.TxType.SUPPORTS) interface ITestJta { - @javax.transaction.Transactional + @jakarta.transaction.Transactional int getAge(); void setAge(int age); diff --git a/spring-tx/src/test/java/org/springframework/transaction/jta/MockUOWManager.java b/spring-tx/src/test/java/org/springframework/transaction/jta/MockUOWManager.java deleted file mode 100644 index 05c80273d3b..00000000000 --- a/spring-tx/src/test/java/org/springframework/transaction/jta/MockUOWManager.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright 2002-2020 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.transaction.jta; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.transaction.Synchronization; - -import com.ibm.wsspi.uow.UOWAction; -import com.ibm.wsspi.uow.UOWActionException; -import com.ibm.wsspi.uow.UOWException; -import com.ibm.wsspi.uow.UOWManager; - -/** - * @author Juergen Hoeller - */ -public class MockUOWManager implements UOWManager { - - private int type = UOW_TYPE_GLOBAL_TRANSACTION; - - private boolean joined; - - private int timeout; - - private boolean rollbackOnly; - - private int status = UOW_STATUS_NONE; - - private final Map resources = new HashMap<>(); - - private final List synchronizations = new ArrayList<>(); - - - @Override - public void runUnderUOW(int type, boolean join, UOWAction action) throws UOWActionException, UOWException { - this.type = type; - this.joined = join; - try { - this.status = UOW_STATUS_ACTIVE; - action.run(); - this.status = (this.rollbackOnly ? UOW_STATUS_ROLLEDBACK : UOW_STATUS_COMMITTED); - } - catch (Error | RuntimeException ex) { - this.status = UOW_STATUS_ROLLEDBACK; - throw ex; - } - catch (Exception ex) { - this.status = UOW_STATUS_ROLLEDBACK; - throw new UOWActionException(ex); - } - } - - @Override - public int getUOWType() { - return this.type; - } - - public boolean getJoined() { - return this.joined; - } - - @Override - public long getLocalUOWId() { - return 0; - } - - @Override - public void setUOWTimeout(int uowType, int timeout) { - this.timeout = timeout; - } - - @Override - public int getUOWTimeout() { - return this.timeout; - } - - @Override - public void setRollbackOnly() { - this.rollbackOnly = true; - } - - @Override - public boolean getRollbackOnly() { - return this.rollbackOnly; - } - - public void setUOWStatus(int status) { - this.status = status; - } - - @Override - public int getUOWStatus() { - return this.status; - } - - @Override - public void putResource(Object key, Object value) { - this.resources.put(key, value); - } - - @Override - public Object getResource(Object key) throws NullPointerException { - return this.resources.get(key); - } - - @Override - public void registerInterposedSynchronization(Synchronization sync) { - this.synchronizations.add(sync); - } - - public List getSynchronizations() { - return this.synchronizations; - } - -} diff --git a/spring-tx/src/test/java/org/springframework/transaction/jta/WebSphereUowTransactionManagerTests.java b/spring-tx/src/test/java/org/springframework/transaction/jta/WebSphereUowTransactionManagerTests.java deleted file mode 100644 index 06b4675f3a5..00000000000 --- a/spring-tx/src/test/java/org/springframework/transaction/jta/WebSphereUowTransactionManagerTests.java +++ /dev/null @@ -1,656 +0,0 @@ -/* - * Copyright 2002-2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.transaction.jta; - -import javax.transaction.RollbackException; -import javax.transaction.Status; -import javax.transaction.UserTransaction; - -import com.ibm.wsspi.uow.UOWAction; -import com.ibm.wsspi.uow.UOWException; -import com.ibm.wsspi.uow.UOWManager; -import org.junit.jupiter.api.Test; - -import org.springframework.context.testfixture.jndi.ExpectedLookupTemplate; -import org.springframework.dao.OptimisticLockingFailureException; -import org.springframework.transaction.IllegalTransactionStateException; -import org.springframework.transaction.NestedTransactionNotSupportedException; -import org.springframework.transaction.TransactionDefinition; -import org.springframework.transaction.TransactionStatus; -import org.springframework.transaction.TransactionSystemException; -import org.springframework.transaction.support.DefaultTransactionDefinition; -import org.springframework.transaction.support.TransactionCallback; -import org.springframework.transaction.support.TransactionSynchronizationManager; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import static org.mockito.BDDMockito.given; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; - -/** - * @author Juergen Hoeller - */ -public class WebSphereUowTransactionManagerTests { - - @Test - public void uowManagerFoundInJndi() { - MockUOWManager manager = new MockUOWManager(); - ExpectedLookupTemplate jndiTemplate = - new ExpectedLookupTemplate(WebSphereUowTransactionManager.DEFAULT_UOW_MANAGER_NAME, manager); - WebSphereUowTransactionManager ptm = new WebSphereUowTransactionManager(); - ptm.setJndiTemplate(jndiTemplate); - ptm.afterPropertiesSet(); - - DefaultTransactionDefinition definition = new DefaultTransactionDefinition(); - assertThat(ptm.execute(definition, new TransactionCallback() { - @Override - public String doInTransaction(TransactionStatus status) { - return "result"; - } - })).isEqualTo("result"); - - assertThat(manager.getUOWType()).isEqualTo(UOWManager.UOW_TYPE_GLOBAL_TRANSACTION); - assertThat(manager.getJoined()).isFalse(); - assertThat(manager.getRollbackOnly()).isFalse(); - } - - @Test - public void uowManagerAndUserTransactionFoundInJndi() throws Exception { - UserTransaction ut = mock(UserTransaction.class); - given(ut.getStatus()).willReturn( Status.STATUS_NO_TRANSACTION, Status.STATUS_ACTIVE, Status.STATUS_ACTIVE); - - MockUOWManager manager = new MockUOWManager(); - ExpectedLookupTemplate jndiTemplate = new ExpectedLookupTemplate(); - jndiTemplate.addObject(WebSphereUowTransactionManager.DEFAULT_USER_TRANSACTION_NAME, ut); - jndiTemplate.addObject(WebSphereUowTransactionManager.DEFAULT_UOW_MANAGER_NAME, manager); - WebSphereUowTransactionManager ptm = new WebSphereUowTransactionManager(); - ptm.setJndiTemplate(jndiTemplate); - ptm.afterPropertiesSet(); - - DefaultTransactionDefinition definition = new DefaultTransactionDefinition(); - TransactionStatus ts = ptm.getTransaction(definition); - ptm.commit(ts); - assertThat(ptm.execute(definition, new TransactionCallback() { - @Override - public String doInTransaction(TransactionStatus status) { - return "result"; - } - })).isEqualTo("result"); - - assertThat(manager.getUOWType()).isEqualTo(UOWManager.UOW_TYPE_GLOBAL_TRANSACTION); - assertThat(manager.getJoined()).isFalse(); - assertThat(manager.getRollbackOnly()).isFalse(); - verify(ut).begin(); - verify(ut).commit(); - } - - @Test - public void propagationMandatoryFailsInCaseOfNoExistingTransaction() { - MockUOWManager manager = new MockUOWManager(); - WebSphereUowTransactionManager ptm = new WebSphereUowTransactionManager(manager); - DefaultTransactionDefinition definition = new DefaultTransactionDefinition(); - definition.setPropagationBehavior(TransactionDefinition.PROPAGATION_MANDATORY); - - assertThatExceptionOfType(IllegalTransactionStateException.class).isThrownBy(() -> - ptm.execute(definition, new TransactionCallback() { - @Override - public String doInTransaction(TransactionStatus status) { - return "result"; - } - })); - } - - @Test - public void newTransactionSynchronizationUsingPropagationSupports() { - doTestNewTransactionSynchronization( - TransactionDefinition.PROPAGATION_SUPPORTS, WebSphereUowTransactionManager.SYNCHRONIZATION_ALWAYS); - } - - @Test - public void newTransactionSynchronizationUsingPropagationNotSupported() { - doTestNewTransactionSynchronization( - TransactionDefinition.PROPAGATION_NOT_SUPPORTED, WebSphereUowTransactionManager.SYNCHRONIZATION_ALWAYS); - } - - @Test - public void newTransactionSynchronizationUsingPropagationNever() { - doTestNewTransactionSynchronization( - TransactionDefinition.PROPAGATION_NEVER, WebSphereUowTransactionManager.SYNCHRONIZATION_ALWAYS); - } - - @Test - public void newTransactionSynchronizationUsingPropagationSupportsAndSynchOnActual() { - doTestNewTransactionSynchronization( - TransactionDefinition.PROPAGATION_SUPPORTS, WebSphereUowTransactionManager.SYNCHRONIZATION_ON_ACTUAL_TRANSACTION); - } - - @Test - public void newTransactionSynchronizationUsingPropagationNotSupportedAndSynchOnActual() { - doTestNewTransactionSynchronization( - TransactionDefinition.PROPAGATION_NOT_SUPPORTED, WebSphereUowTransactionManager.SYNCHRONIZATION_ON_ACTUAL_TRANSACTION); - } - - @Test - public void newTransactionSynchronizationUsingPropagationNeverAndSynchOnActual() { - doTestNewTransactionSynchronization( - TransactionDefinition.PROPAGATION_NEVER, WebSphereUowTransactionManager.SYNCHRONIZATION_ON_ACTUAL_TRANSACTION); - } - - @Test - public void newTransactionSynchronizationUsingPropagationSupportsAndSynchNever() { - doTestNewTransactionSynchronization( - TransactionDefinition.PROPAGATION_SUPPORTS, WebSphereUowTransactionManager.SYNCHRONIZATION_NEVER); - } - - @Test - public void newTransactionSynchronizationUsingPropagationNotSupportedAndSynchNever() { - doTestNewTransactionSynchronization( - TransactionDefinition.PROPAGATION_NOT_SUPPORTED, WebSphereUowTransactionManager.SYNCHRONIZATION_NEVER); - } - - @Test - public void newTransactionSynchronizationUsingPropagationNeverAndSynchNever() { - doTestNewTransactionSynchronization( - TransactionDefinition.PROPAGATION_NEVER, WebSphereUowTransactionManager.SYNCHRONIZATION_NEVER); - } - - private void doTestNewTransactionSynchronization(int propagationBehavior, final int synchMode) { - MockUOWManager manager = new MockUOWManager(); - WebSphereUowTransactionManager ptm = new WebSphereUowTransactionManager(manager); - ptm.setTransactionSynchronization(synchMode); - DefaultTransactionDefinition definition = new DefaultTransactionDefinition(); - definition.setPropagationBehavior(propagationBehavior); - definition.setReadOnly(true); - - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse(); - - assertThat(ptm.execute(definition, new TransactionCallback() { - @Override - public String doInTransaction(TransactionStatus status) { - if (synchMode == WebSphereUowTransactionManager.SYNCHRONIZATION_ALWAYS) { - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isTrue(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isTrue(); - } - else { - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse(); - } - return "result"; - } - })).isEqualTo("result"); - - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse(); - - assertThat(manager.getUOWTimeout()).isEqualTo(0); - assertThat(manager.getUOWType()).isEqualTo(UOWManager.UOW_TYPE_LOCAL_TRANSACTION); - assertThat(manager.getJoined()).isFalse(); - assertThat(manager.getRollbackOnly()).isFalse(); - } - - @Test - public void newTransactionWithCommitUsingPropagationRequired() { - doTestNewTransactionWithCommit( - TransactionDefinition.PROPAGATION_REQUIRED, WebSphereUowTransactionManager.SYNCHRONIZATION_ALWAYS); - } - - @Test - public void newTransactionWithCommitUsingPropagationRequiresNew() { - doTestNewTransactionWithCommit( - TransactionDefinition.PROPAGATION_REQUIRES_NEW, WebSphereUowTransactionManager.SYNCHRONIZATION_ALWAYS); - } - - @Test - public void newTransactionWithCommitUsingPropagationNested() { - doTestNewTransactionWithCommit( - TransactionDefinition.PROPAGATION_NESTED, WebSphereUowTransactionManager.SYNCHRONIZATION_ALWAYS); - } - - @Test - public void newTransactionWithCommitUsingPropagationRequiredAndSynchOnActual() { - doTestNewTransactionWithCommit( - TransactionDefinition.PROPAGATION_REQUIRED, WebSphereUowTransactionManager.SYNCHRONIZATION_ON_ACTUAL_TRANSACTION); - } - - @Test - public void newTransactionWithCommitUsingPropagationRequiresNewAndSynchOnActual() { - doTestNewTransactionWithCommit( - TransactionDefinition.PROPAGATION_REQUIRES_NEW, WebSphereUowTransactionManager.SYNCHRONIZATION_ON_ACTUAL_TRANSACTION); - } - - @Test - public void newTransactionWithCommitUsingPropagationNestedAndSynchOnActual() { - doTestNewTransactionWithCommit( - TransactionDefinition.PROPAGATION_NESTED, WebSphereUowTransactionManager.SYNCHRONIZATION_ON_ACTUAL_TRANSACTION); - } - - @Test - public void newTransactionWithCommitUsingPropagationRequiredAndSynchNever() { - doTestNewTransactionWithCommit( - TransactionDefinition.PROPAGATION_REQUIRED, WebSphereUowTransactionManager.SYNCHRONIZATION_NEVER); - } - - @Test - public void newTransactionWithCommitUsingPropagationRequiresNewAndSynchNever() { - doTestNewTransactionWithCommit( - TransactionDefinition.PROPAGATION_REQUIRES_NEW, WebSphereUowTransactionManager.SYNCHRONIZATION_NEVER); - } - - @Test - public void newTransactionWithCommitUsingPropagationNestedAndSynchNever() { - doTestNewTransactionWithCommit( - TransactionDefinition.PROPAGATION_NESTED, WebSphereUowTransactionManager.SYNCHRONIZATION_NEVER); - } - - private void doTestNewTransactionWithCommit(int propagationBehavior, final int synchMode) { - MockUOWManager manager = new MockUOWManager(); - WebSphereUowTransactionManager ptm = new WebSphereUowTransactionManager(manager); - ptm.setTransactionSynchronization(synchMode); - DefaultTransactionDefinition definition = new DefaultTransactionDefinition(); - definition.setPropagationBehavior(propagationBehavior); - definition.setReadOnly(true); - - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse(); - - assertThat(ptm.execute(definition, new TransactionCallback() { - @Override - public String doInTransaction(TransactionStatus status) { - if (synchMode != WebSphereUowTransactionManager.SYNCHRONIZATION_NEVER) { - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isTrue(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isTrue(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isTrue(); - } - else { - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse(); - } - return "result"; - } - })).isEqualTo("result"); - - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse(); - - assertThat(manager.getUOWTimeout()).isEqualTo(0); - assertThat(manager.getUOWType()).isEqualTo(UOWManager.UOW_TYPE_GLOBAL_TRANSACTION); - assertThat(manager.getJoined()).isFalse(); - assertThat(manager.getRollbackOnly()).isFalse(); - } - - @Test - public void newTransactionWithCommitAndTimeout() { - MockUOWManager manager = new MockUOWManager(); - WebSphereUowTransactionManager ptm = new WebSphereUowTransactionManager(manager); - DefaultTransactionDefinition definition = new DefaultTransactionDefinition(); - definition.setTimeout(10); - definition.setReadOnly(true); - - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse(); - - assertThat(ptm.execute(definition, new TransactionCallback() { - @Override - public String doInTransaction(TransactionStatus status) { - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isTrue(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isTrue(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isTrue(); - return "result"; - } - })).isEqualTo("result"); - - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse(); - - assertThat(manager.getUOWTimeout()).isEqualTo(10); - assertThat(manager.getUOWType()).isEqualTo(UOWManager.UOW_TYPE_GLOBAL_TRANSACTION); - assertThat(manager.getJoined()).isFalse(); - assertThat(manager.getRollbackOnly()).isFalse(); - } - - @Test - public void newTransactionWithCommitException() { - final RollbackException rex = new RollbackException(); - MockUOWManager manager = new MockUOWManager() { - @Override - public void runUnderUOW(int type, boolean join, UOWAction action) throws UOWException { - throw new UOWException(rex); - } - }; - WebSphereUowTransactionManager ptm = new WebSphereUowTransactionManager(manager); - DefaultTransactionDefinition definition = new DefaultTransactionDefinition(); - - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse(); - - assertThatExceptionOfType(TransactionSystemException.class).isThrownBy(() -> - ptm.execute(definition, new TransactionCallback() { - @Override - public String doInTransaction(TransactionStatus status) { - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isTrue(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isTrue(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse(); - return "result"; - } - })) - .withCauseInstanceOf(UOWException.class) - .satisfies(ex -> { - assertThat(ex.getRootCause()).isSameAs(rex); - assertThat(ex.getMostSpecificCause()).isSameAs(rex); - }); - - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse(); - - assertThat(manager.getUOWTimeout()).isEqualTo(0); - } - - @Test - public void newTransactionWithRollback() { - MockUOWManager manager = new MockUOWManager(); - WebSphereUowTransactionManager ptm = new WebSphereUowTransactionManager(manager); - DefaultTransactionDefinition definition = new DefaultTransactionDefinition(); - - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse(); - - assertThatExceptionOfType(OptimisticLockingFailureException.class).isThrownBy(() -> - ptm.execute(definition, new TransactionCallback() { - @Override - public String doInTransaction(TransactionStatus status) { - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isTrue(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isTrue(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse(); - throw new OptimisticLockingFailureException(""); - } - })); - - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse(); - - assertThat(manager.getUOWTimeout()).isEqualTo(0); - assertThat(manager.getUOWType()).isEqualTo(UOWManager.UOW_TYPE_GLOBAL_TRANSACTION); - assertThat(manager.getJoined()).isFalse(); - assertThat(manager.getRollbackOnly()).isTrue(); - } - - @Test - public void newTransactionWithRollbackOnly() { - MockUOWManager manager = new MockUOWManager(); - WebSphereUowTransactionManager ptm = new WebSphereUowTransactionManager(manager); - DefaultTransactionDefinition definition = new DefaultTransactionDefinition(); - - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse(); - - assertThat(ptm.execute(definition, new TransactionCallback() { - @Override - public String doInTransaction(TransactionStatus status) { - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isTrue(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isTrue(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse(); - status.setRollbackOnly(); - return "result"; - } - })).isEqualTo("result"); - - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse(); - - assertThat(manager.getUOWTimeout()).isEqualTo(0); - assertThat(manager.getUOWType()).isEqualTo(UOWManager.UOW_TYPE_GLOBAL_TRANSACTION); - assertThat(manager.getJoined()).isFalse(); - assertThat(manager.getRollbackOnly()).isTrue(); - } - - @Test - public void existingNonSpringTransaction() { - MockUOWManager manager = new MockUOWManager(); - manager.setUOWStatus(UOWManager.UOW_STATUS_ACTIVE); - WebSphereUowTransactionManager ptm = new WebSphereUowTransactionManager(manager); - DefaultTransactionDefinition definition = new DefaultTransactionDefinition(); - - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse(); - - assertThat(ptm.execute(definition, new TransactionCallback() { - @Override - public String doInTransaction(TransactionStatus status) { - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isTrue(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isTrue(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse(); - return "result"; - } - })).isEqualTo("result"); - - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse(); - - assertThat(manager.getUOWTimeout()).isEqualTo(0); - assertThat(manager.getUOWType()).isEqualTo(UOWManager.UOW_TYPE_GLOBAL_TRANSACTION); - assertThat(manager.getJoined()).isTrue(); - assertThat(manager.getRollbackOnly()).isFalse(); - } - - @Test - public void propagationNeverFailsInCaseOfExistingTransaction() { - MockUOWManager manager = new MockUOWManager(); - manager.setUOWStatus(UOWManager.UOW_STATUS_ACTIVE); - WebSphereUowTransactionManager ptm = new WebSphereUowTransactionManager(manager); - DefaultTransactionDefinition definition = new DefaultTransactionDefinition(); - definition.setPropagationBehavior(TransactionDefinition.PROPAGATION_NEVER); - - assertThatExceptionOfType(IllegalTransactionStateException.class).isThrownBy(() -> - ptm.execute(definition, new TransactionCallback() { - @Override - public String doInTransaction(TransactionStatus status) { - return "result"; - } - })); - } - - @Test - public void propagationNestedFailsInCaseOfExistingTransaction() { - MockUOWManager manager = new MockUOWManager(); - manager.setUOWStatus(UOWManager.UOW_STATUS_ACTIVE); - WebSphereUowTransactionManager ptm = new WebSphereUowTransactionManager(manager); - DefaultTransactionDefinition definition = new DefaultTransactionDefinition(); - definition.setPropagationBehavior(TransactionDefinition.PROPAGATION_NESTED); - - assertThatExceptionOfType(NestedTransactionNotSupportedException.class).isThrownBy(() -> - ptm.execute(definition, new TransactionCallback() { - @Override - public String doInTransaction(TransactionStatus status) { - return "result"; - } - })); - } - - @Test - public void existingTransactionWithParticipationUsingPropagationRequired() { - doTestExistingTransactionWithParticipation(TransactionDefinition.PROPAGATION_REQUIRED); - } - - @Test - public void existingTransactionWithParticipationUsingPropagationSupports() { - doTestExistingTransactionWithParticipation(TransactionDefinition.PROPAGATION_SUPPORTS); - } - - @Test - public void existingTransactionWithParticipationUsingPropagationMandatory() { - doTestExistingTransactionWithParticipation(TransactionDefinition.PROPAGATION_MANDATORY); - } - - private void doTestExistingTransactionWithParticipation(int propagationBehavior) { - MockUOWManager manager = new MockUOWManager(); - final WebSphereUowTransactionManager ptm = new WebSphereUowTransactionManager(manager); - DefaultTransactionDefinition definition = new DefaultTransactionDefinition(); - final DefaultTransactionDefinition definition2 = new DefaultTransactionDefinition(); - definition2.setPropagationBehavior(propagationBehavior); - definition2.setReadOnly(true); - - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse(); - - assertThat(ptm.execute(definition, new TransactionCallback() { - @Override - public String doInTransaction(TransactionStatus status) { - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isTrue(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isTrue(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse(); - assertThat(ptm.execute(definition2, new TransactionCallback() { - @Override - public String doInTransaction(TransactionStatus status1) { - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isTrue(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isTrue(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse(); - return "result2"; - } - })).isEqualTo("result2"); - return "result"; - } - })).isEqualTo("result"); - - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse(); - - assertThat(manager.getUOWTimeout()).isEqualTo(0); - assertThat(manager.getUOWType()).isEqualTo(UOWManager.UOW_TYPE_GLOBAL_TRANSACTION); - assertThat(manager.getJoined()).isTrue(); - assertThat(manager.getRollbackOnly()).isFalse(); - } - - @Test - public void existingTransactionWithSuspensionUsingPropagationRequiresNew() { - doTestExistingTransactionWithSuspension(TransactionDefinition.PROPAGATION_REQUIRES_NEW); - } - - @Test - public void existingTransactionWithSuspensionUsingPropagationNotSupported() { - doTestExistingTransactionWithSuspension(TransactionDefinition.PROPAGATION_NOT_SUPPORTED); - } - - private void doTestExistingTransactionWithSuspension(final int propagationBehavior) { - MockUOWManager manager = new MockUOWManager(); - final WebSphereUowTransactionManager ptm = new WebSphereUowTransactionManager(manager); - DefaultTransactionDefinition definition = new DefaultTransactionDefinition(); - final DefaultTransactionDefinition definition2 = new DefaultTransactionDefinition(); - definition2.setPropagationBehavior(propagationBehavior); - definition2.setReadOnly(true); - - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse(); - - assertThat(ptm.execute(definition, new TransactionCallback() { - @Override - public String doInTransaction(TransactionStatus status) { - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isTrue(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isTrue(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse(); - assertThat(ptm.execute(definition2, new TransactionCallback() { - @Override - public String doInTransaction(TransactionStatus status1) { - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isTrue(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isEqualTo((propagationBehavior == TransactionDefinition.PROPAGATION_REQUIRES_NEW)); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isTrue(); - return "result2"; - } - })).isEqualTo("result2"); - return "result"; - } - })).isEqualTo("result"); - - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse(); - - assertThat(manager.getUOWTimeout()).isEqualTo(0); - if (propagationBehavior == TransactionDefinition.PROPAGATION_REQUIRES_NEW) { - assertThat(manager.getUOWType()).isEqualTo(UOWManager.UOW_TYPE_GLOBAL_TRANSACTION); - } - else { - assertThat(manager.getUOWType()).isEqualTo(UOWManager.UOW_TYPE_LOCAL_TRANSACTION); - } - assertThat(manager.getJoined()).isFalse(); - assertThat(manager.getRollbackOnly()).isFalse(); - } - - @Test - public void existingTransactionUsingPropagationNotSupported() { - MockUOWManager manager = new MockUOWManager(); - final WebSphereUowTransactionManager ptm = new WebSphereUowTransactionManager(manager); - DefaultTransactionDefinition definition = new DefaultTransactionDefinition(); - final DefaultTransactionDefinition definition2 = new DefaultTransactionDefinition(); - definition2.setPropagationBehavior(TransactionDefinition.PROPAGATION_NOT_SUPPORTED); - definition2.setReadOnly(true); - - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse(); - - assertThat(ptm.execute(definition, new TransactionCallback() { - @Override - public String doInTransaction(TransactionStatus status) { - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isTrue(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isTrue(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse(); - assertThat(ptm.execute(definition2, new TransactionCallback() { - @Override - public String doInTransaction(TransactionStatus status1) { - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isTrue(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isTrue(); - return "result2"; - } - })).isEqualTo("result2"); - return "result"; - } - })).isEqualTo("result"); - - assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse(); - assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse(); - - assertThat(manager.getUOWTimeout()).isEqualTo(0); - assertThat(manager.getUOWType()).isEqualTo(UOWManager.UOW_TYPE_LOCAL_TRANSACTION); - assertThat(manager.getJoined()).isFalse(); - assertThat(manager.getRollbackOnly()).isFalse(); - } - -} diff --git a/spring-tx/src/test/java/org/springframework/transaction/support/JtaTransactionManagerSerializationTests.java b/spring-tx/src/test/java/org/springframework/transaction/support/JtaTransactionManagerSerializationTests.java index d5390e33cb0..296e08a6cac 100644 --- a/spring-tx/src/test/java/org/springframework/transaction/support/JtaTransactionManagerSerializationTests.java +++ b/spring-tx/src/test/java/org/springframework/transaction/support/JtaTransactionManagerSerializationTests.java @@ -16,9 +16,8 @@ package org.springframework.transaction.support; -import javax.transaction.TransactionManager; -import javax.transaction.UserTransaction; - +import jakarta.transaction.TransactionManager; +import jakarta.transaction.UserTransaction; import org.junit.jupiter.api.Test; import org.springframework.context.testfixture.jndi.SimpleNamingContextBuilder; diff --git a/spring-web/spring-web.gradle b/spring-web/spring-web.gradle index 716ecb4cecf..f0e341db5d0 100644 --- a/spring-web/spring-web.gradle +++ b/spring-web/spring-web.gradle @@ -10,16 +10,14 @@ dependencies { optional(project(":spring-aop")) optional(project(":spring-context")) optional(project(":spring-oxm")) - optional("javax.servlet:javax.servlet-api") // Servlet 4 for mapping type - optional("javax.servlet.jsp:javax.servlet.jsp-api") - optional("javax.el:javax.el-api") - optional("javax.faces:javax.faces-api") - optional("javax.json.bind:javax.json.bind-api") - optional("javax.mail:javax.mail-api") - optional("javax.validation:validation-api") - optional("javax.xml.bind:jaxb-api") - optional("javax.xml.ws:jaxws-api") - optional("org.glassfish.main:javax.jws") + optional("jakarta.servlet:jakarta.servlet-api") + optional("jakarta.servlet.jsp:jakarta.servlet.jsp-api") + optional("jakarta.el:jakarta.el-api") + optional("jakarta.faces:jakarta.faces-api") + optional("jakarta.json.bind:jakarta.json.bind-api") + optional("jakarta.mail:jakarta.mail-api") + optional("jakarta.validation:jakarta.validation-api") + optional("jakarta.xml.bind:jakarta.xml.bind-api") optional("io.reactivex.rxjava3:rxjava") optional("io.netty:netty-buffer") optional("io.netty:netty-handler") @@ -29,10 +27,10 @@ dependencies { optional("io.undertow:undertow-core") optional("org.apache.tomcat.embed:tomcat-embed-core") optional("org.eclipse.jetty:jetty-server") { - exclude group: "javax.servlet", module: "javax.servlet-api" + exclude group: "jakarta.servlet", module: "jakarta.servlet-api" } optional("org.eclipse.jetty:jetty-servlet") { - exclude group: "javax.servlet", module: "javax.servlet-api" + exclude group: "jakarta.servlet", module: "jakarta.servlet-api" } optional("org.eclipse.jetty:jetty-reactive-httpclient") optional('org.apache.httpcomponents.client5:httpclient5') @@ -40,8 +38,6 @@ dependencies { optional("com.squareup.okhttp3:okhttp") optional("org.apache.httpcomponents:httpclient") optional("org.apache.httpcomponents:httpasyncclient") - optional("commons-fileupload:commons-fileupload") - optional("org.synchronoss.cloud:nio-multipart-parser") optional("com.fasterxml.woodstox:woodstox-core") optional("com.fasterxml:aalto-xml") optional("com.fasterxml.jackson.core:jackson-databind") @@ -52,7 +48,6 @@ dependencies { optional("com.google.protobuf:protobuf-java-util") optional("com.googlecode.protobuf-java-format:protobuf-java-format") optional("com.rometools:rome") - optional("com.caucho:hessian") optional("org.codehaus.groovy:groovy") optional("org.jetbrains.kotlin:kotlin-reflect") optional("org.jetbrains.kotlin:kotlin-stdlib") @@ -61,9 +56,7 @@ dependencies { testImplementation(testFixtures(project(":spring-context"))) testImplementation(testFixtures(project(":spring-core"))) testImplementation("io.projectreactor:reactor-test") - testImplementation("org.apache.taglibs:taglibs-standard-jstlel") testImplementation("com.fasterxml.jackson.datatype:jackson-datatype-jdk8") - testImplementation("com.fasterxml.jackson.datatype:jackson-datatype-joda") testImplementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310") testImplementation("com.fasterxml.jackson.module:jackson-module-kotlin") testImplementation("org.apache.tomcat:tomcat-util") @@ -76,16 +69,15 @@ dependencies { testImplementation("org.xmlunit:xmlunit-assertj") testImplementation("org.xmlunit:xmlunit-matchers") testImplementation("io.projectreactor.tools:blockhound") - testRuntimeOnly("com.sun.mail:javax.mail") + testRuntimeOnly("com.sun.mail:jakarta.mail") testRuntimeOnly("com.sun.xml.bind:jaxb-core") testRuntimeOnly("com.sun.xml.bind:jaxb-impl") - testRuntimeOnly("javax.json:javax.json-api") - testRuntimeOnly("org.apache.johnzon:johnzon-jsonb") - testFixturesApi("javax.servlet:javax.servlet-api") + testRuntimeOnly("jakarta.json:jakarta.json-api") + testRuntimeOnly("org.eclipse:yasson") + testFixturesApi("jakarta.servlet:jakarta.servlet-api") testFixturesApi("org.junit.jupiter:junit-jupiter-api") testFixturesApi("org.junit.jupiter:junit-jupiter-params") testFixturesImplementation("io.projectreactor:reactor-test") - testFixturesImplementation("org.apache.taglibs:taglibs-standard-jstlel") testFixturesImplementation("org.assertj:assertj-core") testFixturesImplementation("org.bouncycastle:bcpkix-jdk15on") { because("needed by Netty's SelfSignedCertificate on JDK 15+") diff --git a/spring-web/src/main/java/org/springframework/http/client/reactive/JettyClientHttpRequest.java b/spring-web/src/main/java/org/springframework/http/client/reactive/JettyClientHttpRequest.java index 8aabf895792..80ad419ef49 100644 --- a/spring-web/src/main/java/org/springframework/http/client/reactive/JettyClientHttpRequest.java +++ b/spring-web/src/main/java/org/springframework/http/client/reactive/JettyClientHttpRequest.java @@ -54,7 +54,6 @@ class JettyClientHttpRequest extends AbstractClientHttpRequest { private final ReactiveRequest.Builder builder; - public JettyClientHttpRequest(Request jettyRequest, DataBufferFactory bufferFactory) { this.jettyRequest = jettyRequest; this.bufferFactory = bufferFactory; @@ -137,10 +136,12 @@ class JettyClientHttpRequest extends AbstractClientHttpRequest { @Override protected void applyHeaders() { HttpHeaders headers = getHeaders(); - headers.forEach((key, value) -> value.forEach(v -> this.jettyRequest.header(key, v))); - if (!headers.containsKey(HttpHeaders.ACCEPT)) { - this.jettyRequest.header(HttpHeaders.ACCEPT, "*/*"); - } + this.jettyRequest.headers(fields -> { + headers.forEach((key, value) -> value.forEach(v -> fields.add(key, v))); + if (!headers.containsKey(HttpHeaders.ACCEPT)) { + fields.add(HttpHeaders.ACCEPT, "*/*"); + } + }); } public ReactiveRequest toReactiveRequest() { diff --git a/spring-web/src/main/java/org/springframework/http/client/reactive/JettyClientHttpResponse.java b/spring-web/src/main/java/org/springframework/http/client/reactive/JettyClientHttpResponse.java index 5d88c83ddf6..22cde72ac28 100644 --- a/spring-web/src/main/java/org/springframework/http/client/reactive/JettyClientHttpResponse.java +++ b/spring-web/src/main/java/org/springframework/http/client/reactive/JettyClientHttpResponse.java @@ -16,13 +16,11 @@ package org.springframework.http.client.reactive; -import java.lang.reflect.Method; import java.net.HttpCookie; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.eclipse.jetty.client.api.Response; import org.eclipse.jetty.reactive.client.ReactiveResponse; import org.reactivestreams.Publisher; import reactor.core.publisher.Flux; @@ -32,11 +30,9 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseCookie; import org.springframework.lang.Nullable; -import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; -import org.springframework.util.ReflectionUtils; /** * {@link ClientHttpResponse} implementation for the Jetty ReactiveStreams HTTP client. @@ -50,10 +46,6 @@ class JettyClientHttpResponse implements ClientHttpResponse { private static final Pattern SAMESITE_PATTERN = Pattern.compile("(?i).*SameSite=(Strict|Lax|None).*"); - private static final ClassLoader classLoader = JettyClientHttpResponse.class.getClassLoader(); - - private static final boolean jetty10Present; - private final ReactiveResponse reactiveResponse; @@ -62,25 +54,11 @@ class JettyClientHttpResponse implements ClientHttpResponse { private final HttpHeaders headers; - static { - try { - Class httpFieldsClass = classLoader.loadClass("org.eclipse.jetty.http.HttpFields"); - jetty10Present = httpFieldsClass.isInterface(); - } - catch (ClassNotFoundException ex) { - throw new IllegalStateException("No compatible Jetty version found", ex); - } - } - - public JettyClientHttpResponse(ReactiveResponse reactiveResponse, Publisher content) { this.reactiveResponse = reactiveResponse; this.content = Flux.from(content); - MultiValueMap headers = (jetty10Present ? - Jetty10HttpFieldsHelper.getHttpHeaders(reactiveResponse) : - new JettyHeadersAdapter(reactiveResponse.getHeaders())); - + MultiValueMap headers = new JettyHeadersAdapter(reactiveResponse.getHeaders()); this.headers = HttpHeaders.readOnlyHttpHeaders(headers); } @@ -132,40 +110,4 @@ class JettyClientHttpResponse implements ClientHttpResponse { return this.headers; } - - private static class Jetty10HttpFieldsHelper { - - private static final Method getHeadersMethod; - - private static final Method getNameMethod; - - private static final Method getValueMethod; - - static { - try { - getHeadersMethod = Response.class.getMethod("getHeaders"); - Class type = classLoader.loadClass("org.eclipse.jetty.http.HttpField"); - getNameMethod = type.getMethod("getName"); - getValueMethod = type.getMethod("getValue"); - } - catch (ClassNotFoundException | NoSuchMethodException ex) { - throw new IllegalStateException("No compatible Jetty version found", ex); - } - } - - public static HttpHeaders getHttpHeaders(ReactiveResponse response) { - HttpHeaders headers = new HttpHeaders(); - Iterable iterator = (Iterable) - ReflectionUtils.invokeMethod(getHeadersMethod, response.getResponse()); - Assert.notNull(iterator, "Iterator must not be null"); - for (Object field : iterator) { - String name = (String) ReflectionUtils.invokeMethod(getNameMethod, field); - Assert.notNull(name, "Header name must not be null"); - String value = (String) ReflectionUtils.invokeMethod(getValueMethod, field); - headers.add(name, value); - } - return headers; - } - } - } diff --git a/spring-web/src/main/java/org/springframework/http/client/reactive/JettyHeadersAdapter.java b/spring-web/src/main/java/org/springframework/http/client/reactive/JettyHeadersAdapter.java index f44362c9c3a..6d42dc76204 100644 --- a/spring-web/src/main/java/org/springframework/http/client/reactive/JettyHeadersAdapter.java +++ b/spring-web/src/main/java/org/springframework/http/client/reactive/JettyHeadersAdapter.java @@ -39,6 +39,7 @@ import org.springframework.util.MultiValueMap; *

    There is a duplicate of this class in the server package! * * @author Rossen Stoyanchev + * @author Juergen Hoeller * @since 5.3 */ class JettyHeadersAdapter implements MultiValueMap { @@ -58,7 +59,10 @@ class JettyHeadersAdapter implements MultiValueMap { @Override public void add(String key, @Nullable String value) { - this.headers.add(key, value); + if (!(this.headers instanceof HttpFields.Mutable)) { + throw new IllegalStateException("Immutable headers"); + } + ((HttpFields.Mutable) this.headers).add(key, value); } @Override @@ -73,7 +77,10 @@ class JettyHeadersAdapter implements MultiValueMap { @Override public void set(String key, @Nullable String value) { - this.headers.put(key, value); + if (!(this.headers instanceof HttpFields.Mutable)) { + throw new IllegalStateException("Immutable headers"); + } + ((HttpFields.Mutable) this.headers).put(key, value); } @Override @@ -105,7 +112,7 @@ class JettyHeadersAdapter implements MultiValueMap { @Override public boolean containsKey(Object key) { - return (key instanceof String && this.headers.containsKey((String) key)); + return (key instanceof String && this.headers.contains((String) key)); } @Override @@ -126,17 +133,23 @@ class JettyHeadersAdapter implements MultiValueMap { @Nullable @Override public List put(String key, List value) { + if (!(this.headers instanceof HttpFields.Mutable)) { + throw new IllegalStateException("Immutable headers"); + } List oldValues = get(key); - this.headers.put(key, value); + ((HttpFields.Mutable) this.headers).put(key, value); return oldValues; } @Nullable @Override public List remove(Object key) { + if (!(this.headers instanceof HttpFields.Mutable)) { + throw new IllegalStateException("Immutable headers"); + } if (key instanceof String) { List oldValues = get(key); - this.headers.remove((String) key); + ((HttpFields.Mutable) this.headers).remove((String) key); return oldValues; } return null; @@ -149,7 +162,10 @@ class JettyHeadersAdapter implements MultiValueMap { @Override public void clear() { - this.headers.clear(); + if (!(this.headers instanceof HttpFields.Mutable)) { + throw new IllegalStateException("Immutable headers"); + } + ((HttpFields.Mutable) this.headers).clear(); } @Override @@ -221,8 +237,11 @@ class JettyHeadersAdapter implements MultiValueMap { @Override public List setValue(List value) { + if (!(headers instanceof HttpFields.Mutable)) { + throw new IllegalStateException("Immutable headers"); + } List previousValues = headers.getValuesList(this.key); - headers.put(this.key, value); + ((HttpFields.Mutable) headers).put(this.key, value); return previousValues; } } @@ -266,13 +285,16 @@ class JettyHeadersAdapter implements MultiValueMap { @Override public void remove() { + if (!(headers instanceof HttpFields.Mutable)) { + throw new IllegalStateException("Immutable headers"); + } if (this.currentName == null) { throw new IllegalStateException("No current Header in iterator"); } - if (!headers.containsKey(this.currentName)) { + if (!headers.contains(this.currentName)) { throw new IllegalStateException("Header not present: " + this.currentName); } - headers.remove(this.currentName); + ((HttpFields.Mutable) headers).remove(this.currentName); } } diff --git a/spring-web/src/main/java/org/springframework/http/codec/ServerCodecConfigurer.java b/spring-web/src/main/java/org/springframework/http/codec/ServerCodecConfigurer.java index 4bbefc8c939..c6f9222a19c 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/ServerCodecConfigurer.java +++ b/spring-web/src/main/java/org/springframework/http/codec/ServerCodecConfigurer.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -84,13 +84,6 @@ public interface ServerCodecConfigurer extends CodecConfigurer { /** * Configure the {@code HttpMessageReader} to use for multipart requests. - *

    By default, if - * Synchronoss NIO Multipart - * is present, this is set to - * {@link org.springframework.http.codec.multipart.MultipartHttpMessageReader - * MultipartHttpMessageReader} created with an instance of - * {@link org.springframework.http.codec.multipart.SynchronossPartHttpMessageReader - * SynchronossPartHttpMessageReader}. *

    Note that {@link #maxInMemorySize(int)} and/or * {@link #enableLoggingRequestDetails(boolean)}, if configured, will be * applied to the given reader, if applicable. diff --git a/spring-web/src/main/java/org/springframework/http/codec/multipart/SynchronossPartHttpMessageReader.java b/spring-web/src/main/java/org/springframework/http/codec/multipart/SynchronossPartHttpMessageReader.java deleted file mode 100644 index 032b787d887..00000000000 --- a/spring-web/src/main/java/org/springframework/http/codec/multipart/SynchronossPartHttpMessageReader.java +++ /dev/null @@ -1,597 +0,0 @@ -/* - * Copyright 2002-2021 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.http.codec.multipart; - -import java.io.IOException; -import java.nio.channels.Channels; -import java.nio.channels.FileChannel; -import java.nio.channels.ReadableByteChannel; -import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.OpenOption; -import java.nio.file.Path; -import java.nio.file.StandardOpenOption; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicReference; -import java.util.function.Consumer; - -import org.synchronoss.cloud.nio.multipart.DefaultPartBodyStreamStorageFactory; -import org.synchronoss.cloud.nio.multipart.Multipart; -import org.synchronoss.cloud.nio.multipart.MultipartContext; -import org.synchronoss.cloud.nio.multipart.MultipartUtils; -import org.synchronoss.cloud.nio.multipart.NioMultipartParser; -import org.synchronoss.cloud.nio.multipart.NioMultipartParserListener; -import org.synchronoss.cloud.nio.multipart.PartBodyStreamStorageFactory; -import org.synchronoss.cloud.nio.stream.storage.StreamStorage; -import reactor.core.publisher.BaseSubscriber; -import reactor.core.publisher.Flux; -import reactor.core.publisher.FluxSink; -import reactor.core.publisher.Mono; -import reactor.core.publisher.SignalType; -import reactor.core.scheduler.Schedulers; - -import org.springframework.core.ResolvableType; -import org.springframework.core.codec.DecodingException; -import org.springframework.core.codec.Hints; -import org.springframework.core.io.buffer.DataBuffer; -import org.springframework.core.io.buffer.DataBufferLimitException; -import org.springframework.core.io.buffer.DataBufferUtils; -import org.springframework.core.io.buffer.DefaultDataBufferFactory; -import org.springframework.core.log.LogFormatUtils; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; -import org.springframework.http.ReactiveHttpInputMessage; -import org.springframework.http.codec.HttpMessageReader; -import org.springframework.http.codec.LoggingCodecSupport; -import org.springframework.lang.Nullable; -import org.springframework.util.Assert; - -/** - * {@code HttpMessageReader} for parsing {@code "multipart/form-data"} requests - * to a stream of {@link Part}'s using the Synchronoss NIO Multipart library. - * - *

    This reader can be provided to {@link MultipartHttpMessageReader} in order - * to aggregate all parts into a Map. - * - * @author Sebastien Deleuze - * @author Rossen Stoyanchev - * @author Arjen Poutsma - * @author Brian Clozel - * @since 5.0 - * @see Synchronoss NIO Multipart - * @see MultipartHttpMessageReader - */ -public class SynchronossPartHttpMessageReader extends LoggingCodecSupport implements HttpMessageReader { - - private static final String FILE_STORAGE_DIRECTORY_PREFIX = "synchronoss-file-upload-"; - - private int maxInMemorySize = 256 * 1024; - - private long maxDiskUsagePerPart = -1; - - private int maxParts = -1; - - private final AtomicReference fileStorageDirectory = new AtomicReference<>(); - - - /** - * Configure the maximum amount of memory that is allowed to use per part. - * When the limit is exceeded: - *

      - *
    • file parts are written to a temporary file. - *
    • non-file parts are rejected with {@link DataBufferLimitException}. - *
    - *

    By default this is set to 256K. - * @param byteCount the in-memory limit in bytes; if set to -1 this limit is - * not enforced, and all parts may be written to disk and are limited only - * by the {@link #setMaxDiskUsagePerPart(long) maxDiskUsagePerPart} property. - * @since 5.1.11 - */ - public void setMaxInMemorySize(int byteCount) { - this.maxInMemorySize = byteCount; - } - - /** - * Get the {@link #setMaxInMemorySize configured} maximum in-memory size. - * @since 5.1.11 - */ - public int getMaxInMemorySize() { - return this.maxInMemorySize; - } - - /** - * Configure the maximum amount of disk space allowed for file parts. - *

    By default this is set to -1. - * @param maxDiskUsagePerPart the disk limit in bytes, or -1 for unlimited - * @since 5.1.11 - */ - public void setMaxDiskUsagePerPart(long maxDiskUsagePerPart) { - this.maxDiskUsagePerPart = maxDiskUsagePerPart; - } - - /** - * Get the {@link #setMaxDiskUsagePerPart configured} maximum disk usage. - * @since 5.1.11 - */ - public long getMaxDiskUsagePerPart() { - return this.maxDiskUsagePerPart; - } - - /** - * Specify the maximum number of parts allowed in a given multipart request. - * @since 5.1.11 - */ - public void setMaxParts(int maxParts) { - this.maxParts = maxParts; - } - - /** - * Return the {@link #setMaxParts configured} limit on the number of parts. - * @since 5.1.11 - */ - public int getMaxParts() { - return this.maxParts; - } - - /** - * Set the directory used to store parts larger than - * {@link #setMaxInMemorySize(int) maxInMemorySize}. By default, a new - * temporary directory is created. - * @throws IOException if an I/O error occurs, or the parent directory - * does not exist - * @since 5.3.7 - */ - public void setFileStorageDirectory(Path fileStorageDirectory) throws IOException { - Assert.notNull(fileStorageDirectory, "FileStorageDirectory must not be null"); - if (!Files.exists(fileStorageDirectory)) { - Files.createDirectory(fileStorageDirectory); - } - this.fileStorageDirectory.set(fileStorageDirectory); - } - - - @Override - public List getReadableMediaTypes() { - return MultipartHttpMessageReader.MIME_TYPES; - } - - @Override - public boolean canRead(ResolvableType elementType, @Nullable MediaType mediaType) { - if (Part.class.equals(elementType.toClass())) { - if (mediaType == null) { - return true; - } - for (MediaType supportedMediaType : getReadableMediaTypes()) { - if (supportedMediaType.isCompatibleWith(mediaType)) { - return true; - } - } - } - return false; - } - - @Override - public Flux read(ResolvableType elementType, ReactiveHttpInputMessage message, Map hints) { - return getFileStorageDirectory().flatMapMany(directory -> - Flux.create(new SynchronossPartGenerator(message, directory)) - .doOnNext(part -> { - if (!Hints.isLoggingSuppressed(hints)) { - LogFormatUtils.traceDebug(logger, traceOn -> Hints.getLogPrefix(hints) + "Parsed " + - (isEnableLoggingRequestDetails() ? - LogFormatUtils.formatValue(part, !traceOn) : - "parts '" + part.name() + "' (content masked)")); - } - })); - } - - @Override - public Mono readMono(ResolvableType elementType, ReactiveHttpInputMessage message, Map hints) { - return Mono.error(new UnsupportedOperationException("Cannot read multipart request body into single Part")); - } - - private Mono getFileStorageDirectory() { - return Mono.defer(() -> { - Path directory = this.fileStorageDirectory.get(); - if (directory != null) { - return Mono.just(directory); - } - else { - return Mono.fromCallable(() -> { - Path tempDirectory = Files.createTempDirectory(FILE_STORAGE_DIRECTORY_PREFIX); - if (this.fileStorageDirectory.compareAndSet(null, tempDirectory)) { - return tempDirectory; - } - else { - try { - Files.delete(tempDirectory); - } - catch (IOException ignored) { - } - return this.fileStorageDirectory.get(); - } - }).subscribeOn(Schedulers.boundedElastic()); - } - }); - } - - - /** - * Subscribe to the input stream and feed the Synchronoss parser. Then listen - * for parser output, creating parts, and pushing them into the FluxSink. - */ - private class SynchronossPartGenerator extends BaseSubscriber implements Consumer> { - - private final ReactiveHttpInputMessage inputMessage; - - private final LimitedPartBodyStreamStorageFactory storageFactory = new LimitedPartBodyStreamStorageFactory(); - - private final Path fileStorageDirectory; - - @Nullable - private NioMultipartParserListener listener; - - @Nullable - private NioMultipartParser parser; - - public SynchronossPartGenerator(ReactiveHttpInputMessage inputMessage, Path fileStorageDirectory) { - this.inputMessage = inputMessage; - this.fileStorageDirectory = fileStorageDirectory; - } - - @Override - public void accept(FluxSink sink) { - HttpHeaders headers = this.inputMessage.getHeaders(); - MediaType mediaType = headers.getContentType(); - Assert.state(mediaType != null, "No content type set"); - - int length = getContentLength(headers); - Charset charset = Optional.ofNullable(mediaType.getCharset()).orElse(StandardCharsets.UTF_8); - MultipartContext context = new MultipartContext(mediaType.toString(), length, charset.name()); - - this.listener = new FluxSinkAdapterListener(sink, context, this.storageFactory); - - this.parser = Multipart - .multipart(context) - .saveTemporaryFilesTo(this.fileStorageDirectory.toString()) - .usePartBodyStreamStorageFactory(this.storageFactory) - .forNIO(this.listener); - - this.inputMessage.getBody().subscribe(this); - } - - @Override - protected void hookOnNext(DataBuffer buffer) { - Assert.state(this.parser != null && this.listener != null, "Not initialized yet"); - - int size = buffer.readableByteCount(); - this.storageFactory.increaseByteCount(size); - byte[] resultBytes = new byte[size]; - buffer.read(resultBytes); - - try { - this.parser.write(resultBytes); - } - catch (IOException ex) { - cancel(); - int index = this.storageFactory.getCurrentPartIndex(); - this.listener.onError("Parser error for part [" + index + "]", ex); - } - finally { - DataBufferUtils.release(buffer); - } - } - - @Override - protected void hookOnError(Throwable ex) { - if (this.listener != null) { - int index = this.storageFactory.getCurrentPartIndex(); - this.listener.onError("Failure while parsing part[" + index + "]", ex); - } - } - - @Override - protected void hookOnComplete() { - if (this.listener != null) { - this.listener.onAllPartsFinished(); - } - } - - @Override - protected void hookFinally(SignalType type) { - try { - if (this.parser != null) { - this.parser.close(); - } - } - catch (IOException ex) { - // ignore - } - } - - private int getContentLength(HttpHeaders headers) { - // Until this is fixed https://github.com/synchronoss/nio-multipart/issues/10 - long length = headers.getContentLength(); - return (int) length == length ? (int) length : -1; - } - } - - - private class LimitedPartBodyStreamStorageFactory implements PartBodyStreamStorageFactory { - - private final PartBodyStreamStorageFactory storageFactory = (maxInMemorySize > 0 ? - new DefaultPartBodyStreamStorageFactory(maxInMemorySize) : - new DefaultPartBodyStreamStorageFactory()); - - private int index = 1; - - private boolean isFilePart; - - private long partSize; - - public int getCurrentPartIndex() { - return this.index; - } - - @Override - public StreamStorage newStreamStorageForPartBody(Map> headers, int index) { - this.index = index; - this.isFilePart = (MultipartUtils.getFileName(headers) != null); - this.partSize = 0; - if (maxParts > 0 && index > maxParts) { - throw new DecodingException("Too many parts: Part[" + index + "] but maxParts=" + maxParts); - } - return this.storageFactory.newStreamStorageForPartBody(headers, index); - } - - public void increaseByteCount(long byteCount) { - this.partSize += byteCount; - if (maxInMemorySize > 0 && !this.isFilePart && this.partSize >= maxInMemorySize) { - throw new DataBufferLimitException("Part[" + this.index + "] " + - "exceeded the in-memory limit of " + maxInMemorySize + " bytes"); - } - if (maxDiskUsagePerPart > 0 && this.isFilePart && this.partSize > maxDiskUsagePerPart) { - throw new DecodingException("Part[" + this.index + "] " + - "exceeded the disk usage limit of " + maxDiskUsagePerPart + " bytes"); - } - } - - public void partFinished() { - this.index++; - this.isFilePart = false; - this.partSize = 0; - } - } - - - /** - * Listen for parser output and adapt to {@code Flux>}. - */ - private static class FluxSinkAdapterListener implements NioMultipartParserListener { - - private final FluxSink sink; - - private final MultipartContext context; - - private final LimitedPartBodyStreamStorageFactory storageFactory; - - private final AtomicInteger terminated = new AtomicInteger(); - - FluxSinkAdapterListener( - FluxSink sink, MultipartContext context, LimitedPartBodyStreamStorageFactory factory) { - - this.sink = sink; - this.context = context; - this.storageFactory = factory; - } - - @Override - public void onPartFinished(StreamStorage storage, Map> headers) { - HttpHeaders httpHeaders = new HttpHeaders(); - httpHeaders.putAll(headers); - this.storageFactory.partFinished(); - this.sink.next(createPart(storage, httpHeaders)); - } - - private Part createPart(StreamStorage storage, HttpHeaders httpHeaders) { - String filename = MultipartUtils.getFileName(httpHeaders); - if (filename != null) { - return new SynchronossFilePart(httpHeaders, filename, storage); - } - else if (MultipartUtils.isFormField(httpHeaders, this.context)) { - String value = MultipartUtils.readFormParameterValue(storage, httpHeaders); - return new SynchronossFormFieldPart(httpHeaders, value); - } - else { - return new SynchronossPart(httpHeaders, storage); - } - } - - @Override - public void onError(String message, Throwable cause) { - if (this.terminated.getAndIncrement() == 0) { - this.sink.error(new DecodingException(message, cause)); - } - } - - @Override - public void onAllPartsFinished() { - if (this.terminated.getAndIncrement() == 0) { - this.sink.complete(); - } - } - - @Override - public void onNestedPartStarted(Map> headersFromParentPart) { - } - - @Override - public void onNestedPartFinished() { - } - } - - - private abstract static class AbstractSynchronossPart implements Part { - - private final String name; - - private final HttpHeaders headers; - - AbstractSynchronossPart(HttpHeaders headers) { - Assert.notNull(headers, "HttpHeaders is required"); - this.name = MultipartUtils.getFieldName(headers); - this.headers = headers; - } - - @Override - public String name() { - return this.name; - } - - @Override - public HttpHeaders headers() { - return this.headers; - } - - @Override - public String toString() { - return "Part '" + this.name + "', headers=" + this.headers; - } - } - - - private static class SynchronossPart extends AbstractSynchronossPart { - - private final StreamStorage storage; - - SynchronossPart(HttpHeaders headers, StreamStorage storage) { - super(headers); - Assert.notNull(storage, "StreamStorage is required"); - this.storage = storage; - } - - @Override - @SuppressWarnings("resource") - public Flux content() { - return DataBufferUtils.readInputStream( - getStorage()::getInputStream, DefaultDataBufferFactory.sharedInstance, 4096); - } - - protected StreamStorage getStorage() { - return this.storage; - } - } - - - private static class SynchronossFilePart extends SynchronossPart implements FilePart { - - private static final OpenOption[] FILE_CHANNEL_OPTIONS = - {StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.WRITE}; - - private final String filename; - - SynchronossFilePart(HttpHeaders headers, String filename, StreamStorage storage) { - super(headers, storage); - this.filename = filename; - } - - @Override - public String filename() { - return this.filename; - } - - @Override - public Mono transferTo(Path dest) { - ReadableByteChannel input = null; - FileChannel output = null; - try { - input = Channels.newChannel(getStorage().getInputStream()); - output = FileChannel.open(dest, FILE_CHANNEL_OPTIONS); - long size = (input instanceof FileChannel ? ((FileChannel) input).size() : Long.MAX_VALUE); - long totalWritten = 0; - while (totalWritten < size) { - long written = output.transferFrom(input, totalWritten, size - totalWritten); - if (written <= 0) { - break; - } - totalWritten += written; - } - } - catch (IOException ex) { - return Mono.error(ex); - } - finally { - if (input != null) { - try { - input.close(); - } - catch (IOException ignored) { - } - } - if (output != null) { - try { - output.close(); - } - catch (IOException ignored) { - } - } - } - return Mono.empty(); - } - - @Override - public String toString() { - return "Part '" + name() + "', filename='" + this.filename + "'"; - } - } - - - private static class SynchronossFormFieldPart extends AbstractSynchronossPart implements FormFieldPart { - - private final String content; - - SynchronossFormFieldPart(HttpHeaders headers, String content) { - super(headers); - this.content = content; - } - - @Override - public String value() { - return this.content; - } - - @Override - public Flux content() { - byte[] bytes = this.content.getBytes(getCharset()); - return Flux.just(DefaultDataBufferFactory.sharedInstance.wrap(bytes)); - } - - private Charset getCharset() { - String name = MultipartUtils.getCharEncoding(headers()); - return (name != null ? Charset.forName(name) : StandardCharsets.UTF_8); - } - - @Override - public String toString() { - return "Part '" + name() + "=" + this.content + "'"; - } - } - -} diff --git a/spring-web/src/main/java/org/springframework/http/codec/support/BaseDefaultCodecs.java b/spring-web/src/main/java/org/springframework/http/codec/support/BaseDefaultCodecs.java index f23b17428d5..02055814b2e 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/support/BaseDefaultCodecs.java +++ b/spring-web/src/main/java/org/springframework/http/codec/support/BaseDefaultCodecs.java @@ -58,7 +58,6 @@ import org.springframework.http.codec.json.KotlinSerializationJsonEncoder; import org.springframework.http.codec.multipart.DefaultPartHttpMessageReader; import org.springframework.http.codec.multipart.MultipartHttpMessageReader; import org.springframework.http.codec.multipart.MultipartHttpMessageWriter; -import org.springframework.http.codec.multipart.SynchronossPartHttpMessageReader; import org.springframework.http.codec.protobuf.ProtobufDecoder; import org.springframework.http.codec.protobuf.ProtobufEncoder; import org.springframework.http.codec.protobuf.ProtobufHttpMessageWriter; @@ -103,7 +102,7 @@ class BaseDefaultCodecs implements CodecConfigurer.DefaultCodecs, CodecConfigure jackson2Present = ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", classLoader) && ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", classLoader); jackson2SmilePresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.smile.SmileFactory", classLoader); - jaxb2Present = ClassUtils.isPresent("javax.xml.bind.Binder", classLoader); + jaxb2Present = ClassUtils.isPresent("jakarta.xml.bind.Binder", classLoader); protobufPresent = ClassUtils.isPresent("com.google.protobuf.Message", classLoader); synchronossMultipartPresent = ClassUtils.isPresent("org.synchronoss.cloud.nio.multipart.NioMultipartParser", classLoader); nettyByteBufPresent = ClassUtils.isPresent("io.netty.buffer.ByteBuf", classLoader); @@ -417,11 +416,6 @@ class BaseDefaultCodecs implements CodecConfigurer.DefaultCodecs, CodecConfigure if (codec instanceof DefaultPartHttpMessageReader) { ((DefaultPartHttpMessageReader) codec).setMaxInMemorySize(size); } - if (synchronossMultipartPresent) { - if (codec instanceof SynchronossPartHttpMessageReader) { - ((SynchronossPartHttpMessageReader) codec).setMaxInMemorySize(size); - } - } } Boolean enable = this.enableLoggingRequestDetails; @@ -435,11 +429,6 @@ class BaseDefaultCodecs implements CodecConfigurer.DefaultCodecs, CodecConfigure if (codec instanceof DefaultPartHttpMessageReader) { ((DefaultPartHttpMessageReader) codec).setEnableLoggingRequestDetails(enable); } - if (synchronossMultipartPresent) { - if (codec instanceof SynchronossPartHttpMessageReader) { - ((SynchronossPartHttpMessageReader) codec).setEnableLoggingRequestDetails(enable); - } - } if (codec instanceof FormHttpMessageWriter) { ((FormHttpMessageWriter) codec).setEnableLoggingRequestDetails(enable); } diff --git a/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlDecoder.java b/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlDecoder.java index 2221880c49f..f30d0a5289f 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlDecoder.java +++ b/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2020 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,19 +24,19 @@ import java.util.function.BiConsumer; import java.util.function.Function; import javax.xml.XMLConstants; -import javax.xml.bind.JAXBElement; -import javax.xml.bind.JAXBException; -import javax.xml.bind.UnmarshalException; -import javax.xml.bind.Unmarshaller; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlSchema; -import javax.xml.bind.annotation.XmlType; import javax.xml.namespace.QName; import javax.xml.stream.XMLEventReader; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamException; import javax.xml.stream.events.XMLEvent; +import jakarta.xml.bind.JAXBElement; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.UnmarshalException; +import jakarta.xml.bind.Unmarshaller; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlSchema; +import jakarta.xml.bind.annotation.XmlType; import org.reactivestreams.Publisher; import reactor.core.Exceptions; import reactor.core.publisher.Flux; @@ -175,7 +175,6 @@ public class Jaxb2XmlDecoder extends AbstractDecoder { } @Override - @SuppressWarnings({"rawtypes", "unchecked", "cast"}) // XMLEventReader is Iterator on JDK 9 public Mono decodeToMono(Publisher input, ResolvableType elementType, @Nullable MimeType mimeType, @Nullable Map hints) { @@ -184,12 +183,11 @@ public class Jaxb2XmlDecoder extends AbstractDecoder { } @Override - @SuppressWarnings({"rawtypes", "unchecked", "cast"}) // XMLEventReader is Iterator on JDK 9 public Object decode(DataBuffer dataBuffer, ResolvableType targetType, @Nullable MimeType mimeType, @Nullable Map hints) throws DecodingException { try { - Iterator eventReader = inputFactory.createXMLEventReader(dataBuffer.asInputStream()); + Iterator eventReader = inputFactory.createXMLEventReader(dataBuffer.asInputStream()); List events = new ArrayList<>(); eventReader.forEachRemaining(event -> events.add((XMLEvent) event)); return unmarshal(events, targetType.toClass()); diff --git a/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlEncoder.java b/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlEncoder.java index b29b610bb51..678e6c64ae7 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlEncoder.java +++ b/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlEncoder.java @@ -21,12 +21,11 @@ import java.nio.charset.StandardCharsets; import java.util.Map; import java.util.function.Function; -import javax.xml.bind.JAXBException; -import javax.xml.bind.MarshalException; -import javax.xml.bind.Marshaller; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; - +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.MarshalException; +import jakarta.xml.bind.Marshaller; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -48,8 +47,8 @@ import org.springframework.util.MimeTypeUtils; /** * Encode from single value to a byte stream containing XML elements. * - *

    {@link javax.xml.bind.annotation.XmlElements @XmlElements} and - * {@link javax.xml.bind.annotation.XmlElement @XmlElement} can be used + *

    {@link jakarta.xml.bind.annotation.XmlElements @XmlElements} and + * {@link jakarta.xml.bind.annotation.XmlElement @XmlElement} can be used * to specify how collections should be marshalled. * * @author Sebastien Deleuze diff --git a/spring-web/src/main/java/org/springframework/http/codec/xml/JaxbContextContainer.java b/spring-web/src/main/java/org/springframework/http/codec/xml/JaxbContextContainer.java index 49441c498c3..f5eee44d743 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/xml/JaxbContextContainer.java +++ b/spring-web/src/main/java/org/springframework/http/codec/xml/JaxbContextContainer.java @@ -19,10 +19,10 @@ package org.springframework.http.codec.xml; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Marshaller; -import javax.xml.bind.Unmarshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Marshaller; +import jakarta.xml.bind.Unmarshaller; import org.springframework.core.codec.CodecException; diff --git a/spring-web/src/main/java/org/springframework/http/converter/FormHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/FormHttpMessageConverter.java index 8458ba1d651..c113194183e 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/FormHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/FormHttpMessageConverter.java @@ -29,7 +29,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import javax.mail.internet.MimeUtility; +import jakarta.mail.internet.MimeUtility; import org.springframework.core.io.Resource; import org.springframework.http.HttpEntity; @@ -287,7 +287,7 @@ public class FormHttpMessageConverter implements HttpMessageConverterAs of 5.0 by default part headers, including {@code Content-Disposition} * (and its filename parameter) will be encoded based on the setting of * {@link #setCharset(Charset)} or {@code UTF-8} by default. diff --git a/spring-web/src/main/java/org/springframework/http/converter/json/JsonbHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/json/JsonbHttpMessageConverter.java index bdbc7221cfd..95c82678355 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/json/JsonbHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/json/JsonbHttpMessageConverter.java @@ -21,9 +21,9 @@ import java.io.Writer; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; -import javax.json.bind.Jsonb; -import javax.json.bind.JsonbBuilder; -import javax.json.bind.JsonbConfig; +import jakarta.json.bind.Jsonb; +import jakarta.json.bind.JsonbBuilder; +import jakarta.json.bind.JsonbConfig; import org.springframework.lang.Nullable; import org.springframework.util.Assert; @@ -39,8 +39,8 @@ import org.springframework.util.Assert; * * @author Juergen Hoeller * @since 5.0 - * @see javax.json.bind.Jsonb - * @see javax.json.bind.JsonbBuilder + * @see jakarta.json.bind.Jsonb + * @see jakarta.json.bind.JsonbBuilder * @see #setJsonb */ public class JsonbHttpMessageConverter extends AbstractJsonHttpMessageConverter { diff --git a/spring-web/src/main/java/org/springframework/http/converter/support/AllEncompassingFormHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/support/AllEncompassingFormHttpMessageConverter.java index 78d64e5da47..850f6e88a73 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/support/AllEncompassingFormHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/support/AllEncompassingFormHttpMessageConverter.java @@ -62,13 +62,13 @@ public class AllEncompassingFormHttpMessageConverter extends FormHttpMessageConv static { ClassLoader classLoader = AllEncompassingFormHttpMessageConverter.class.getClassLoader(); - jaxb2Present = ClassUtils.isPresent("javax.xml.bind.Binder", classLoader); + jaxb2Present = ClassUtils.isPresent("jakarta.xml.bind.Binder", classLoader); jackson2Present = ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", classLoader) && ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", classLoader); jackson2XmlPresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.xml.XmlMapper", classLoader); jackson2SmilePresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.smile.SmileFactory", classLoader); gsonPresent = ClassUtils.isPresent("com.google.gson.Gson", classLoader); - jsonbPresent = ClassUtils.isPresent("javax.json.bind.Jsonb", classLoader); + jsonbPresent = ClassUtils.isPresent("jakarta.json.bind.Jsonb", classLoader); kotlinSerializationJsonPresent = ClassUtils.isPresent("kotlinx.serialization.json.Json", classLoader); } diff --git a/spring-web/src/main/java/org/springframework/http/converter/xml/AbstractJaxb2HttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/xml/AbstractJaxb2HttpMessageConverter.java index 811536c3165..11890fa419b 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/xml/AbstractJaxb2HttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/xml/AbstractJaxb2HttpMessageConverter.java @@ -19,10 +19,10 @@ package org.springframework.http.converter.xml; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Marshaller; -import javax.xml.bind.Unmarshaller; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Marshaller; +import jakarta.xml.bind.Unmarshaller; import org.springframework.http.converter.HttpMessageConversionException; diff --git a/spring-web/src/main/java/org/springframework/http/converter/xml/Jaxb2CollectionHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/xml/Jaxb2CollectionHttpMessageConverter.java index ab3850c42bf..c2e3bfdc10a 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/xml/Jaxb2CollectionHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/xml/Jaxb2CollectionHttpMessageConverter.java @@ -26,17 +26,18 @@ import java.util.List; import java.util.SortedSet; import java.util.TreeSet; -import javax.xml.bind.JAXBException; -import javax.xml.bind.UnmarshalException; -import javax.xml.bind.Unmarshaller; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import javax.xml.transform.Result; import javax.xml.transform.Source; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.UnmarshalException; +import jakarta.xml.bind.Unmarshaller; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; + import org.springframework.http.HttpHeaders; import org.springframework.http.HttpInputMessage; import org.springframework.http.HttpOutputMessage; diff --git a/spring-web/src/main/java/org/springframework/http/converter/xml/Jaxb2RootElementHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/xml/Jaxb2RootElementHttpMessageConverter.java index ae4dbd9b699..c41fb18b854 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/xml/Jaxb2RootElementHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/xml/Jaxb2RootElementHttpMessageConverter.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,20 +18,20 @@ package org.springframework.http.converter.xml; import java.io.StringReader; -import javax.xml.bind.JAXBElement; -import javax.xml.bind.JAXBException; -import javax.xml.bind.MarshalException; -import javax.xml.bind.Marshaller; -import javax.xml.bind.PropertyException; -import javax.xml.bind.UnmarshalException; -import javax.xml.bind.Unmarshaller; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.sax.SAXSource; import javax.xml.transform.stream.StreamSource; +import jakarta.xml.bind.JAXBElement; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.MarshalException; +import jakarta.xml.bind.Marshaller; +import jakarta.xml.bind.PropertyException; +import jakarta.xml.bind.UnmarshalException; +import jakarta.xml.bind.Unmarshaller; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; import org.xml.sax.EntityResolver; import org.xml.sax.InputSource; import org.xml.sax.SAXException; @@ -149,7 +149,7 @@ public class Jaxb2RootElementHttpMessageConverter extends AbstractJaxb2HttpMessa } } - @SuppressWarnings("deprecation") // on JDK 9 + @SuppressWarnings("deprecation") protected Source processSource(Source source) { if (source instanceof StreamSource) { StreamSource streamSource = (StreamSource) source; diff --git a/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpAsyncRequestControl.java b/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpAsyncRequestControl.java index 866b2422456..0a0d1b4fa39 100644 --- a/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpAsyncRequestControl.java +++ b/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpAsyncRequestControl.java @@ -19,11 +19,11 @@ package org.springframework.http.server; import java.io.IOException; import java.util.concurrent.atomic.AtomicBoolean; -import javax.servlet.AsyncContext; -import javax.servlet.AsyncEvent; -import javax.servlet.AsyncListener; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.AsyncContext; +import jakarta.servlet.AsyncEvent; +import jakarta.servlet.AsyncListener; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.lang.Nullable; import org.springframework.util.Assert; diff --git a/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpRequest.java b/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpRequest.java index b136e3fbcf2..f7b3e9e99f0 100644 --- a/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpRequest.java +++ b/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpRequest.java @@ -35,7 +35,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; @@ -234,7 +234,7 @@ public class ServletServerHttpRequest implements ServerHttpRequest { } /** - * Use {@link javax.servlet.ServletRequest#getParameterMap()} to reconstruct the + * Use {@link jakarta.servlet.ServletRequest#getParameterMap()} to reconstruct the * body of a form 'POST' providing a predictable outcome as opposed to reading * from the body, which can fail if any other code has used the ServletRequest * to access a parameter, thus causing the input stream to be "consumed". diff --git a/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpResponse.java b/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpResponse.java index 64436ffb1d8..1822b10f2be 100644 --- a/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpResponse.java +++ b/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpResponse.java @@ -23,7 +23,7 @@ import java.util.Collection; import java.util.Collections; import java.util.List; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/JettyHeadersAdapter.java b/spring-web/src/main/java/org/springframework/http/server/reactive/JettyHeadersAdapter.java index 35766287286..b8d73163cea 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/JettyHeadersAdapter.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/JettyHeadersAdapter.java @@ -39,6 +39,7 @@ import org.springframework.util.MultiValueMap; *

    There is a duplicate of this class in the client package! * * @author Brian Clozel + * @author Juergen Hoeller * @since 5.1.1 */ class JettyHeadersAdapter implements MultiValueMap { @@ -58,7 +59,10 @@ class JettyHeadersAdapter implements MultiValueMap { @Override public void add(String key, @Nullable String value) { - this.headers.add(key, value); + if (!(this.headers instanceof HttpFields.Mutable)) { + throw new IllegalStateException("Immutable headers"); + } + ((HttpFields.Mutable) this.headers).add(key, value); } @Override @@ -73,7 +77,10 @@ class JettyHeadersAdapter implements MultiValueMap { @Override public void set(String key, @Nullable String value) { - this.headers.put(key, value); + if (!(this.headers instanceof HttpFields.Mutable)) { + throw new IllegalStateException("Immutable headers"); + } + ((HttpFields.Mutable) this.headers).put(key, value); } @Override @@ -105,7 +112,7 @@ class JettyHeadersAdapter implements MultiValueMap { @Override public boolean containsKey(Object key) { - return (key instanceof String && this.headers.containsKey((String) key)); + return (key instanceof String && this.headers.contains((String) key)); } @Override @@ -126,17 +133,23 @@ class JettyHeadersAdapter implements MultiValueMap { @Nullable @Override public List put(String key, List value) { + if (!(this.headers instanceof HttpFields.Mutable)) { + throw new IllegalStateException("Immutable headers"); + } List oldValues = get(key); - this.headers.put(key, value); + ((HttpFields.Mutable) this.headers).put(key, value); return oldValues; } @Nullable @Override public List remove(Object key) { + if (!(this.headers instanceof HttpFields.Mutable)) { + throw new IllegalStateException("Immutable headers"); + } if (key instanceof String) { List oldValues = get(key); - this.headers.remove((String) key); + ((HttpFields.Mutable) this.headers).remove((String) key); return oldValues; } return null; @@ -149,7 +162,10 @@ class JettyHeadersAdapter implements MultiValueMap { @Override public void clear() { - this.headers.clear(); + if (!(this.headers instanceof HttpFields.Mutable)) { + throw new IllegalStateException("Immutable headers"); + } + ((HttpFields.Mutable) this.headers).clear(); } @Override @@ -221,8 +237,11 @@ class JettyHeadersAdapter implements MultiValueMap { @Override public List setValue(List value) { + if (!(headers instanceof HttpFields.Mutable)) { + throw new IllegalStateException("Immutable headers"); + } List previousValues = headers.getValuesList(this.key); - headers.put(this.key, value); + ((HttpFields.Mutable) headers).put(this.key, value); return previousValues; } } @@ -266,13 +285,16 @@ class JettyHeadersAdapter implements MultiValueMap { @Override public void remove() { + if (!(headers instanceof HttpFields.Mutable)) { + throw new IllegalStateException("Immutable headers"); + } if (this.currentName == null) { throw new IllegalStateException("No current Header in iterator"); } - if (!headers.containsKey(this.currentName)) { + if (!headers.contains(this.currentName)) { throw new IllegalStateException("Header not present: " + this.currentName); } - headers.remove(this.currentName); + ((HttpFields.Mutable) headers).remove(this.currentName); } } diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/JettyHttpHandlerAdapter.java b/spring-web/src/main/java/org/springframework/http/server/reactive/JettyHttpHandlerAdapter.java index 89a31506835..8f5f23be086 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/JettyHttpHandlerAdapter.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/JettyHttpHandlerAdapter.java @@ -21,13 +21,12 @@ import java.net.URISyntaxException; import java.nio.ByteBuffer; import java.nio.charset.Charset; -import javax.servlet.AsyncContext; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpServletResponseWrapper; - +import jakarta.servlet.AsyncContext; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponseWrapper; import org.eclipse.jetty.http.HttpFields; import org.eclipse.jetty.server.HttpOutput; import org.eclipse.jetty.server.Request; @@ -38,7 +37,6 @@ import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.util.Assert; -import org.springframework.util.ClassUtils; import org.springframework.util.MultiValueMap; /** @@ -52,10 +50,6 @@ import org.springframework.util.MultiValueMap; */ public class JettyHttpHandlerAdapter extends ServletHttpHandlerAdapter { - private static final boolean jetty10Present = ClassUtils.isPresent( - "org.eclipse.jetty.http.CookieCutter", JettyHttpHandlerAdapter.class.getClassLoader()); - - public JettyHttpHandlerAdapter(HttpHandler httpHandler) { super(httpHandler); } @@ -65,11 +59,6 @@ public class JettyHttpHandlerAdapter extends ServletHttpHandlerAdapter { protected ServletServerHttpRequest createRequest(HttpServletRequest request, AsyncContext context) throws IOException, URISyntaxException { - // TODO: need to compile against Jetty 10 to use HttpFields (class->interface) - if (jetty10Present) { - return super.createRequest(request, context); - } - Assert.notNull(getServletPath(), "Servlet path is not initialized"); return new JettyServerHttpRequest( request, context, getServletPath(), getDataBufferFactory(), getBufferSize()); @@ -79,15 +68,8 @@ public class JettyHttpHandlerAdapter extends ServletHttpHandlerAdapter { protected ServletServerHttpResponse createResponse(HttpServletResponse response, AsyncContext context, ServletServerHttpRequest request) throws IOException { - // TODO: need to compile against Jetty 10 to use HttpFields (class->interface) - if (jetty10Present) { - return new BaseJettyServerHttpResponse( - response, context, getDataBufferFactory(), getBufferSize(), request); - } - else { - return new JettyServerHttpResponse( - response, context, getDataBufferFactory(), getBufferSize(), request); - } + return new JettyServerHttpResponse( + response, context, getDataBufferFactory(), getBufferSize(), request); } @@ -120,39 +102,10 @@ public class JettyHttpHandlerAdapter extends ServletHttpHandlerAdapter { "] to org.eclipse.jetty.server.Request"); } } - - - } - - - private static class BaseJettyServerHttpResponse extends ServletServerHttpResponse { - - BaseJettyServerHttpResponse(HttpServletResponse response, AsyncContext asyncContext, - DataBufferFactory bufferFactory, int bufferSize, ServletServerHttpRequest request) - throws IOException { - - super(response, asyncContext, bufferFactory, bufferSize, request); - } - - BaseJettyServerHttpResponse(HttpHeaders headers, HttpServletResponse response, AsyncContext asyncContext, - DataBufferFactory bufferFactory, int bufferSize, ServletServerHttpRequest request) - throws IOException { - - super(headers, response, asyncContext, bufferFactory, bufferSize, request); - } - - @Override - protected int writeToOutputStream(DataBuffer dataBuffer) throws IOException { - ByteBuffer input = dataBuffer.asByteBuffer(); - int len = input.remaining(); - ServletResponse response = getNativeResponse(); - ((HttpOutput) response.getOutputStream()).write(input); - return len; - } } - private static final class JettyServerHttpResponse extends BaseJettyServerHttpResponse { + private static final class JettyServerHttpResponse extends ServletServerHttpResponse { JettyServerHttpResponse(HttpServletResponse response, AsyncContext asyncContext, DataBufferFactory bufferFactory, int bufferSize, ServletServerHttpRequest request) @@ -182,6 +135,15 @@ public class JettyHttpHandlerAdapter extends ServletHttpHandlerAdapter { } } + @Override + protected int writeToOutputStream(DataBuffer dataBuffer) throws IOException { + ByteBuffer input = dataBuffer.asByteBuffer(); + int len = input.remaining(); + ServletResponse response = getNativeResponse(); + ((HttpOutput) response.getOutputStream()).write(input); + return len; + } + @Override protected void applyHeaders() { HttpServletResponse response = getNativeResponse(); diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/ServletHttpHandlerAdapter.java b/spring-web/src/main/java/org/springframework/http/server/reactive/ServletHttpHandlerAdapter.java index c38837c7ed0..0fe306911e7 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/ServletHttpHandlerAdapter.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/ServletHttpHandlerAdapter.java @@ -21,20 +21,19 @@ import java.net.URISyntaxException; import java.util.Collection; import java.util.concurrent.atomic.AtomicBoolean; -import javax.servlet.AsyncContext; -import javax.servlet.AsyncEvent; -import javax.servlet.AsyncListener; -import javax.servlet.DispatcherType; -import javax.servlet.Servlet; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRegistration; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.AsyncContext; +import jakarta.servlet.AsyncEvent; +import jakarta.servlet.AsyncListener; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.Servlet; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRegistration; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.reactivestreams.Subscriber; import org.reactivestreams.Subscription; diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/ServletServerHttpRequest.java b/spring-web/src/main/java/org/springframework/http/server/reactive/ServletServerHttpRequest.java index a84ddc6d6e3..93be805e7ff 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/ServletServerHttpRequest.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/ServletServerHttpRequest.java @@ -26,14 +26,13 @@ import java.util.Enumeration; import java.util.Locale; import java.util.Map; -import javax.servlet.AsyncContext; -import javax.servlet.AsyncEvent; -import javax.servlet.AsyncListener; -import javax.servlet.ReadListener; -import javax.servlet.ServletInputStream; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.AsyncContext; +import jakarta.servlet.AsyncEvent; +import jakarta.servlet.AsyncListener; +import jakarta.servlet.ReadListener; +import jakarta.servlet.ServletInputStream; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; import reactor.core.publisher.Flux; @@ -203,12 +202,12 @@ class ServletServerHttpRequest extends AbstractServerHttpRequest { @Nullable private String getSslSessionId() { - return (String) this.request.getAttribute("javax.servlet.request.ssl_session_id"); + return (String) this.request.getAttribute("jakarta.servlet.request.ssl_session_id"); } @Nullable private X509Certificate[] getX509Certificates() { - String name = "javax.servlet.request.X509Certificate"; + String name = "jakarta.servlet.request.X509Certificate"; return (X509Certificate[]) this.request.getAttribute(name); } diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/ServletServerHttpResponse.java b/spring-web/src/main/java/org/springframework/http/server/reactive/ServletServerHttpResponse.java index ab7dd93c8d3..949be403dd4 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/ServletServerHttpResponse.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/ServletServerHttpResponse.java @@ -21,13 +21,12 @@ import java.io.InputStream; import java.nio.charset.Charset; import java.util.List; -import javax.servlet.AsyncContext; -import javax.servlet.AsyncEvent; -import javax.servlet.AsyncListener; -import javax.servlet.ServletOutputStream; -import javax.servlet.WriteListener; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.AsyncContext; +import jakarta.servlet.AsyncEvent; +import jakarta.servlet.AsyncListener; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.WriteListener; +import jakarta.servlet.http.HttpServletResponse; import org.reactivestreams.Processor; import org.reactivestreams.Publisher; diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/TomcatHttpHandlerAdapter.java b/spring-web/src/main/java/org/springframework/http/server/reactive/TomcatHttpHandlerAdapter.java index 7920c7ffd8b..f9a8e7277c5 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/TomcatHttpHandlerAdapter.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/TomcatHttpHandlerAdapter.java @@ -22,15 +22,14 @@ import java.net.URISyntaxException; import java.nio.ByteBuffer; import java.nio.charset.Charset; -import javax.servlet.AsyncContext; -import javax.servlet.ServletInputStream; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpServletResponseWrapper; - +import jakarta.servlet.AsyncContext; +import jakarta.servlet.ServletInputStream; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponseWrapper; import org.apache.catalina.connector.CoyoteInputStream; import org.apache.catalina.connector.CoyoteOutputStream; import org.apache.catalina.connector.RequestFacade; diff --git a/spring-web/src/main/java/org/springframework/web/HttpMediaTypeException.java b/spring-web/src/main/java/org/springframework/web/HttpMediaTypeException.java index 91c572147f8..0cd03ddb204 100644 --- a/spring-web/src/main/java/org/springframework/web/HttpMediaTypeException.java +++ b/spring-web/src/main/java/org/springframework/web/HttpMediaTypeException.java @@ -19,7 +19,7 @@ package org.springframework.web; import java.util.Collections; import java.util.List; -import javax.servlet.ServletException; +import jakarta.servlet.ServletException; import org.springframework.http.MediaType; diff --git a/spring-web/src/main/java/org/springframework/web/HttpRequestHandler.java b/spring-web/src/main/java/org/springframework/web/HttpRequestHandler.java index 187d9dd8c54..542e6080944 100644 --- a/spring-web/src/main/java/org/springframework/web/HttpRequestHandler.java +++ b/spring-web/src/main/java/org/springframework/web/HttpRequestHandler.java @@ -18,15 +18,15 @@ package org.springframework.web; import java.io.IOException; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; /** * Plain handler interface for components that process HTTP requests, - * analogous to a Servlet. Only declares {@link javax.servlet.ServletException} + * analogous to a Servlet. Only declares {@link jakarta.servlet.ServletException} * and {@link java.io.IOException}, to allow for usage within any - * {@link javax.servlet.http.HttpServlet}. This interface is essentially the + * {@link jakarta.servlet.http.HttpServlet}. This interface is essentially the * direct equivalent of an HttpServlet, reduced to a central handle method. * *

    The easiest way to expose an HttpRequestHandler bean in Spring style diff --git a/spring-web/src/main/java/org/springframework/web/HttpRequestMethodNotSupportedException.java b/spring-web/src/main/java/org/springframework/web/HttpRequestMethodNotSupportedException.java index 0e61da306db..4e1168d84de 100644 --- a/spring-web/src/main/java/org/springframework/web/HttpRequestMethodNotSupportedException.java +++ b/spring-web/src/main/java/org/springframework/web/HttpRequestMethodNotSupportedException.java @@ -22,7 +22,7 @@ import java.util.EnumSet; import java.util.List; import java.util.Set; -import javax.servlet.ServletException; +import jakarta.servlet.ServletException; import org.springframework.http.HttpMethod; import org.springframework.lang.Nullable; diff --git a/spring-web/src/main/java/org/springframework/web/HttpSessionRequiredException.java b/spring-web/src/main/java/org/springframework/web/HttpSessionRequiredException.java index 83a00b0de5a..eaffd9d96b7 100644 --- a/spring-web/src/main/java/org/springframework/web/HttpSessionRequiredException.java +++ b/spring-web/src/main/java/org/springframework/web/HttpSessionRequiredException.java @@ -16,7 +16,7 @@ package org.springframework.web; -import javax.servlet.ServletException; +import jakarta.servlet.ServletException; import org.springframework.lang.Nullable; diff --git a/spring-web/src/main/java/org/springframework/web/SpringServletContainerInitializer.java b/spring-web/src/main/java/org/springframework/web/SpringServletContainerInitializer.java index da3cd91c3d8..9b50031d97a 100644 --- a/spring-web/src/main/java/org/springframework/web/SpringServletContainerInitializer.java +++ b/spring-web/src/main/java/org/springframework/web/SpringServletContainerInitializer.java @@ -23,10 +23,10 @@ import java.util.List; import java.util.ServiceLoader; import java.util.Set; -import javax.servlet.ServletContainerInitializer; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.annotation.HandlesTypes; +import jakarta.servlet.ServletContainerInitializer; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.annotation.HandlesTypes; import org.springframework.core.annotation.AnnotationAwareOrderComparator; import org.springframework.lang.Nullable; @@ -43,7 +43,7 @@ import org.springframework.util.ReflectionUtils; * method invoked by any Servlet 3.0-compliant container during container startup assuming * that the {@code spring-web} module JAR is present on the classpath. This occurs through * the JAR Services API {@link ServiceLoader#load(Class)} method detecting the - * {@code spring-web} module's {@code META-INF/services/javax.servlet.ServletContainerInitializer} + * {@code spring-web} module's {@code META-INF/services/jakarta.servlet.ServletContainerInitializer} * service provider configuration file. See the * * JAR Services API documentation as well as section 8.2.4 of the Servlet 3.0 diff --git a/spring-web/src/main/java/org/springframework/web/WebApplicationInitializer.java b/spring-web/src/main/java/org/springframework/web/WebApplicationInitializer.java index 337f53291e7..ef326acbe8d 100644 --- a/spring-web/src/main/java/org/springframework/web/WebApplicationInitializer.java +++ b/spring-web/src/main/java/org/springframework/web/WebApplicationInitializer.java @@ -16,8 +16,8 @@ package org.springframework.web; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; /** * Interface to be implemented in Servlet 3.0+ environments in order to configure the diff --git a/spring-web/src/main/java/org/springframework/web/accept/AbstractMappingContentNegotiationStrategy.java b/spring-web/src/main/java/org/springframework/web/accept/AbstractMappingContentNegotiationStrategy.java index 5413a34a5a0..37385a7fd6e 100644 --- a/spring-web/src/main/java/org/springframework/web/accept/AbstractMappingContentNegotiationStrategy.java +++ b/spring-web/src/main/java/org/springframework/web/accept/AbstractMappingContentNegotiationStrategy.java @@ -42,7 +42,7 @@ import org.springframework.web.context.request.NativeWebRequest; * *

    The method {@link #handleNoMatch} allow sub-classes to plug in additional * ways of looking up media types (e.g. through the Java Activation framework, - * or {@link javax.servlet.ServletContext#getMimeType}. Media types resolved + * or {@link jakarta.servlet.ServletContext#getMimeType}. Media types resolved * via base classes are then added to the base class * {@link MappingMediaTypeFileExtensionResolver}, i.e. cached for new lookups. * diff --git a/spring-web/src/main/java/org/springframework/web/accept/ContentNegotiationManagerFactoryBean.java b/spring-web/src/main/java/org/springframework/web/accept/ContentNegotiationManagerFactoryBean.java index c23db8e97c9..a7c2358dd5e 100644 --- a/spring-web/src/main/java/org/springframework/web/accept/ContentNegotiationManagerFactoryBean.java +++ b/spring-web/src/main/java/org/springframework/web/accept/ContentNegotiationManagerFactoryBean.java @@ -23,7 +23,7 @@ import java.util.Locale; import java.util.Map; import java.util.Properties; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.InitializingBean; diff --git a/spring-web/src/main/java/org/springframework/web/accept/PathExtensionContentNegotiationStrategy.java b/spring-web/src/main/java/org/springframework/web/accept/PathExtensionContentNegotiationStrategy.java index 3fc337b377b..66a0354c1e5 100644 --- a/spring-web/src/main/java/org/springframework/web/accept/PathExtensionContentNegotiationStrategy.java +++ b/spring-web/src/main/java/org/springframework/web/accept/PathExtensionContentNegotiationStrategy.java @@ -19,7 +19,7 @@ package org.springframework.web.accept; import java.util.Locale; import java.util.Map; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.core.io.Resource; import org.springframework.http.MediaType; diff --git a/spring-web/src/main/java/org/springframework/web/accept/ServletPathExtensionContentNegotiationStrategy.java b/spring-web/src/main/java/org/springframework/web/accept/ServletPathExtensionContentNegotiationStrategy.java index f2a54958966..485727d718d 100644 --- a/spring-web/src/main/java/org/springframework/web/accept/ServletPathExtensionContentNegotiationStrategy.java +++ b/spring-web/src/main/java/org/springframework/web/accept/ServletPathExtensionContentNegotiationStrategy.java @@ -18,7 +18,7 @@ package org.springframework.web.accept; import java.util.Map; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import org.springframework.core.io.Resource; import org.springframework.http.MediaType; diff --git a/spring-web/src/main/java/org/springframework/web/bind/ServletRequestDataBinder.java b/spring-web/src/main/java/org/springframework/web/bind/ServletRequestDataBinder.java index 16bf30ee01f..db74e0020d3 100644 --- a/spring-web/src/main/java/org/springframework/web/bind/ServletRequestDataBinder.java +++ b/spring-web/src/main/java/org/springframework/web/bind/ServletRequestDataBinder.java @@ -16,8 +16,8 @@ package org.springframework.web.bind; -import javax.servlet.ServletRequest; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.beans.MutablePropertyValues; import org.springframework.http.HttpMethod; @@ -56,7 +56,7 @@ import org.springframework.web.util.WebUtils; * * @author Rod Johnson * @author Juergen Hoeller - * @see #bind(javax.servlet.ServletRequest) + * @see #bind(jakarta.servlet.ServletRequest) * @see #registerCustomEditor * @see #setAllowedFields * @see #setRequiredFields diff --git a/spring-web/src/main/java/org/springframework/web/bind/ServletRequestParameterPropertyValues.java b/spring-web/src/main/java/org/springframework/web/bind/ServletRequestParameterPropertyValues.java index 6d1b17de2c2..f127baee849 100644 --- a/spring-web/src/main/java/org/springframework/web/bind/ServletRequestParameterPropertyValues.java +++ b/spring-web/src/main/java/org/springframework/web/bind/ServletRequestParameterPropertyValues.java @@ -16,7 +16,7 @@ package org.springframework.web.bind; -import javax.servlet.ServletRequest; +import jakarta.servlet.ServletRequest; import org.springframework.beans.MutablePropertyValues; import org.springframework.lang.Nullable; diff --git a/spring-web/src/main/java/org/springframework/web/bind/ServletRequestUtils.java b/spring-web/src/main/java/org/springframework/web/bind/ServletRequestUtils.java index 9537758b793..f02c11fd830 100644 --- a/spring-web/src/main/java/org/springframework/web/bind/ServletRequestUtils.java +++ b/spring-web/src/main/java/org/springframework/web/bind/ServletRequestUtils.java @@ -16,7 +16,7 @@ package org.springframework.web.bind; -import javax.servlet.ServletRequest; +import jakarta.servlet.ServletRequest; import org.springframework.lang.Nullable; diff --git a/spring-web/src/main/java/org/springframework/web/bind/UnsatisfiedServletRequestParameterException.java b/spring-web/src/main/java/org/springframework/web/bind/UnsatisfiedServletRequestParameterException.java index 65002541148..feecdeef80f 100644 --- a/spring-web/src/main/java/org/springframework/web/bind/UnsatisfiedServletRequestParameterException.java +++ b/spring-web/src/main/java/org/springframework/web/bind/UnsatisfiedServletRequestParameterException.java @@ -107,7 +107,7 @@ public class UnsatisfiedServletRequestParameterException extends ServletRequestB /** * Return the actual parameter Map associated with the ServletRequest. - * @see javax.servlet.ServletRequest#getParameterMap() + * @see jakarta.servlet.ServletRequest#getParameterMap() */ public final Map getActualParams() { return this.actualParams; diff --git a/spring-web/src/main/java/org/springframework/web/bind/annotation/ControllerAdvice.java b/spring-web/src/main/java/org/springframework/web/bind/annotation/ControllerAdvice.java index decfce3eb1a..24cca20a939 100644 --- a/spring-web/src/main/java/org/springframework/web/bind/annotation/ControllerAdvice.java +++ b/spring-web/src/main/java/org/springframework/web/bind/annotation/ControllerAdvice.java @@ -36,7 +36,7 @@ import org.springframework.stereotype.Component; * as Spring beans or auto-detected via classpath scanning. All such beans are * sorted based on {@link org.springframework.core.Ordered Ordered} semantics or * {@link org.springframework.core.annotation.Order @Order} / - * {@link javax.annotation.Priority @Priority} declarations, with {@code Ordered} + * {@link jakarta.annotation.Priority @Priority} declarations, with {@code Ordered} * semantics taking precedence over {@code @Order} / {@code @Priority} declarations. * {@code @ControllerAdvice} beans are then applied in that order at runtime. * Note, however, that {@code @ControllerAdvice} beans that implement diff --git a/spring-web/src/main/java/org/springframework/web/bind/annotation/CookieValue.java b/spring-web/src/main/java/org/springframework/web/bind/annotation/CookieValue.java index 33e23a166a4..9e8f3dae56e 100644 --- a/spring-web/src/main/java/org/springframework/web/bind/annotation/CookieValue.java +++ b/spring-web/src/main/java/org/springframework/web/bind/annotation/CookieValue.java @@ -27,12 +27,12 @@ import org.springframework.core.annotation.AliasFor; /** * Annotation to indicate that a method parameter is bound to an HTTP cookie. * - *

    The method parameter may be declared as type {@link javax.servlet.http.Cookie} + *

    The method parameter may be declared as type {@link jakarta.servlet.http.Cookie} * or as cookie value type (String, int, etc.). * *

    Note that with spring-webmvc 5.3.x and earlier, the cookie value is URL * decoded. This will be changed in 6.0 but in the meantime, applications can - * also declare parameters of type {@link javax.servlet.http.Cookie} to access + * also declare parameters of type {@link jakarta.servlet.http.Cookie} to access * the raw value. * * @author Juergen Hoeller diff --git a/spring-web/src/main/java/org/springframework/web/bind/annotation/ExceptionHandler.java b/spring-web/src/main/java/org/springframework/web/bind/annotation/ExceptionHandler.java index 3f48fa43118..bf66c33ed05 100644 --- a/spring-web/src/main/java/org/springframework/web/bind/annotation/ExceptionHandler.java +++ b/spring-web/src/main/java/org/springframework/web/bind/annotation/ExceptionHandler.java @@ -38,8 +38,8 @@ import java.lang.annotation.Target; * exposed, whereas previously only an immediate cause was considered. *

  • Request and/or response objects (typically from the Servlet API). * You may choose any specific request/response type, e.g. - * {@link javax.servlet.ServletRequest} / {@link javax.servlet.http.HttpServletRequest}. - *
  • Session object: typically {@link javax.servlet.http.HttpSession}. + * {@link jakarta.servlet.ServletRequest} / {@link jakarta.servlet.http.HttpServletRequest}. + *
  • Session object: typically {@link jakarta.servlet.http.HttpSession}. * An argument of this type will enforce the presence of a corresponding session. * As a consequence, such an argument will never be {@code null}. * Note that session access may not be thread-safe, in particular in a @@ -88,7 +88,7 @@ import java.lang.annotation.Target; * {@linkplain org.springframework.http.converter.HttpMessageConverter message converters}. *
  • {@code void} if the method handles the response itself (by * writing the response content directly, declaring an argument of type - * {@link javax.servlet.ServletResponse} / {@link javax.servlet.http.HttpServletResponse} + * {@link jakarta.servlet.ServletResponse} / {@link jakarta.servlet.http.HttpServletResponse} * for that purpose) or if the view name is supposed to be implicitly determined * through a {@link org.springframework.web.servlet.RequestToViewNameTranslator} * (not declaring a response argument in the handler method signature). diff --git a/spring-web/src/main/java/org/springframework/web/bind/annotation/RequestMapping.java b/spring-web/src/main/java/org/springframework/web/bind/annotation/RequestMapping.java index eb3f0d962e1..6d59dd4aec0 100644 --- a/spring-web/src/main/java/org/springframework/web/bind/annotation/RequestMapping.java +++ b/spring-web/src/main/java/org/springframework/web/bind/annotation/RequestMapping.java @@ -176,7 +176,7 @@ public @interface RequestMapping { * If specified at both levels, the method level consumes condition overrides * the type level condition. * @see org.springframework.http.MediaType - * @see javax.servlet.http.HttpServletRequest#getContentType() + * @see jakarta.servlet.http.HttpServletRequest#getContentType() */ String[] consumes() default {}; diff --git a/spring-web/src/main/java/org/springframework/web/bind/annotation/RequestPart.java b/spring-web/src/main/java/org/springframework/web/bind/annotation/RequestPart.java index 0f8b430e54a..b84f09ffd72 100644 --- a/spring-web/src/main/java/org/springframework/web/bind/annotation/RequestPart.java +++ b/spring-web/src/main/java/org/springframework/web/bind/annotation/RequestPart.java @@ -34,7 +34,7 @@ import org.springframework.web.multipart.MultipartResolver; * with a method argument. * *

    Supported method argument types include {@link MultipartFile} in conjunction with - * Spring's {@link MultipartResolver} abstraction, {@code javax.servlet.http.Part} in + * Spring's {@link MultipartResolver} abstraction, {@code jakarta.servlet.http.Part} in * conjunction with Servlet 3.0 multipart requests, or otherwise for any other method * argument, the content of the part is passed through an {@link HttpMessageConverter} * taking into consideration the 'Content-Type' header of the request part. This is diff --git a/spring-web/src/main/java/org/springframework/web/bind/annotation/ResponseStatus.java b/spring-web/src/main/java/org/springframework/web/bind/annotation/ResponseStatus.java index 999348c91b7..f69fef63fc7 100644 --- a/spring-web/src/main/java/org/springframework/web/bind/annotation/ResponseStatus.java +++ b/spring-web/src/main/java/org/springframework/web/bind/annotation/ResponseStatus.java @@ -53,7 +53,7 @@ import org.springframework.http.HttpStatus; * @author Sam Brannen * @since 3.0 * @see org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver - * @see javax.servlet.http.HttpServletResponse#sendError(int, String) + * @see jakarta.servlet.http.HttpServletResponse#sendError(int, String) */ @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @@ -71,8 +71,8 @@ public @interface ResponseStatus { *

    Default is {@link HttpStatus#INTERNAL_SERVER_ERROR}, which should * typically be changed to something more appropriate. * @since 4.2 - * @see javax.servlet.http.HttpServletResponse#setStatus(int) - * @see javax.servlet.http.HttpServletResponse#sendError(int) + * @see jakarta.servlet.http.HttpServletResponse#setStatus(int) + * @see jakarta.servlet.http.HttpServletResponse#sendError(int) */ @AliasFor("value") HttpStatus code() default HttpStatus.INTERNAL_SERVER_ERROR; @@ -81,7 +81,7 @@ public @interface ResponseStatus { * The reason to be used for the response. *

    Defaults to an empty string which will be ignored. Set the reason to a * non-empty value to have it used for the response. - * @see javax.servlet.http.HttpServletResponse#sendError(int, String) + * @see jakarta.servlet.http.HttpServletResponse#sendError(int, String) */ String reason() default ""; diff --git a/spring-web/src/main/java/org/springframework/web/bind/annotation/SessionAttribute.java b/spring-web/src/main/java/org/springframework/web/bind/annotation/SessionAttribute.java index ca06dd1bdae..7d6775308ee 100644 --- a/spring-web/src/main/java/org/springframework/web/bind/annotation/SessionAttribute.java +++ b/spring-web/src/main/java/org/springframework/web/bind/annotation/SessionAttribute.java @@ -33,7 +33,7 @@ import org.springframework.core.annotation.AliasFor; * *

    For use cases that require adding or removing session attributes consider * injecting {@code org.springframework.web.context.request.WebRequest} or - * {@code javax.servlet.http.HttpSession} into the controller method. + * {@code jakarta.servlet.http.HttpSession} into the controller method. * *

    For temporary storage of model attributes in the session as part of the * workflow for a controller, consider using {@link SessionAttributes} instead. diff --git a/spring-web/src/main/java/org/springframework/web/bind/support/SpringWebConstraintValidatorFactory.java b/spring-web/src/main/java/org/springframework/web/bind/support/SpringWebConstraintValidatorFactory.java index b795b3eb718..dcbc1a4c7a8 100644 --- a/spring-web/src/main/java/org/springframework/web/bind/support/SpringWebConstraintValidatorFactory.java +++ b/spring-web/src/main/java/org/springframework/web/bind/support/SpringWebConstraintValidatorFactory.java @@ -16,8 +16,8 @@ package org.springframework.web.bind.support; -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorFactory; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorFactory; import org.springframework.web.context.ContextLoader; import org.springframework.web.context.WebApplicationContext; diff --git a/spring-web/src/main/java/org/springframework/web/bind/support/WebRequestDataBinder.java b/spring-web/src/main/java/org/springframework/web/bind/support/WebRequestDataBinder.java index 76ea4abddab..23e747a17c8 100644 --- a/spring-web/src/main/java/org/springframework/web/bind/support/WebRequestDataBinder.java +++ b/spring-web/src/main/java/org/springframework/web/bind/support/WebRequestDataBinder.java @@ -16,7 +16,7 @@ package org.springframework.web.bind.support; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.beans.MutablePropertyValues; import org.springframework.http.HttpHeaders; @@ -104,7 +104,7 @@ public class WebRequestDataBinder extends WebDataBinder { * @param request the request with parameters to bind (can be multipart) * @see org.springframework.web.multipart.MultipartRequest * @see org.springframework.web.multipart.MultipartFile - * @see javax.servlet.http.Part + * @see jakarta.servlet.http.Part * @see #bind(org.springframework.beans.PropertyValues) */ public void bind(WebRequest request) { diff --git a/spring-web/src/main/java/org/springframework/web/client/RestTemplate.java b/spring-web/src/main/java/org/springframework/web/client/RestTemplate.java index 22662632475..3d1bcb5b0a7 100644 --- a/spring-web/src/main/java/org/springframework/web/client/RestTemplate.java +++ b/spring-web/src/main/java/org/springframework/web/client/RestTemplate.java @@ -121,14 +121,14 @@ public class RestTemplate extends InterceptingHttpAccessor implements RestOperat static { ClassLoader classLoader = RestTemplate.class.getClassLoader(); romePresent = ClassUtils.isPresent("com.rometools.rome.feed.WireFeed", classLoader); - jaxb2Present = ClassUtils.isPresent("javax.xml.bind.Binder", classLoader); + jaxb2Present = ClassUtils.isPresent("jakarta.xml.bind.Binder", classLoader); jackson2Present = ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", classLoader) && ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", classLoader); jackson2XmlPresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.xml.XmlMapper", classLoader); jackson2SmilePresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.smile.SmileFactory", classLoader); jackson2CborPresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.cbor.CBORFactory", classLoader); gsonPresent = ClassUtils.isPresent("com.google.gson.Gson", classLoader); - jsonbPresent = ClassUtils.isPresent("javax.json.bind.Jsonb", classLoader); + jsonbPresent = ClassUtils.isPresent("jakarta.json.bind.Jsonb", classLoader); kotlinSerializationJsonPresent = ClassUtils.isPresent("kotlinx.serialization.json.Json", classLoader); } diff --git a/spring-web/src/main/java/org/springframework/web/context/AbstractContextLoaderInitializer.java b/spring-web/src/main/java/org/springframework/web/context/AbstractContextLoaderInitializer.java index 6cb40688e34..01fae7c0aea 100644 --- a/spring-web/src/main/java/org/springframework/web/context/AbstractContextLoaderInitializer.java +++ b/spring-web/src/main/java/org/springframework/web/context/AbstractContextLoaderInitializer.java @@ -16,9 +16,8 @@ package org.springframework.web.context; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; - +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/spring-web/src/main/java/org/springframework/web/context/ConfigurableWebApplicationContext.java b/spring-web/src/main/java/org/springframework/web/context/ConfigurableWebApplicationContext.java index c08b195fcdb..831bad5cf1a 100644 --- a/spring-web/src/main/java/org/springframework/web/context/ConfigurableWebApplicationContext.java +++ b/spring-web/src/main/java/org/springframework/web/context/ConfigurableWebApplicationContext.java @@ -16,8 +16,8 @@ package org.springframework.web.context; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletContext; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.lang.Nullable; @@ -47,7 +47,7 @@ public interface ConfigurableWebApplicationContext extends WebApplicationContext /** * Name of the ServletConfig environment bean in the factory. - * @see javax.servlet.ServletConfig + * @see jakarta.servlet.ServletConfig */ String SERVLET_CONFIG_BEAN_NAME = "servletConfig"; diff --git a/spring-web/src/main/java/org/springframework/web/context/ConfigurableWebEnvironment.java b/spring-web/src/main/java/org/springframework/web/context/ConfigurableWebEnvironment.java index 6d92f54530a..d077036403a 100644 --- a/spring-web/src/main/java/org/springframework/web/context/ConfigurableWebEnvironment.java +++ b/spring-web/src/main/java/org/springframework/web/context/ConfigurableWebEnvironment.java @@ -16,8 +16,8 @@ package org.springframework.web.context; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletContext; import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.lang.Nullable; diff --git a/spring-web/src/main/java/org/springframework/web/context/ContextCleanupListener.java b/spring-web/src/main/java/org/springframework/web/context/ContextCleanupListener.java index 4225e0aba18..02034d0a19f 100644 --- a/spring-web/src/main/java/org/springframework/web/context/ContextCleanupListener.java +++ b/spring-web/src/main/java/org/springframework/web/context/ContextCleanupListener.java @@ -18,10 +18,9 @@ package org.springframework.web.context; import java.util.Enumeration; -import javax.servlet.ServletContext; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; - +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/spring-web/src/main/java/org/springframework/web/context/ContextLoader.java b/spring-web/src/main/java/org/springframework/web/context/ContextLoader.java index dfd4b0196ca..722fb7a1700 100644 --- a/spring-web/src/main/java/org/springframework/web/context/ContextLoader.java +++ b/spring-web/src/main/java/org/springframework/web/context/ContextLoader.java @@ -23,8 +23,7 @@ import java.util.Map; import java.util.Properties; import java.util.concurrent.ConcurrentHashMap; -import javax.servlet.ServletContext; - +import jakarta.servlet.ServletContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/spring-web/src/main/java/org/springframework/web/context/ContextLoaderListener.java b/spring-web/src/main/java/org/springframework/web/context/ContextLoaderListener.java index 3c4d4072225..3f57d676453 100644 --- a/spring-web/src/main/java/org/springframework/web/context/ContextLoaderListener.java +++ b/spring-web/src/main/java/org/springframework/web/context/ContextLoaderListener.java @@ -16,8 +16,8 @@ package org.springframework.web.context; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; /** * Bootstrap listener to start up and shut down Spring's root {@link WebApplicationContext}. @@ -59,7 +59,7 @@ public class ContextLoaderListener extends ContextLoader implements ServletConte /** * Create a new {@code ContextLoaderListener} with the given application context. This * constructor is useful in Servlet 3.0+ environments where instance-based - * registration of listeners is possible through the {@link javax.servlet.ServletContext#addListener} + * registration of listeners is possible through the {@link jakarta.servlet.ServletContext#addListener} * API. *

    The context may or may not yet be {@linkplain * org.springframework.context.ConfigurableApplicationContext#refresh() refreshed}. If it diff --git a/spring-web/src/main/java/org/springframework/web/context/ServletConfigAware.java b/spring-web/src/main/java/org/springframework/web/context/ServletConfigAware.java index aaa5a903909..60f399c1c3c 100644 --- a/spring-web/src/main/java/org/springframework/web/context/ServletConfigAware.java +++ b/spring-web/src/main/java/org/springframework/web/context/ServletConfigAware.java @@ -16,7 +16,7 @@ package org.springframework.web.context; -import javax.servlet.ServletConfig; +import jakarta.servlet.ServletConfig; import org.springframework.beans.factory.Aware; diff --git a/spring-web/src/main/java/org/springframework/web/context/ServletContextAware.java b/spring-web/src/main/java/org/springframework/web/context/ServletContextAware.java index 709cce1c6ac..ebb47e56b5b 100644 --- a/spring-web/src/main/java/org/springframework/web/context/ServletContextAware.java +++ b/spring-web/src/main/java/org/springframework/web/context/ServletContextAware.java @@ -16,7 +16,7 @@ package org.springframework.web.context; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import org.springframework.beans.factory.Aware; diff --git a/spring-web/src/main/java/org/springframework/web/context/WebApplicationContext.java b/spring-web/src/main/java/org/springframework/web/context/WebApplicationContext.java index b2c15d545c9..cef05098482 100644 --- a/spring-web/src/main/java/org/springframework/web/context/WebApplicationContext.java +++ b/spring-web/src/main/java/org/springframework/web/context/WebApplicationContext.java @@ -16,7 +16,7 @@ package org.springframework.web.context; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import org.springframework.context.ApplicationContext; import org.springframework.lang.Nullable; @@ -74,7 +74,7 @@ public interface WebApplicationContext extends ApplicationContext { /** * Name of the ServletContext environment bean in the factory. - * @see javax.servlet.ServletContext + * @see jakarta.servlet.ServletContext */ String SERVLET_CONTEXT_BEAN_NAME = "servletContext"; @@ -82,17 +82,17 @@ public interface WebApplicationContext extends ApplicationContext { * Name of the ServletContext init-params environment bean in the factory. *

    Note: Possibly merged with ServletConfig parameters. * ServletConfig parameters override ServletContext parameters of the same name. - * @see javax.servlet.ServletContext#getInitParameterNames() - * @see javax.servlet.ServletContext#getInitParameter(String) - * @see javax.servlet.ServletConfig#getInitParameterNames() - * @see javax.servlet.ServletConfig#getInitParameter(String) + * @see jakarta.servlet.ServletContext#getInitParameterNames() + * @see jakarta.servlet.ServletContext#getInitParameter(String) + * @see jakarta.servlet.ServletConfig#getInitParameterNames() + * @see jakarta.servlet.ServletConfig#getInitParameter(String) */ String CONTEXT_PARAMETERS_BEAN_NAME = "contextParameters"; /** * Name of the ServletContext attributes environment bean in the factory. - * @see javax.servlet.ServletContext#getAttributeNames() - * @see javax.servlet.ServletContext#getAttribute(String) + * @see jakarta.servlet.ServletContext#getAttributeNames() + * @see jakarta.servlet.ServletContext#getAttribute(String) */ String CONTEXT_ATTRIBUTES_BEAN_NAME = "contextAttributes"; diff --git a/spring-web/src/main/java/org/springframework/web/context/request/DestructionCallbackBindingListener.java b/spring-web/src/main/java/org/springframework/web/context/request/DestructionCallbackBindingListener.java index 69e280bd7d9..57ef0b4110f 100644 --- a/spring-web/src/main/java/org/springframework/web/context/request/DestructionCallbackBindingListener.java +++ b/spring-web/src/main/java/org/springframework/web/context/request/DestructionCallbackBindingListener.java @@ -18,8 +18,8 @@ package org.springframework.web.context.request; import java.io.Serializable; -import javax.servlet.http.HttpSessionBindingEvent; -import javax.servlet.http.HttpSessionBindingListener; +import jakarta.servlet.http.HttpSessionBindingEvent; +import jakarta.servlet.http.HttpSessionBindingListener; /** * Adapter that implements the Servlet HttpSessionBindingListener interface, diff --git a/spring-web/src/main/java/org/springframework/web/context/request/FacesRequestAttributes.java b/spring-web/src/main/java/org/springframework/web/context/request/FacesRequestAttributes.java index 9937a0c076f..14df22d3b0e 100644 --- a/spring-web/src/main/java/org/springframework/web/context/request/FacesRequestAttributes.java +++ b/spring-web/src/main/java/org/springframework/web/context/request/FacesRequestAttributes.java @@ -19,9 +19,8 @@ package org.springframework.web.context.request; import java.lang.reflect.Method; import java.util.Map; -import javax.faces.context.ExternalContext; -import javax.faces.context.FacesContext; - +import jakarta.faces.context.ExternalContext; +import jakarta.faces.context.FacesContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -31,7 +30,7 @@ import org.springframework.util.StringUtils; import org.springframework.web.util.WebUtils; /** - * {@link RequestAttributes} adapter for a JSF {@link javax.faces.context.FacesContext}. + * {@link RequestAttributes} adapter for a JSF {@link jakarta.faces.context.FacesContext}. * Used as default in a JSF environment, wrapping the current FacesContext. * *

    NOTE: In contrast to {@link ServletRequestAttributes}, this variant does @@ -44,9 +43,9 @@ import org.springframework.web.util.WebUtils; * * @author Juergen Hoeller * @since 2.5.2 - * @see javax.faces.context.FacesContext#getExternalContext() - * @see javax.faces.context.ExternalContext#getRequestMap() - * @see javax.faces.context.ExternalContext#getSessionMap() + * @see jakarta.faces.context.FacesContext#getExternalContext() + * @see jakarta.faces.context.ExternalContext#getRequestMap() + * @see jakarta.faces.context.ExternalContext#getSessionMap() * @see RequestContextHolder#currentRequestAttributes() */ public class FacesRequestAttributes implements RequestAttributes { @@ -62,7 +61,7 @@ public class FacesRequestAttributes implements RequestAttributes { /** * Create a new FacesRequestAttributes adapter for the given FacesContext. * @param facesContext the current FacesContext - * @see javax.faces.context.FacesContext#getCurrentInstance() + * @see jakarta.faces.context.FacesContext#getCurrentInstance() */ public FacesRequestAttributes(FacesContext facesContext) { Assert.notNull(facesContext, "FacesContext must not be null"); @@ -79,7 +78,7 @@ public class FacesRequestAttributes implements RequestAttributes { /** * Return the JSF ExternalContext that this adapter operates on. - * @see javax.faces.context.FacesContext#getExternalContext() + * @see jakarta.faces.context.FacesContext#getExternalContext() */ protected final ExternalContext getExternalContext() { return getFacesContext().getExternalContext(); diff --git a/spring-web/src/main/java/org/springframework/web/context/request/FacesWebRequest.java b/spring-web/src/main/java/org/springframework/web/context/request/FacesWebRequest.java index d3d56213fa8..733a6e8405e 100644 --- a/spring-web/src/main/java/org/springframework/web/context/request/FacesWebRequest.java +++ b/spring-web/src/main/java/org/springframework/web/context/request/FacesWebRequest.java @@ -21,14 +21,14 @@ import java.util.Iterator; import java.util.Locale; import java.util.Map; -import javax.faces.context.ExternalContext; -import javax.faces.context.FacesContext; +import jakarta.faces.context.ExternalContext; +import jakarta.faces.context.FacesContext; import org.springframework.lang.Nullable; import org.springframework.util.StringUtils; /** - * {@link WebRequest} adapter for a JSF {@link javax.faces.context.FacesContext}. + * {@link WebRequest} adapter for a JSF {@link jakarta.faces.context.FacesContext}. * *

    Requires JSF 2.0 or higher, as of Spring 4.0. * @@ -40,7 +40,7 @@ public class FacesWebRequest extends FacesRequestAttributes implements NativeWeb /** * Create a new FacesWebRequest adapter for the given FacesContext. * @param facesContext the current FacesContext - * @see javax.faces.context.FacesContext#getCurrentInstance() + * @see jakarta.faces.context.FacesContext#getCurrentInstance() */ public FacesWebRequest(FacesContext facesContext) { super(facesContext); diff --git a/spring-web/src/main/java/org/springframework/web/context/request/NativeWebRequest.java b/spring-web/src/main/java/org/springframework/web/context/request/NativeWebRequest.java index cf2e3247fb7..8d90775760a 100644 --- a/spring-web/src/main/java/org/springframework/web/context/request/NativeWebRequest.java +++ b/spring-web/src/main/java/org/springframework/web/context/request/NativeWebRequest.java @@ -32,13 +32,13 @@ public interface NativeWebRequest extends WebRequest { /** * Return the underlying native request object. - * @see javax.servlet.http.HttpServletRequest + * @see jakarta.servlet.http.HttpServletRequest */ Object getNativeRequest(); /** * Return the underlying native response object, if any. - * @see javax.servlet.http.HttpServletResponse + * @see jakarta.servlet.http.HttpServletResponse */ @Nullable Object getNativeResponse(); @@ -48,7 +48,7 @@ public interface NativeWebRequest extends WebRequest { * @param requiredType the desired type of request object * @return the matching request object, or {@code null} if none * of that type is available - * @see javax.servlet.http.HttpServletRequest + * @see jakarta.servlet.http.HttpServletRequest */ @Nullable T getNativeRequest(@Nullable Class requiredType); @@ -58,7 +58,7 @@ public interface NativeWebRequest extends WebRequest { * @param requiredType the desired type of response object * @return the matching response object, or {@code null} if none * of that type is available - * @see javax.servlet.http.HttpServletResponse + * @see jakarta.servlet.http.HttpServletResponse */ @Nullable T getNativeResponse(@Nullable Class requiredType); diff --git a/spring-web/src/main/java/org/springframework/web/context/request/RequestContextHolder.java b/spring-web/src/main/java/org/springframework/web/context/request/RequestContextHolder.java index a52c9915afc..ba63120383d 100644 --- a/spring-web/src/main/java/org/springframework/web/context/request/RequestContextHolder.java +++ b/spring-web/src/main/java/org/springframework/web/context/request/RequestContextHolder.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,7 +16,7 @@ package org.springframework.web.context.request; -import javax.faces.context.FacesContext; +import jakarta.faces.context.FacesContext; import org.springframework.core.NamedInheritableThreadLocal; import org.springframework.core.NamedThreadLocal; @@ -45,7 +45,7 @@ import org.springframework.util.ClassUtils; public abstract class RequestContextHolder { private static final boolean jsfPresent = - ClassUtils.isPresent("javax.faces.context.FacesContext", RequestContextHolder.class.getClassLoader()); + ClassUtils.isPresent("jakarta.faces.context.FacesContext", RequestContextHolder.class.getClassLoader()); private static final ThreadLocal requestAttributesHolder = new NamedThreadLocal<>("Request attributes"); @@ -119,7 +119,7 @@ public abstract class RequestContextHolder { * @see #setRequestAttributes * @see ServletRequestAttributes * @see FacesRequestAttributes - * @see javax.faces.context.FacesContext#getCurrentInstance() + * @see jakarta.faces.context.FacesContext#getCurrentInstance() */ public static RequestAttributes currentRequestAttributes() throws IllegalStateException { RequestAttributes attributes = getRequestAttributes(); @@ -147,8 +147,14 @@ public abstract class RequestContextHolder { @Nullable public static RequestAttributes getFacesRequestAttributes() { - FacesContext facesContext = FacesContext.getCurrentInstance(); - return (facesContext != null ? new FacesRequestAttributes(facesContext) : null); + try { + FacesContext facesContext = FacesContext.getCurrentInstance(); + return (facesContext != null ? new FacesRequestAttributes(facesContext) : null); + } + catch (NoClassDefFoundError err) { + // typically for com/sun/faces/util/Util if only the JSF API jar is present + return null; + } } } diff --git a/spring-web/src/main/java/org/springframework/web/context/request/RequestContextListener.java b/spring-web/src/main/java/org/springframework/web/context/request/RequestContextListener.java index ef42dba98ee..d6d1e3c3e80 100644 --- a/spring-web/src/main/java/org/springframework/web/context/request/RequestContextListener.java +++ b/spring-web/src/main/java/org/springframework/web/context/request/RequestContextListener.java @@ -16,9 +16,9 @@ package org.springframework.web.context.request; -import javax.servlet.ServletRequestEvent; -import javax.servlet.ServletRequestListener; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.ServletRequestEvent; +import jakarta.servlet.ServletRequestListener; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.context.i18n.LocaleContextHolder; @@ -37,7 +37,7 @@ import org.springframework.context.i18n.LocaleContextHolder; * * @author Juergen Hoeller * @since 2.0 - * @see javax.servlet.ServletRequestListener + * @see jakarta.servlet.ServletRequestListener * @see org.springframework.context.i18n.LocaleContextHolder * @see RequestContextHolder * @see org.springframework.web.filter.RequestContextFilter diff --git a/spring-web/src/main/java/org/springframework/web/context/request/ServletRequestAttributes.java b/spring-web/src/main/java/org/springframework/web/context/request/ServletRequestAttributes.java index 88a46f8d84f..a767b0b98f5 100644 --- a/spring-web/src/main/java/org/springframework/web/context/request/ServletRequestAttributes.java +++ b/spring-web/src/main/java/org/springframework/web/context/request/ServletRequestAttributes.java @@ -21,9 +21,9 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; import org.springframework.lang.Nullable; import org.springframework.util.Assert; @@ -39,8 +39,8 @@ import org.springframework.web.util.WebUtils; * * @author Juergen Hoeller * @since 2.0 - * @see javax.servlet.ServletRequest#getAttribute - * @see javax.servlet.http.HttpSession#getAttribute + * @see jakarta.servlet.ServletRequest#getAttribute + * @see jakarta.servlet.http.HttpSession#getAttribute */ public class ServletRequestAttributes extends AbstractRequestAttributes { diff --git a/spring-web/src/main/java/org/springframework/web/context/request/ServletWebRequest.java b/spring-web/src/main/java/org/springframework/web/context/request/ServletWebRequest.java index 5fef231f283..1b2917cf5ae 100644 --- a/spring-web/src/main/java/org/springframework/web/context/request/ServletWebRequest.java +++ b/spring-web/src/main/java/org/springframework/web/context/request/ServletWebRequest.java @@ -29,9 +29,9 @@ import java.util.TimeZone; import java.util.regex.Matcher; import java.util.regex.Pattern; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; @@ -43,7 +43,7 @@ import org.springframework.util.StringUtils; import org.springframework.web.util.WebUtils; /** - * {@link WebRequest} adapter for an {@link javax.servlet.http.HttpServletRequest}. + * {@link WebRequest} adapter for an {@link jakarta.servlet.http.HttpServletRequest}. * * @author Juergen Hoeller * @author Brian Clozel diff --git a/spring-web/src/main/java/org/springframework/web/context/request/WebRequest.java b/spring-web/src/main/java/org/springframework/web/context/request/WebRequest.java index 6985a3e564b..fe8cdf48053 100644 --- a/spring-web/src/main/java/org/springframework/web/context/request/WebRequest.java +++ b/spring-web/src/main/java/org/springframework/web/context/request/WebRequest.java @@ -39,7 +39,7 @@ public interface WebRequest extends RequestAttributes { * Return the request header of the given name, or {@code null} if none. *

    Retrieves the first header value in case of a multi-value header. * @since 3.0 - * @see javax.servlet.http.HttpServletRequest#getHeader(String) + * @see jakarta.servlet.http.HttpServletRequest#getHeader(String) */ @Nullable String getHeader(String headerName); @@ -49,7 +49,7 @@ public interface WebRequest extends RequestAttributes { * or {@code null} if none. *

    A single-value header will be exposed as an array with a single element. * @since 3.0 - * @see javax.servlet.http.HttpServletRequest#getHeaders(String) + * @see jakarta.servlet.http.HttpServletRequest#getHeaders(String) */ @Nullable String[] getHeaderValues(String headerName); @@ -57,14 +57,14 @@ public interface WebRequest extends RequestAttributes { /** * Return a Iterator over request header names. * @since 3.0 - * @see javax.servlet.http.HttpServletRequest#getHeaderNames() + * @see jakarta.servlet.http.HttpServletRequest#getHeaderNames() */ Iterator getHeaderNames(); /** * Return the request parameter of the given name, or {@code null} if none. *

    Retrieves the first parameter value in case of a multi-value parameter. - * @see javax.servlet.http.HttpServletRequest#getParameter(String) + * @see jakarta.servlet.http.HttpServletRequest#getParameter(String) */ @Nullable String getParameter(String paramName); @@ -73,7 +73,7 @@ public interface WebRequest extends RequestAttributes { * Return the request parameter values for the given parameter name, * or {@code null} if none. *

    A single-value parameter will be exposed as an array with a single element. - * @see javax.servlet.http.HttpServletRequest#getParameterValues(String) + * @see jakarta.servlet.http.HttpServletRequest#getParameterValues(String) */ @Nullable String[] getParameterValues(String paramName); @@ -81,7 +81,7 @@ public interface WebRequest extends RequestAttributes { /** * Return a Iterator over request parameter names. * @since 3.0 - * @see javax.servlet.http.HttpServletRequest#getParameterNames() + * @see jakarta.servlet.http.HttpServletRequest#getParameterNames() */ Iterator getParameterNames(); @@ -89,47 +89,47 @@ public interface WebRequest extends RequestAttributes { * Return a immutable Map of the request parameters, with parameter names as map keys * and parameter values as map values. The map values will be of type String array. *

    A single-value parameter will be exposed as an array with a single element. - * @see javax.servlet.http.HttpServletRequest#getParameterMap() + * @see jakarta.servlet.http.HttpServletRequest#getParameterMap() */ Map getParameterMap(); /** * Return the primary Locale for this request. - * @see javax.servlet.http.HttpServletRequest#getLocale() + * @see jakarta.servlet.http.HttpServletRequest#getLocale() */ Locale getLocale(); /** * Return the context path for this request * (usually the base path that the current web application is mapped to). - * @see javax.servlet.http.HttpServletRequest#getContextPath() + * @see jakarta.servlet.http.HttpServletRequest#getContextPath() */ String getContextPath(); /** * Return the remote user for this request, if any. - * @see javax.servlet.http.HttpServletRequest#getRemoteUser() + * @see jakarta.servlet.http.HttpServletRequest#getRemoteUser() */ @Nullable String getRemoteUser(); /** * Return the user principal for this request, if any. - * @see javax.servlet.http.HttpServletRequest#getUserPrincipal() + * @see jakarta.servlet.http.HttpServletRequest#getUserPrincipal() */ @Nullable Principal getUserPrincipal(); /** * Determine whether the user is in the given role for this request. - * @see javax.servlet.http.HttpServletRequest#isUserInRole(String) + * @see jakarta.servlet.http.HttpServletRequest#isUserInRole(String) */ boolean isUserInRole(String role); /** * Return whether this request has been sent over a secure transport * mechanism (such as SSL). - * @see javax.servlet.http.HttpServletRequest#isSecure() + * @see jakarta.servlet.http.HttpServletRequest#isSecure() */ boolean isSecure(); diff --git a/spring-web/src/main/java/org/springframework/web/context/request/async/StandardServletAsyncWebRequest.java b/spring-web/src/main/java/org/springframework/web/context/request/async/StandardServletAsyncWebRequest.java index 06e4721cb97..18d29550bfd 100644 --- a/spring-web/src/main/java/org/springframework/web/context/request/async/StandardServletAsyncWebRequest.java +++ b/spring-web/src/main/java/org/springframework/web/context/request/async/StandardServletAsyncWebRequest.java @@ -22,11 +22,11 @@ import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Consumer; -import javax.servlet.AsyncContext; -import javax.servlet.AsyncEvent; -import javax.servlet.AsyncListener; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.AsyncContext; +import jakarta.servlet.AsyncEvent; +import jakarta.servlet.AsyncListener; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.util.Assert; import org.springframework.web.context.request.ServletWebRequest; diff --git a/spring-web/src/main/java/org/springframework/web/context/request/async/WebAsyncManager.java b/spring-web/src/main/java/org/springframework/web/context/request/async/WebAsyncManager.java index 960ead38d05..9b7e1c48468 100644 --- a/spring-web/src/main/java/org/springframework/web/context/request/async/WebAsyncManager.java +++ b/spring-web/src/main/java/org/springframework/web/context/request/async/WebAsyncManager.java @@ -24,8 +24,7 @@ import java.util.concurrent.Callable; import java.util.concurrent.Future; import java.util.concurrent.RejectedExecutionException; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -99,7 +98,7 @@ public final class WebAsyncManager { /** * Package-private constructor. - * @see WebAsyncUtils#getAsyncManager(javax.servlet.ServletRequest) + * @see WebAsyncUtils#getAsyncManager(jakarta.servlet.ServletRequest) * @see WebAsyncUtils#getAsyncManager(org.springframework.web.context.request.WebRequest) */ WebAsyncManager() { diff --git a/spring-web/src/main/java/org/springframework/web/context/request/async/WebAsyncUtils.java b/spring-web/src/main/java/org/springframework/web/context/request/async/WebAsyncUtils.java index abd2336ab1d..2798bb2158e 100644 --- a/spring-web/src/main/java/org/springframework/web/context/request/async/WebAsyncUtils.java +++ b/spring-web/src/main/java/org/springframework/web/context/request/async/WebAsyncUtils.java @@ -16,9 +16,9 @@ package org.springframework.web.context.request.async; -import javax.servlet.ServletRequest; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.WebRequest; diff --git a/spring-web/src/main/java/org/springframework/web/context/support/AbstractRefreshableWebApplicationContext.java b/spring-web/src/main/java/org/springframework/web/context/support/AbstractRefreshableWebApplicationContext.java index 6c47fc938fe..86ac23e6b2f 100644 --- a/spring-web/src/main/java/org/springframework/web/context/support/AbstractRefreshableWebApplicationContext.java +++ b/spring-web/src/main/java/org/springframework/web/context/support/AbstractRefreshableWebApplicationContext.java @@ -16,8 +16,8 @@ package org.springframework.web.context.support; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletContext; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.context.support.AbstractRefreshableConfigApplicationContext; diff --git a/spring-web/src/main/java/org/springframework/web/context/support/AnnotationConfigWebApplicationContext.java b/spring-web/src/main/java/org/springframework/web/context/support/AnnotationConfigWebApplicationContext.java index 5de3b4352b2..ae2ffee7e65 100644 --- a/spring-web/src/main/java/org/springframework/web/context/support/AnnotationConfigWebApplicationContext.java +++ b/spring-web/src/main/java/org/springframework/web/context/support/AnnotationConfigWebApplicationContext.java @@ -38,7 +38,7 @@ import org.springframework.web.context.ContextLoader; * implementation which accepts component classes as input — in particular * {@link org.springframework.context.annotation.Configuration @Configuration}-annotated * classes, but also plain {@link org.springframework.stereotype.Component @Component} - * classes and JSR-330 compliant classes using {@code javax.inject} annotations. + * classes and JSR-330 compliant classes using {@code jakarta.inject} annotations. * *

    Allows for registering classes one by one (specifying class names as config * location) as well as for classpath scanning (specifying base packages as config location). diff --git a/spring-web/src/main/java/org/springframework/web/context/support/ContextExposingHttpServletRequest.java b/spring-web/src/main/java/org/springframework/web/context/support/ContextExposingHttpServletRequest.java index fc6f1af7a5f..55b32a46cab 100644 --- a/spring-web/src/main/java/org/springframework/web/context/support/ContextExposingHttpServletRequest.java +++ b/spring-web/src/main/java/org/springframework/web/context/support/ContextExposingHttpServletRequest.java @@ -19,8 +19,8 @@ package org.springframework.web.context.support; import java.util.HashSet; import java.util.Set; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; import org.springframework.lang.Nullable; import org.springframework.util.Assert; diff --git a/spring-web/src/main/java/org/springframework/web/context/support/GenericWebApplicationContext.java b/spring-web/src/main/java/org/springframework/web/context/support/GenericWebApplicationContext.java index c8a39cb2908..75a599d231a 100644 --- a/spring-web/src/main/java/org/springframework/web/context/support/GenericWebApplicationContext.java +++ b/spring-web/src/main/java/org/springframework/web/context/support/GenericWebApplicationContext.java @@ -16,8 +16,8 @@ package org.springframework.web.context.support; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletContext; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.support.DefaultListableBeanFactory; diff --git a/spring-web/src/main/java/org/springframework/web/context/support/HttpRequestHandlerServlet.java b/spring-web/src/main/java/org/springframework/web/context/support/HttpRequestHandlerServlet.java index 97be4db9066..a97b402c36a 100644 --- a/spring-web/src/main/java/org/springframework/web/context/support/HttpRequestHandlerServlet.java +++ b/spring-web/src/main/java/org/springframework/web/context/support/HttpRequestHandlerServlet.java @@ -18,10 +18,10 @@ package org.springframework.web.context.support; import java.io.IOException; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.lang.Nullable; diff --git a/spring-web/src/main/java/org/springframework/web/context/support/LiveBeansViewServlet.java b/spring-web/src/main/java/org/springframework/web/context/support/LiveBeansViewServlet.java index 39cb3f8991d..0a500097f14 100644 --- a/spring-web/src/main/java/org/springframework/web/context/support/LiveBeansViewServlet.java +++ b/spring-web/src/main/java/org/springframework/web/context/support/LiveBeansViewServlet.java @@ -18,10 +18,10 @@ package org.springframework.web.context.support; import java.io.IOException; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.lang.Nullable; import org.springframework.util.Assert; diff --git a/spring-web/src/main/java/org/springframework/web/context/support/RequestHandledEvent.java b/spring-web/src/main/java/org/springframework/web/context/support/RequestHandledEvent.java index 1550875714d..30d32153ebb 100644 --- a/spring-web/src/main/java/org/springframework/web/context/support/RequestHandledEvent.java +++ b/spring-web/src/main/java/org/springframework/web/context/support/RequestHandledEvent.java @@ -104,7 +104,7 @@ public class RequestHandledEvent extends ApplicationEvent { /** * Return the name of the user that was associated with the request * (usually the UserPrincipal). - * @see javax.servlet.http.HttpServletRequest#getUserPrincipal() + * @see jakarta.servlet.http.HttpServletRequest#getUserPrincipal() */ @Nullable public String getUserName() { diff --git a/spring-web/src/main/java/org/springframework/web/context/support/ServletConfigPropertySource.java b/spring-web/src/main/java/org/springframework/web/context/support/ServletConfigPropertySource.java index 01fd5d064dd..72266c0bb96 100644 --- a/spring-web/src/main/java/org/springframework/web/context/support/ServletConfigPropertySource.java +++ b/spring-web/src/main/java/org/springframework/web/context/support/ServletConfigPropertySource.java @@ -16,7 +16,7 @@ package org.springframework.web.context.support; -import javax.servlet.ServletConfig; +import jakarta.servlet.ServletConfig; import org.springframework.core.env.EnumerablePropertySource; import org.springframework.core.env.PropertySource; diff --git a/spring-web/src/main/java/org/springframework/web/context/support/ServletContextAttributeExporter.java b/spring-web/src/main/java/org/springframework/web/context/support/ServletContextAttributeExporter.java index 8e8ac551821..b1422251ab7 100644 --- a/spring-web/src/main/java/org/springframework/web/context/support/ServletContextAttributeExporter.java +++ b/spring-web/src/main/java/org/springframework/web/context/support/ServletContextAttributeExporter.java @@ -18,8 +18,7 @@ package org.springframework.web.context.support; import java.util.Map; -import javax.servlet.ServletContext; - +import jakarta.servlet.ServletContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -43,7 +42,7 @@ import org.springframework.web.context.ServletContextAware; * * @author Juergen Hoeller * @since 1.1.4 - * @see javax.servlet.ServletContext#getAttribute + * @see jakarta.servlet.ServletContext#getAttribute * @see WebApplicationContextUtils#getWebApplicationContext */ public class ServletContextAttributeExporter implements ServletContextAware { diff --git a/spring-web/src/main/java/org/springframework/web/context/support/ServletContextAttributeFactoryBean.java b/spring-web/src/main/java/org/springframework/web/context/support/ServletContextAttributeFactoryBean.java index c835219b66a..6830e27c2b8 100644 --- a/spring-web/src/main/java/org/springframework/web/context/support/ServletContextAttributeFactoryBean.java +++ b/spring-web/src/main/java/org/springframework/web/context/support/ServletContextAttributeFactoryBean.java @@ -16,7 +16,7 @@ package org.springframework.web.context.support; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import org.springframework.beans.factory.FactoryBean; import org.springframework.lang.Nullable; diff --git a/spring-web/src/main/java/org/springframework/web/context/support/ServletContextAwareProcessor.java b/spring-web/src/main/java/org/springframework/web/context/support/ServletContextAwareProcessor.java index 0146649cc3d..239edb45f6e 100644 --- a/spring-web/src/main/java/org/springframework/web/context/support/ServletContextAwareProcessor.java +++ b/spring-web/src/main/java/org/springframework/web/context/support/ServletContextAwareProcessor.java @@ -16,8 +16,8 @@ package org.springframework.web.context.support; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletContext; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; diff --git a/spring-web/src/main/java/org/springframework/web/context/support/ServletContextLiveBeansView.java b/spring-web/src/main/java/org/springframework/web/context/support/ServletContextLiveBeansView.java index cb9e40f58ae..f8da1abc2dc 100644 --- a/spring-web/src/main/java/org/springframework/web/context/support/ServletContextLiveBeansView.java +++ b/spring-web/src/main/java/org/springframework/web/context/support/ServletContextLiveBeansView.java @@ -20,7 +20,7 @@ import java.util.Enumeration; import java.util.LinkedHashSet; import java.util.Set; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.util.Assert; diff --git a/spring-web/src/main/java/org/springframework/web/context/support/ServletContextParameterFactoryBean.java b/spring-web/src/main/java/org/springframework/web/context/support/ServletContextParameterFactoryBean.java index 74f5ef0d2bb..3269917dcd3 100644 --- a/spring-web/src/main/java/org/springframework/web/context/support/ServletContextParameterFactoryBean.java +++ b/spring-web/src/main/java/org/springframework/web/context/support/ServletContextParameterFactoryBean.java @@ -16,7 +16,7 @@ package org.springframework.web.context.support; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import org.springframework.beans.factory.FactoryBean; import org.springframework.lang.Nullable; diff --git a/spring-web/src/main/java/org/springframework/web/context/support/ServletContextPropertySource.java b/spring-web/src/main/java/org/springframework/web/context/support/ServletContextPropertySource.java index 468d1c3c04f..ca100504c79 100644 --- a/spring-web/src/main/java/org/springframework/web/context/support/ServletContextPropertySource.java +++ b/spring-web/src/main/java/org/springframework/web/context/support/ServletContextPropertySource.java @@ -16,7 +16,7 @@ package org.springframework.web.context.support; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import org.springframework.core.env.EnumerablePropertySource; import org.springframework.core.env.PropertySource; diff --git a/spring-web/src/main/java/org/springframework/web/context/support/ServletContextResource.java b/spring-web/src/main/java/org/springframework/web/context/support/ServletContextResource.java index 9f19b76d997..3942fa0deab 100644 --- a/spring-web/src/main/java/org/springframework/web/context/support/ServletContextResource.java +++ b/spring-web/src/main/java/org/springframework/web/context/support/ServletContextResource.java @@ -23,7 +23,7 @@ import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import org.springframework.core.io.AbstractFileResolvingResource; import org.springframework.core.io.ContextResource; @@ -36,7 +36,7 @@ import org.springframework.web.util.WebUtils; /** * {@link org.springframework.core.io.Resource} implementation for - * {@link javax.servlet.ServletContext} resources, interpreting + * {@link jakarta.servlet.ServletContext} resources, interpreting * relative paths within the web application root directory. * *

    Always supports stream access and URL access, but only allows @@ -45,9 +45,9 @@ import org.springframework.web.util.WebUtils; * * @author Juergen Hoeller * @since 28.12.2003 - * @see javax.servlet.ServletContext#getResourceAsStream - * @see javax.servlet.ServletContext#getResource - * @see javax.servlet.ServletContext#getRealPath + * @see jakarta.servlet.ServletContext#getResourceAsStream + * @see jakarta.servlet.ServletContext#getResource + * @see jakarta.servlet.ServletContext#getRealPath */ public class ServletContextResource extends AbstractFileResolvingResource implements ContextResource { @@ -96,7 +96,7 @@ public class ServletContextResource extends AbstractFileResolvingResource implem /** * This implementation checks {@code ServletContext.getResource}. - * @see javax.servlet.ServletContext#getResource(String) + * @see jakarta.servlet.ServletContext#getResource(String) */ @Override public boolean exists() { @@ -112,7 +112,7 @@ public class ServletContextResource extends AbstractFileResolvingResource implem /** * This implementation delegates to {@code ServletContext.getResourceAsStream}, * which returns {@code null} in case of a non-readable resource (e.g. a directory). - * @see javax.servlet.ServletContext#getResourceAsStream(String) + * @see jakarta.servlet.ServletContext#getResourceAsStream(String) */ @Override public boolean isReadable() { @@ -150,7 +150,7 @@ public class ServletContextResource extends AbstractFileResolvingResource implem /** * This implementation delegates to {@code ServletContext.getResourceAsStream}, * but throws a FileNotFoundException if no resource found. - * @see javax.servlet.ServletContext#getResourceAsStream(String) + * @see jakarta.servlet.ServletContext#getResourceAsStream(String) */ @Override public InputStream getInputStream() throws IOException { @@ -164,7 +164,7 @@ public class ServletContextResource extends AbstractFileResolvingResource implem /** * This implementation delegates to {@code ServletContext.getResource}, * but throws a FileNotFoundException if no resource found. - * @see javax.servlet.ServletContext#getResource(String) + * @see jakarta.servlet.ServletContext#getResource(String) */ @Override public URL getURL() throws IOException { @@ -180,8 +180,8 @@ public class ServletContextResource extends AbstractFileResolvingResource implem * This implementation resolves "file:" URLs or alternatively delegates to * {@code ServletContext.getRealPath}, throwing a FileNotFoundException * if not found or not resolvable. - * @see javax.servlet.ServletContext#getResource(String) - * @see javax.servlet.ServletContext#getRealPath(String) + * @see jakarta.servlet.ServletContext#getResource(String) + * @see jakarta.servlet.ServletContext#getRealPath(String) */ @Override public File getFile() throws IOException { diff --git a/spring-web/src/main/java/org/springframework/web/context/support/ServletContextResourceLoader.java b/spring-web/src/main/java/org/springframework/web/context/support/ServletContextResourceLoader.java index 15987887760..fd36e66dfe7 100644 --- a/spring-web/src/main/java/org/springframework/web/context/support/ServletContextResourceLoader.java +++ b/spring-web/src/main/java/org/springframework/web/context/support/ServletContextResourceLoader.java @@ -16,7 +16,7 @@ package org.springframework.web.context.support; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import org.springframework.core.io.DefaultResourceLoader; import org.springframework.core.io.Resource; diff --git a/spring-web/src/main/java/org/springframework/web/context/support/ServletContextResourcePatternResolver.java b/spring-web/src/main/java/org/springframework/web/context/support/ServletContextResourcePatternResolver.java index 0f48ec38021..c9bd0c447e9 100644 --- a/spring-web/src/main/java/org/springframework/web/context/support/ServletContextResourcePatternResolver.java +++ b/spring-web/src/main/java/org/springframework/web/context/support/ServletContextResourcePatternResolver.java @@ -23,8 +23,7 @@ import java.util.Set; import java.util.jar.JarEntry; import java.util.jar.JarFile; -import javax.servlet.ServletContext; - +import jakarta.servlet.ServletContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -52,7 +51,7 @@ public class ServletContextResourcePatternResolver extends PathMatchingResourceP /** * Create a new ServletContextResourcePatternResolver. * @param servletContext the ServletContext to load resources with - * @see ServletContextResourceLoader#ServletContextResourceLoader(javax.servlet.ServletContext) + * @see ServletContextResourceLoader#ServletContextResourceLoader(jakarta.servlet.ServletContext) */ public ServletContextResourcePatternResolver(ServletContext servletContext) { super(new ServletContextResourceLoader(servletContext)); @@ -75,7 +74,7 @@ public class ServletContextResourcePatternResolver extends PathMatchingResourceP * In case of other resources, delegates to the superclass version. * @see #doRetrieveMatchingServletContextResources * @see ServletContextResource - * @see javax.servlet.ServletContext#getResourcePaths + * @see jakarta.servlet.ServletContext#getResourcePaths */ @Override protected Set doFindPathMatchingFileResources(Resource rootDirResource, String subPattern) @@ -104,7 +103,7 @@ public class ServletContextResourcePatternResolver extends PathMatchingResourceP * @param result the Set of matching Resources to add to * @throws IOException if directory contents could not be retrieved * @see ServletContextResource - * @see javax.servlet.ServletContext#getResourcePaths + * @see jakarta.servlet.ServletContext#getResourcePaths */ protected void doRetrieveMatchingServletContextResources( ServletContext servletContext, String fullPattern, String dir, Set result) diff --git a/spring-web/src/main/java/org/springframework/web/context/support/ServletContextScope.java b/spring-web/src/main/java/org/springframework/web/context/support/ServletContextScope.java index 5da0d5298e2..3365318dfe5 100644 --- a/spring-web/src/main/java/org/springframework/web/context/support/ServletContextScope.java +++ b/spring-web/src/main/java/org/springframework/web/context/support/ServletContextScope.java @@ -19,7 +19,7 @@ package org.springframework.web.context.support; import java.util.LinkedHashMap; import java.util.Map; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.ObjectFactory; diff --git a/spring-web/src/main/java/org/springframework/web/context/support/SpringBeanAutowiringSupport.java b/spring-web/src/main/java/org/springframework/web/context/support/SpringBeanAutowiringSupport.java index bd345132808..8ffbc9fdc8b 100644 --- a/spring-web/src/main/java/org/springframework/web/context/support/SpringBeanAutowiringSupport.java +++ b/spring-web/src/main/java/org/springframework/web/context/support/SpringBeanAutowiringSupport.java @@ -16,8 +16,7 @@ package org.springframework.web.context.support; -import javax.servlet.ServletContext; - +import jakarta.servlet.ServletContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -101,7 +100,7 @@ public abstract class SpringBeanAutowiringSupport { *

    Intended for use as a delegate. * @param target the target object to process * @param servletContext the ServletContext to find the Spring web application context in - * @see WebApplicationContextUtils#getWebApplicationContext(javax.servlet.ServletContext) + * @see WebApplicationContextUtils#getWebApplicationContext(jakarta.servlet.ServletContext) */ public static void processInjectionBasedOnServletContext(Object target, ServletContext servletContext) { Assert.notNull(target, "Target object must not be null"); diff --git a/spring-web/src/main/java/org/springframework/web/context/support/StandardServletEnvironment.java b/spring-web/src/main/java/org/springframework/web/context/support/StandardServletEnvironment.java index 3ec9b92be64..28cfb4e8c38 100644 --- a/spring-web/src/main/java/org/springframework/web/context/support/StandardServletEnvironment.java +++ b/spring-web/src/main/java/org/springframework/web/context/support/StandardServletEnvironment.java @@ -16,8 +16,8 @@ package org.springframework.web.context.support; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletContext; import org.springframework.core.env.Environment; import org.springframework.core.env.MutablePropertySources; diff --git a/spring-web/src/main/java/org/springframework/web/context/support/StaticWebApplicationContext.java b/spring-web/src/main/java/org/springframework/web/context/support/StaticWebApplicationContext.java index 1a011a89ddd..2e0c6a5b9b4 100644 --- a/spring-web/src/main/java/org/springframework/web/context/support/StaticWebApplicationContext.java +++ b/spring-web/src/main/java/org/springframework/web/context/support/StaticWebApplicationContext.java @@ -16,8 +16,8 @@ package org.springframework.web.context.support; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletContext; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.context.support.StaticApplicationContext; diff --git a/spring-web/src/main/java/org/springframework/web/context/support/WebApplicationContextUtils.java b/spring-web/src/main/java/org/springframework/web/context/support/WebApplicationContextUtils.java index d9bfe57b152..cf43e49a530 100644 --- a/spring-web/src/main/java/org/springframework/web/context/support/WebApplicationContextUtils.java +++ b/spring-web/src/main/java/org/springframework/web/context/support/WebApplicationContextUtils.java @@ -22,13 +22,13 @@ import java.util.Enumeration; import java.util.HashMap; import java.util.Map; -import javax.faces.context.ExternalContext; -import javax.faces.context.FacesContext; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpSession; +import jakarta.faces.context.ExternalContext; +import jakarta.faces.context.FacesContext; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpSession; import org.springframework.beans.factory.ObjectFactory; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; @@ -66,7 +66,7 @@ import org.springframework.web.context.request.WebRequest; public abstract class WebApplicationContextUtils { private static final boolean jsfPresent = - ClassUtils.isPresent("javax.faces.context.FacesContext", RequestContextHolder.class.getClassLoader()); + ClassUtils.isPresent("jakarta.faces.context.FacesContext", RequestContextHolder.class.getClassLoader()); /** diff --git a/spring-web/src/main/java/org/springframework/web/context/support/WebApplicationObjectSupport.java b/spring-web/src/main/java/org/springframework/web/context/support/WebApplicationObjectSupport.java index e0d213f09cd..10d22569ccc 100644 --- a/spring-web/src/main/java/org/springframework/web/context/support/WebApplicationObjectSupport.java +++ b/spring-web/src/main/java/org/springframework/web/context/support/WebApplicationObjectSupport.java @@ -18,7 +18,7 @@ package org.springframework.web.context.support; import java.io.File; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ApplicationObjectSupport; @@ -70,7 +70,7 @@ public abstract class WebApplicationObjectSupport extends ApplicationObjectSuppo } /** - * Calls {@link #initServletContext(javax.servlet.ServletContext)} if the + * Calls {@link #initServletContext(jakarta.servlet.ServletContext)} if the * given ApplicationContext is a {@link WebApplicationContext}. */ @Override @@ -89,7 +89,7 @@ public abstract class WebApplicationObjectSupport extends ApplicationObjectSuppo * on the ServletContext that this application object runs in. *

    The default implementation is empty. Called by * {@link #initApplicationContext(org.springframework.context.ApplicationContext)} - * as well as {@link #setServletContext(javax.servlet.ServletContext)}. + * as well as {@link #setServletContext(jakarta.servlet.ServletContext)}. * @param servletContext the ServletContext that this application object runs in * (never {@code null}) */ @@ -147,7 +147,7 @@ public abstract class WebApplicationObjectSupport extends ApplicationObjectSuppo * as provided by the servlet container. * @return the File representing the temporary directory * @throws IllegalStateException if not running within a ServletContext - * @see org.springframework.web.util.WebUtils#getTempDir(javax.servlet.ServletContext) + * @see org.springframework.web.util.WebUtils#getTempDir(jakarta.servlet.ServletContext) */ protected final File getTempDir() throws IllegalStateException { ServletContext servletContext = getServletContext(); diff --git a/spring-web/src/main/java/org/springframework/web/cors/CorsConfigurationSource.java b/spring-web/src/main/java/org/springframework/web/cors/CorsConfigurationSource.java index 27934a126f5..c2111bb5b8a 100644 --- a/spring-web/src/main/java/org/springframework/web/cors/CorsConfigurationSource.java +++ b/spring-web/src/main/java/org/springframework/web/cors/CorsConfigurationSource.java @@ -16,7 +16,7 @@ package org.springframework.web.cors; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.lang.Nullable; diff --git a/spring-web/src/main/java/org/springframework/web/cors/CorsProcessor.java b/spring-web/src/main/java/org/springframework/web/cors/CorsProcessor.java index e162d77ebf7..4b19c35d96a 100644 --- a/spring-web/src/main/java/org/springframework/web/cors/CorsProcessor.java +++ b/spring-web/src/main/java/org/springframework/web/cors/CorsProcessor.java @@ -18,8 +18,8 @@ package org.springframework.web.cors; import java.io.IOException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.lang.Nullable; diff --git a/spring-web/src/main/java/org/springframework/web/cors/CorsUtils.java b/spring-web/src/main/java/org/springframework/web/cors/CorsUtils.java index eec489d6cc2..e01a1a8bc2a 100644 --- a/spring-web/src/main/java/org/springframework/web/cors/CorsUtils.java +++ b/spring-web/src/main/java/org/springframework/web/cors/CorsUtils.java @@ -16,7 +16,7 @@ package org.springframework.web.cors; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; diff --git a/spring-web/src/main/java/org/springframework/web/cors/DefaultCorsProcessor.java b/spring-web/src/main/java/org/springframework/web/cors/DefaultCorsProcessor.java index 37d3fb8c9dd..cc7aa88f752 100644 --- a/spring-web/src/main/java/org/springframework/web/cors/DefaultCorsProcessor.java +++ b/spring-web/src/main/java/org/springframework/web/cors/DefaultCorsProcessor.java @@ -22,9 +22,8 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/spring-web/src/main/java/org/springframework/web/cors/UrlBasedCorsConfigurationSource.java b/spring-web/src/main/java/org/springframework/web/cors/UrlBasedCorsConfigurationSource.java index 5aec15b6d6f..cad0948f50a 100644 --- a/spring-web/src/main/java/org/springframework/web/cors/UrlBasedCorsConfigurationSource.java +++ b/spring-web/src/main/java/org/springframework/web/cors/UrlBasedCorsConfigurationSource.java @@ -20,7 +20,7 @@ import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.http.server.PathContainer; import org.springframework.lang.Nullable; diff --git a/spring-web/src/main/java/org/springframework/web/filter/AbstractRequestLoggingFilter.java b/spring-web/src/main/java/org/springframework/web/filter/AbstractRequestLoggingFilter.java index 271193cc638..a91fbc2b16f 100644 --- a/spring-web/src/main/java/org/springframework/web/filter/AbstractRequestLoggingFilter.java +++ b/spring-web/src/main/java/org/springframework/web/filter/AbstractRequestLoggingFilter.java @@ -21,11 +21,11 @@ import java.io.UnsupportedEncodingException; import java.util.Enumeration; import java.util.function.Predicate; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; import org.springframework.http.HttpHeaders; import org.springframework.http.server.ServletServerHttpRequest; diff --git a/spring-web/src/main/java/org/springframework/web/filter/CharacterEncodingFilter.java b/spring-web/src/main/java/org/springframework/web/filter/CharacterEncodingFilter.java index be97ae84aa9..d217feaaf83 100644 --- a/spring-web/src/main/java/org/springframework/web/filter/CharacterEncodingFilter.java +++ b/spring-web/src/main/java/org/springframework/web/filter/CharacterEncodingFilter.java @@ -18,10 +18,10 @@ package org.springframework.web.filter; import java.io.IOException; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.lang.Nullable; import org.springframework.util.Assert; @@ -41,8 +41,8 @@ import org.springframework.util.Assert; * @since 15.03.2004 * @see #setEncoding * @see #setForceEncoding - * @see javax.servlet.http.HttpServletRequest#setCharacterEncoding - * @see javax.servlet.http.HttpServletResponse#setCharacterEncoding + * @see jakarta.servlet.http.HttpServletRequest#setCharacterEncoding + * @see jakarta.servlet.http.HttpServletResponse#setCharacterEncoding */ public class CharacterEncodingFilter extends OncePerRequestFilter { @@ -107,7 +107,7 @@ public class CharacterEncodingFilter extends OncePerRequestFilter { /** * Set the encoding to use for requests. This encoding will be passed into a - * {@link javax.servlet.http.HttpServletRequest#setCharacterEncoding} call. + * {@link jakarta.servlet.http.HttpServletRequest#setCharacterEncoding} call. *

    Whether this encoding will override existing request encodings * (and whether it will be applied as default response encoding as well) * depends on the {@link #setForceEncoding "forceEncoding"} flag. @@ -129,7 +129,7 @@ public class CharacterEncodingFilter extends OncePerRequestFilter { * Set whether the configured {@link #setEncoding encoding} of this filter * is supposed to override existing request and response encodings. *

    Default is "false", i.e. do not modify the encoding if - * {@link javax.servlet.http.HttpServletRequest#getCharacterEncoding()} + * {@link jakarta.servlet.http.HttpServletRequest#getCharacterEncoding()} * returns a non-null value. Switch this to "true" to enforce the specified * encoding in any case, applying it as default response encoding as well. *

    This is the equivalent to setting both {@link #setForceRequestEncoding(boolean)} @@ -146,7 +146,7 @@ public class CharacterEncodingFilter extends OncePerRequestFilter { * Set whether the configured {@link #setEncoding encoding} of this filter * is supposed to override existing request encodings. *

    Default is "false", i.e. do not modify the encoding if - * {@link javax.servlet.http.HttpServletRequest#getCharacterEncoding()} + * {@link jakarta.servlet.http.HttpServletRequest#getCharacterEncoding()} * returns a non-null value. Switch this to "true" to enforce the specified * encoding in any case. * @since 4.3 diff --git a/spring-web/src/main/java/org/springframework/web/filter/CommonsRequestLoggingFilter.java b/spring-web/src/main/java/org/springframework/web/filter/CommonsRequestLoggingFilter.java index 564a47040be..1329e138f42 100644 --- a/spring-web/src/main/java/org/springframework/web/filter/CommonsRequestLoggingFilter.java +++ b/spring-web/src/main/java/org/springframework/web/filter/CommonsRequestLoggingFilter.java @@ -16,7 +16,7 @@ package org.springframework.web.filter; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; /** * Simple request logging filter that writes the request URI diff --git a/spring-web/src/main/java/org/springframework/web/filter/CompositeFilter.java b/spring-web/src/main/java/org/springframework/web/filter/CompositeFilter.java index f8ec4e37a0b..a4700f5a3ef 100644 --- a/spring-web/src/main/java/org/springframework/web/filter/CompositeFilter.java +++ b/spring-web/src/main/java/org/springframework/web/filter/CompositeFilter.java @@ -20,12 +20,12 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; /** * A generic composite servlet {@link Filter} that just delegates its behavior diff --git a/spring-web/src/main/java/org/springframework/web/filter/CorsFilter.java b/spring-web/src/main/java/org/springframework/web/filter/CorsFilter.java index 4d0826f22a9..725dfebddbb 100644 --- a/spring-web/src/main/java/org/springframework/web/filter/CorsFilter.java +++ b/spring-web/src/main/java/org/springframework/web/filter/CorsFilter.java @@ -18,10 +18,10 @@ package org.springframework.web.filter; import java.io.IOException; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.util.Assert; import org.springframework.web.cors.CorsConfiguration; @@ -32,7 +32,7 @@ import org.springframework.web.cors.DefaultCorsProcessor; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; /** - * {@link javax.servlet.Filter} to handle CORS pre-flight requests and intercept + * {@link jakarta.servlet.Filter} to handle CORS pre-flight requests and intercept * CORS simple and actual requests with a {@link CorsProcessor}, and to update * the response, e.g. with CORS response headers, based on the policy matched * through the provided {@link CorsConfigurationSource}. @@ -40,7 +40,7 @@ import org.springframework.web.cors.UrlBasedCorsConfigurationSource; *

    This is an alternative to configuring CORS in the Spring MVC Java config * and the Spring MVC XML namespace. It is useful for applications depending * only on spring-web (not on spring-webmvc) or for security constraints that - * require CORS checks to be performed at {@link javax.servlet.Filter} level. + * require CORS checks to be performed at {@link jakarta.servlet.Filter} level. * *

    This filter could be used in conjunction with {@link DelegatingFilterProxy} * in order to help with its initialization. diff --git a/spring-web/src/main/java/org/springframework/web/filter/DelegatingFilterProxy.java b/spring-web/src/main/java/org/springframework/web/filter/DelegatingFilterProxy.java index bfbe62739dc..dff469446ad 100644 --- a/spring-web/src/main/java/org/springframework/web/filter/DelegatingFilterProxy.java +++ b/spring-web/src/main/java/org/springframework/web/filter/DelegatingFilterProxy.java @@ -18,11 +18,11 @@ package org.springframework.web.filter; import java.io.IOException; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.lang.Nullable; @@ -71,13 +71,13 @@ import org.springframework.web.context.support.WebApplicationContextUtils; * @since 1.2 * @see #setTargetBeanName * @see #setTargetFilterLifecycle - * @see javax.servlet.Filter#doFilter - * @see javax.servlet.Filter#init - * @see javax.servlet.Filter#destroy + * @see jakarta.servlet.Filter#doFilter + * @see jakarta.servlet.Filter#init + * @see jakarta.servlet.Filter#destroy * @see #DelegatingFilterProxy(Filter) * @see #DelegatingFilterProxy(String) * @see #DelegatingFilterProxy(String, WebApplicationContext) - * @see javax.servlet.ServletContext#addFilter(String, Filter) + * @see jakarta.servlet.ServletContext#addFilter(String, Filter) * @see org.springframework.web.WebApplicationInitializer */ public class DelegatingFilterProxy extends GenericFilterBean { @@ -293,7 +293,7 @@ public class DelegatingFilterProxy extends GenericFilterBean { * @return the {@code WebApplicationContext} for this proxy, or {@code null} if not found * @see #DelegatingFilterProxy(String, WebApplicationContext) * @see #getContextAttribute() - * @see WebApplicationContextUtils#getWebApplicationContext(javax.servlet.ServletContext) + * @see WebApplicationContextUtils#getWebApplicationContext(jakarta.servlet.ServletContext) * @see WebApplicationContext#ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE */ @Nullable @@ -330,7 +330,7 @@ public class DelegatingFilterProxy extends GenericFilterBean { * @see #getTargetBeanName() * @see #isTargetFilterLifecycle() * @see #getFilterConfig() - * @see javax.servlet.Filter#init(javax.servlet.FilterConfig) + * @see jakarta.servlet.Filter#init(jakarta.servlet.FilterConfig) */ protected Filter initDelegate(WebApplicationContext wac) throws ServletException { String targetBeanName = getTargetBeanName(); @@ -363,7 +363,7 @@ public class DelegatingFilterProxy extends GenericFilterBean { * Default implementation simply calls {@code Filter.destroy} on it. * @param delegate the Filter delegate (never {@code null}) * @see #isTargetFilterLifecycle() - * @see javax.servlet.Filter#destroy() + * @see jakarta.servlet.Filter#destroy() */ protected void destroyDelegate(Filter delegate) { if (isTargetFilterLifecycle()) { diff --git a/spring-web/src/main/java/org/springframework/web/filter/FormContentFilter.java b/spring-web/src/main/java/org/springframework/web/filter/FormContentFilter.java index 50ca1375078..a66a2ba49ec 100644 --- a/spring-web/src/main/java/org/springframework/web/filter/FormContentFilter.java +++ b/spring-web/src/main/java/org/springframework/web/filter/FormContentFilter.java @@ -29,11 +29,11 @@ import java.util.List; import java.util.Map; import java.util.Set; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.http.HttpInputMessage; import org.springframework.http.MediaType; diff --git a/spring-web/src/main/java/org/springframework/web/filter/ForwardedHeaderFilter.java b/spring-web/src/main/java/org/springframework/web/filter/ForwardedHeaderFilter.java index 4b0b2db9028..27db5087a24 100644 --- a/spring-web/src/main/java/org/springframework/web/filter/ForwardedHeaderFilter.java +++ b/spring-web/src/main/java/org/springframework/web/filter/ForwardedHeaderFilter.java @@ -26,12 +26,12 @@ import java.util.Map; import java.util.Set; import java.util.function.Supplier; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpServletResponseWrapper; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponseWrapper; import org.springframework.http.HttpStatus; import org.springframework.http.server.ServerHttpRequest; diff --git a/spring-web/src/main/java/org/springframework/web/filter/GenericFilterBean.java b/spring-web/src/main/java/org/springframework/web/filter/GenericFilterBean.java index da36fb123b3..f9c79d6bff5 100644 --- a/spring-web/src/main/java/org/springframework/web/filter/GenericFilterBean.java +++ b/spring-web/src/main/java/org/springframework/web/filter/GenericFilterBean.java @@ -20,11 +20,10 @@ import java.util.Enumeration; import java.util.HashSet; import java.util.Set; -import javax.servlet.Filter; -import javax.servlet.FilterConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; - +import jakarta.servlet.Filter; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -53,7 +52,7 @@ import org.springframework.web.context.support.StandardServletEnvironment; import org.springframework.web.util.NestedServletException; /** - * Simple base implementation of {@link javax.servlet.Filter} which treats + * Simple base implementation of {@link jakarta.servlet.Filter} which treats * its config parameters ({@code init-param} entries within the * {@code filter} tag in {@code web.xml}) as bean properties. * @@ -64,7 +63,7 @@ import org.springframework.web.util.NestedServletException; * setter will simply be ignored. * *

    This filter leaves actual filtering to subclasses, which have to - * implement the {@link javax.servlet.Filter#doFilter} method. + * implement the {@link jakarta.servlet.Filter#doFilter} method. * *

    This generic filter base class has no dependency on the Spring * {@link org.springframework.context.ApplicationContext} concept. @@ -167,7 +166,7 @@ public abstract class GenericFilterBean implements Filter, BeanNameAware, Enviro *

    Only relevant in case of initialization as bean, where the * standard {@code init(FilterConfig)} method won't be called. * @see #initFilterBean() - * @see #init(javax.servlet.FilterConfig) + * @see #init(jakarta.servlet.FilterConfig) */ @Override public void afterPropertiesSet() throws ServletException { @@ -275,7 +274,7 @@ public abstract class GenericFilterBean implements Filter, BeanNameAware, Enviro *

    Public to resemble the {@code getFilterConfig()} method * of the Servlet Filter version that shipped with WebLogic 6.1. * @return the FilterConfig instance, or {@code null} if none available - * @see javax.servlet.GenericServlet#getServletConfig() + * @see jakarta.servlet.GenericServlet#getServletConfig() */ @Nullable public FilterConfig getFilterConfig() { @@ -289,8 +288,8 @@ public abstract class GenericFilterBean implements Filter, BeanNameAware, Enviro * If initialized as bean in a Spring application context, * it falls back to the bean name as defined in the bean factory. * @return the filter name, or {@code null} if none available - * @see javax.servlet.GenericServlet#getServletName() - * @see javax.servlet.FilterConfig#getFilterName() + * @see jakarta.servlet.GenericServlet#getServletName() + * @see jakarta.servlet.FilterConfig#getFilterName() * @see #setBeanName */ @Nullable @@ -306,8 +305,8 @@ public abstract class GenericFilterBean implements Filter, BeanNameAware, Enviro * it falls back to the ServletContext that the bean factory runs in. * @return the ServletContext instance * @throws IllegalStateException if no ServletContext is available - * @see javax.servlet.GenericServlet#getServletContext() - * @see javax.servlet.FilterConfig#getServletContext() + * @see jakarta.servlet.GenericServlet#getServletContext() + * @see jakarta.servlet.FilterConfig#getServletContext() * @see #setServletContext */ protected ServletContext getServletContext() { diff --git a/spring-web/src/main/java/org/springframework/web/filter/HiddenHttpMethodFilter.java b/spring-web/src/main/java/org/springframework/web/filter/HiddenHttpMethodFilter.java index 0ed01daa40c..a2abd162f2c 100644 --- a/spring-web/src/main/java/org/springframework/web/filter/HiddenHttpMethodFilter.java +++ b/spring-web/src/main/java/org/springframework/web/filter/HiddenHttpMethodFilter.java @@ -22,11 +22,11 @@ import java.util.Collections; import java.util.List; import java.util.Locale; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.http.HttpMethod; import org.springframework.util.Assert; @@ -34,7 +34,7 @@ import org.springframework.util.StringUtils; import org.springframework.web.util.WebUtils; /** - * {@link javax.servlet.Filter} that converts posted method parameters into HTTP methods, + * {@link jakarta.servlet.Filter} that converts posted method parameters into HTTP methods, * retrievable via {@link HttpServletRequest#getMethod()}. Since browsers currently only * support GET and POST, a common technique - used by the Prototype library, for instance - * is to use a normal POST with an additional hidden form field ({@code _method}) diff --git a/spring-web/src/main/java/org/springframework/web/filter/HttpPutFormContentFilter.java b/spring-web/src/main/java/org/springframework/web/filter/HttpPutFormContentFilter.java index 2e6c04aa264..acb0c0fbfe2 100644 --- a/spring-web/src/main/java/org/springframework/web/filter/HttpPutFormContentFilter.java +++ b/spring-web/src/main/java/org/springframework/web/filter/HttpPutFormContentFilter.java @@ -29,11 +29,11 @@ import java.util.List; import java.util.Map; import java.util.Set; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.http.HttpInputMessage; import org.springframework.http.MediaType; @@ -46,7 +46,7 @@ import org.springframework.util.MultiValueMap; import org.springframework.util.StringUtils; /** - * {@link javax.servlet.Filter} that makes form encoded data available through + * {@link jakarta.servlet.Filter} that makes form encoded data available through * the {@code ServletRequest.getParameter*()} family of methods during HTTP PUT * or PATCH requests. * diff --git a/spring-web/src/main/java/org/springframework/web/filter/OncePerRequestFilter.java b/spring-web/src/main/java/org/springframework/web/filter/OncePerRequestFilter.java index 0f5e1a3831a..953bda7f869 100644 --- a/spring-web/src/main/java/org/springframework/web/filter/OncePerRequestFilter.java +++ b/spring-web/src/main/java/org/springframework/web/filter/OncePerRequestFilter.java @@ -18,13 +18,13 @@ package org.springframework.web.filter; import java.io.IOException; -import javax.servlet.DispatcherType; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.web.context.request.async.WebAsyncManager; import org.springframework.web.context.request.async.WebAsyncUtils; @@ -36,8 +36,8 @@ import org.springframework.web.util.WebUtils; * method with HttpServletRequest and HttpServletResponse arguments. * *

    As of Servlet 3.0, a filter may be invoked as part of a - * {@link javax.servlet.DispatcherType#REQUEST REQUEST} or - * {@link javax.servlet.DispatcherType#ASYNC ASYNC} dispatches that occur in + * {@link jakarta.servlet.DispatcherType#REQUEST REQUEST} or + * {@link jakarta.servlet.DispatcherType#ASYNC ASYNC} dispatches that occur in * separate threads. A filter can be configured in {@code web.xml} whether it * should be involved in async dispatches. However, in some cases servlet * containers assume different default configuration. Therefore sub-classes can @@ -54,7 +54,7 @@ import org.springframework.web.util.WebUtils; * the last one for the given request. * *

    Yet another dispatch type that also occurs in its own thread is - * {@link javax.servlet.DispatcherType#ERROR ERROR}. Subclasses can override + * {@link jakarta.servlet.DispatcherType#ERROR ERROR}. Subclasses can override * {@link #shouldNotFilterErrorDispatch()} if they wish to declare statically * if they should be invoked once during error dispatches. * @@ -136,7 +136,7 @@ public abstract class OncePerRequestFilter extends GenericFilterBean { } /** - * The dispatcher type {@code javax.servlet.DispatcherType.ASYNC} introduced + * The dispatcher type {@code jakarta.servlet.DispatcherType.ASYNC} introduced * in Servlet 3.0 means a filter can be invoked in more than one thread over * the course of a single request. This method returns {@code true} if the * filter is currently executing within an asynchronous dispatch. @@ -189,7 +189,7 @@ public abstract class OncePerRequestFilter extends GenericFilterBean { } /** - * The dispatcher type {@code javax.servlet.DispatcherType.ASYNC} introduced + * The dispatcher type {@code jakarta.servlet.DispatcherType.ASYNC} introduced * in Servlet 3.0 means a filter can be invoked in more than one thread * over the course of a single request. Some filters only need to filter * the initial thread (e.g. request wrapping) while others may need diff --git a/spring-web/src/main/java/org/springframework/web/filter/RelativeRedirectFilter.java b/spring-web/src/main/java/org/springframework/web/filter/RelativeRedirectFilter.java index 25df286a0c4..86868520031 100644 --- a/spring-web/src/main/java/org/springframework/web/filter/RelativeRedirectFilter.java +++ b/spring-web/src/main/java/org/springframework/web/filter/RelativeRedirectFilter.java @@ -18,10 +18,10 @@ package org.springframework.web.filter; import java.io.IOException; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.http.HttpStatus; import org.springframework.util.Assert; diff --git a/spring-web/src/main/java/org/springframework/web/filter/RelativeRedirectResponseWrapper.java b/spring-web/src/main/java/org/springframework/web/filter/RelativeRedirectResponseWrapper.java index baf4ab53ce9..5f1fc11be84 100644 --- a/spring-web/src/main/java/org/springframework/web/filter/RelativeRedirectResponseWrapper.java +++ b/spring-web/src/main/java/org/springframework/web/filter/RelativeRedirectResponseWrapper.java @@ -15,8 +15,8 @@ */ package org.springframework.web.filter; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpServletResponseWrapper; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponseWrapper; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; diff --git a/spring-web/src/main/java/org/springframework/web/filter/RequestContextFilter.java b/spring-web/src/main/java/org/springframework/web/filter/RequestContextFilter.java index 8bb6a821bb2..3a57d72e917 100644 --- a/spring-web/src/main/java/org/springframework/web/filter/RequestContextFilter.java +++ b/spring-web/src/main/java/org/springframework/web/filter/RequestContextFilter.java @@ -18,10 +18,10 @@ package org.springframework.web.filter; import java.io.IOException; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.web.context.request.RequestContextHolder; diff --git a/spring-web/src/main/java/org/springframework/web/filter/ServletContextRequestLoggingFilter.java b/spring-web/src/main/java/org/springframework/web/filter/ServletContextRequestLoggingFilter.java index 40cf7681e20..35bd66ce58b 100644 --- a/spring-web/src/main/java/org/springframework/web/filter/ServletContextRequestLoggingFilter.java +++ b/spring-web/src/main/java/org/springframework/web/filter/ServletContextRequestLoggingFilter.java @@ -16,7 +16,7 @@ package org.springframework.web.filter; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; /** * Simple request logging filter that writes the request URI @@ -29,7 +29,7 @@ import javax.servlet.http.HttpServletRequest; * @see #setBeforeMessageSuffix * @see #setAfterMessagePrefix * @see #setAfterMessageSuffix - * @see javax.servlet.ServletContext#log(String) + * @see jakarta.servlet.ServletContext#log(String) */ public class ServletContextRequestLoggingFilter extends AbstractRequestLoggingFilter { diff --git a/spring-web/src/main/java/org/springframework/web/filter/ServletRequestPathFilter.java b/spring-web/src/main/java/org/springframework/web/filter/ServletRequestPathFilter.java index cc9e85015f4..eccdb82ae38 100644 --- a/spring-web/src/main/java/org/springframework/web/filter/ServletRequestPathFilter.java +++ b/spring-web/src/main/java/org/springframework/web/filter/ServletRequestPathFilter.java @@ -17,12 +17,12 @@ package org.springframework.web.filter; import java.io.IOException; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.http.server.RequestPath; import org.springframework.web.util.ServletRequestPathUtils; diff --git a/spring-web/src/main/java/org/springframework/web/filter/ShallowEtagHeaderFilter.java b/spring-web/src/main/java/org/springframework/web/filter/ShallowEtagHeaderFilter.java index de2935bc686..06e164297f8 100644 --- a/spring-web/src/main/java/org/springframework/web/filter/ShallowEtagHeaderFilter.java +++ b/spring-web/src/main/java/org/springframework/web/filter/ShallowEtagHeaderFilter.java @@ -20,12 +20,12 @@ import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletOutputStream; -import javax.servlet.ServletRequest; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; @@ -37,7 +37,7 @@ import org.springframework.web.util.ContentCachingResponseWrapper; import org.springframework.web.util.WebUtils; /** - * {@link javax.servlet.Filter} that generates an {@code ETag} value based on the + * {@link jakarta.servlet.Filter} that generates an {@code ETag} value based on the * content on the response. This ETag is compared to the {@code If-None-Match} * header of the request. If these headers are equal, the response content is * not sent, but rather a {@code 304 "Not Modified"} status instead. diff --git a/spring-web/src/main/java/org/springframework/web/jsf/DecoratingNavigationHandler.java b/spring-web/src/main/java/org/springframework/web/jsf/DecoratingNavigationHandler.java index 7d8f082586f..98dd6cce8a6 100644 --- a/spring-web/src/main/java/org/springframework/web/jsf/DecoratingNavigationHandler.java +++ b/spring-web/src/main/java/org/springframework/web/jsf/DecoratingNavigationHandler.java @@ -16,8 +16,8 @@ package org.springframework.web.jsf; -import javax.faces.application.NavigationHandler; -import javax.faces.context.FacesContext; +import jakarta.faces.application.NavigationHandler; +import jakarta.faces.context.FacesContext; import org.springframework.lang.Nullable; @@ -34,7 +34,7 @@ import org.springframework.lang.Nullable; * * @author Juergen Hoeller * @since 1.2.7 - * @see #handleNavigation(javax.faces.context.FacesContext, String, String, NavigationHandler) + * @see #handleNavigation(jakarta.faces.context.FacesContext, String, String, NavigationHandler) * @see DelegatingNavigationHandlerProxy */ public abstract class DecoratingNavigationHandler extends NavigationHandler { @@ -71,7 +71,7 @@ public abstract class DecoratingNavigationHandler extends NavigationHandler { * This implementation of the standard JSF {@code handleNavigation} method * delegates to the overloaded variant, passing in constructor-injected * NavigationHandler as argument. - * @see #handleNavigation(javax.faces.context.FacesContext, String, String, javax.faces.application.NavigationHandler) + * @see #handleNavigation(jakarta.faces.context.FacesContext, String, String, jakarta.faces.application.NavigationHandler) */ @Override public final void handleNavigation(FacesContext facesContext, String fromAction, String outcome) { diff --git a/spring-web/src/main/java/org/springframework/web/jsf/DelegatingNavigationHandlerProxy.java b/spring-web/src/main/java/org/springframework/web/jsf/DelegatingNavigationHandlerProxy.java index a6eafaace42..e1369563e9f 100644 --- a/spring-web/src/main/java/org/springframework/web/jsf/DelegatingNavigationHandlerProxy.java +++ b/spring-web/src/main/java/org/springframework/web/jsf/DelegatingNavigationHandlerProxy.java @@ -16,8 +16,8 @@ package org.springframework.web.jsf; -import javax.faces.application.NavigationHandler; -import javax.faces.context.FacesContext; +import jakarta.faces.application.NavigationHandler; +import jakarta.faces.context.FacesContext; import org.springframework.beans.factory.BeanFactory; import org.springframework.lang.Nullable; diff --git a/spring-web/src/main/java/org/springframework/web/jsf/DelegatingPhaseListenerMulticaster.java b/spring-web/src/main/java/org/springframework/web/jsf/DelegatingPhaseListenerMulticaster.java index 261d9baac1b..45b312738ce 100644 --- a/spring-web/src/main/java/org/springframework/web/jsf/DelegatingPhaseListenerMulticaster.java +++ b/spring-web/src/main/java/org/springframework/web/jsf/DelegatingPhaseListenerMulticaster.java @@ -18,10 +18,10 @@ package org.springframework.web.jsf; import java.util.Collection; -import javax.faces.context.FacesContext; -import javax.faces.event.PhaseEvent; -import javax.faces.event.PhaseId; -import javax.faces.event.PhaseListener; +import jakarta.faces.context.FacesContext; +import jakarta.faces.event.PhaseEvent; +import jakarta.faces.event.PhaseId; +import jakarta.faces.event.PhaseListener; import org.springframework.beans.factory.BeanFactoryUtils; import org.springframework.beans.factory.ListableBeanFactory; diff --git a/spring-web/src/main/java/org/springframework/web/jsf/FacesContextUtils.java b/spring-web/src/main/java/org/springframework/web/jsf/FacesContextUtils.java index 14444603147..05c2addf4df 100644 --- a/spring-web/src/main/java/org/springframework/web/jsf/FacesContextUtils.java +++ b/spring-web/src/main/java/org/springframework/web/jsf/FacesContextUtils.java @@ -16,8 +16,8 @@ package org.springframework.web.jsf; -import javax.faces.context.ExternalContext; -import javax.faces.context.FacesContext; +import jakarta.faces.context.ExternalContext; +import jakarta.faces.context.FacesContext; import org.springframework.lang.Nullable; import org.springframework.util.Assert; diff --git a/spring-web/src/main/java/org/springframework/web/jsf/el/SpringBeanFacesELResolver.java b/spring-web/src/main/java/org/springframework/web/jsf/el/SpringBeanFacesELResolver.java index 922174d830d..e30e7e7a730 100644 --- a/spring-web/src/main/java/org/springframework/web/jsf/el/SpringBeanFacesELResolver.java +++ b/spring-web/src/main/java/org/springframework/web/jsf/el/SpringBeanFacesELResolver.java @@ -19,11 +19,11 @@ package org.springframework.web.jsf.el; import java.beans.FeatureDescriptor; import java.util.Iterator; -import javax.el.ELContext; -import javax.el.ELException; -import javax.el.ELResolver; -import javax.el.PropertyNotWritableException; -import javax.faces.context.FacesContext; +import jakarta.el.ELContext; +import jakarta.el.ELException; +import jakarta.el.ELResolver; +import jakarta.el.PropertyNotWritableException; +import jakarta.faces.context.FacesContext; import org.springframework.lang.Nullable; import org.springframework.web.context.WebApplicationContext; diff --git a/spring-web/src/main/java/org/springframework/web/jsf/el/WebApplicationContextFacesELResolver.java b/spring-web/src/main/java/org/springframework/web/jsf/el/WebApplicationContextFacesELResolver.java index d729187464d..6a072053fb1 100644 --- a/spring-web/src/main/java/org/springframework/web/jsf/el/WebApplicationContextFacesELResolver.java +++ b/spring-web/src/main/java/org/springframework/web/jsf/el/WebApplicationContextFacesELResolver.java @@ -19,11 +19,10 @@ package org.springframework.web.jsf.el; import java.beans.FeatureDescriptor; import java.util.Iterator; -import javax.el.ELContext; -import javax.el.ELException; -import javax.el.ELResolver; -import javax.faces.context.FacesContext; - +import jakarta.el.ELContext; +import jakarta.el.ELException; +import jakarta.el.ELResolver; +import jakarta.faces.context.FacesContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/spring-web/src/main/java/org/springframework/web/method/annotation/AbstractNamedValueMethodArgumentResolver.java b/spring-web/src/main/java/org/springframework/web/method/annotation/AbstractNamedValueMethodArgumentResolver.java index 4e0c8095c60..703362d31e8 100644 --- a/spring-web/src/main/java/org/springframework/web/method/annotation/AbstractNamedValueMethodArgumentResolver.java +++ b/spring-web/src/main/java/org/springframework/web/method/annotation/AbstractNamedValueMethodArgumentResolver.java @@ -19,7 +19,7 @@ package org.springframework.web.method.annotation; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import javax.servlet.ServletException; +import jakarta.servlet.ServletException; import org.springframework.beans.ConversionNotSupportedException; import org.springframework.beans.TypeMismatchException; diff --git a/spring-web/src/main/java/org/springframework/web/method/annotation/ExpressionValueMethodArgumentResolver.java b/spring-web/src/main/java/org/springframework/web/method/annotation/ExpressionValueMethodArgumentResolver.java index 18c60dee2b7..70f2a06e614 100644 --- a/spring-web/src/main/java/org/springframework/web/method/annotation/ExpressionValueMethodArgumentResolver.java +++ b/spring-web/src/main/java/org/springframework/web/method/annotation/ExpressionValueMethodArgumentResolver.java @@ -16,7 +16,7 @@ package org.springframework.web.method.annotation; -import javax.servlet.ServletException; +import jakarta.servlet.ServletException; import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.config.ConfigurableBeanFactory; diff --git a/spring-web/src/main/java/org/springframework/web/method/annotation/ModelAttributeMethodProcessor.java b/spring-web/src/main/java/org/springframework/web/method/annotation/ModelAttributeMethodProcessor.java index 94933860ce8..77489f0a9c3 100644 --- a/spring-web/src/main/java/org/springframework/web/method/annotation/ModelAttributeMethodProcessor.java +++ b/spring-web/src/main/java/org/springframework/web/method/annotation/ModelAttributeMethodProcessor.java @@ -28,9 +28,8 @@ import java.util.Map; import java.util.Optional; import java.util.Set; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.Part; - +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.Part; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -70,7 +69,7 @@ import org.springframework.web.multipart.support.StandardServletPartUtils; *

    Model attributes are obtained from the model or created with a default * constructor (and then added to the model). Once created the attribute is * populated via data binding to Servlet request parameters. Validation may be - * applied if the argument is annotated with {@code @javax.validation.Valid}. + * applied if the argument is annotated with {@code @jakarta.validation.Valid}. * or Spring's own {@code @org.springframework.validation.annotation.Validated}. * *

    When this handler is created with {@code annotationNotRequired=true} @@ -367,7 +366,7 @@ public class ModelAttributeMethodProcessor implements HandlerMethodArgumentResol /** * Validate the model attribute if applicable. - *

    The default implementation checks for {@code @javax.validation.Valid}, + *

    The default implementation checks for {@code @jakarta.validation.Valid}, * Spring's {@link org.springframework.validation.annotation.Validated}, * and custom annotations whose name starts with "Valid". * @param binder the DataBinder to be used @@ -387,7 +386,7 @@ public class ModelAttributeMethodProcessor implements HandlerMethodArgumentResol /** * Validate the specified candidate value if applicable. - *

    The default implementation checks for {@code @javax.validation.Valid}, + *

    The default implementation checks for {@code @jakarta.validation.Valid}, * Spring's {@link org.springframework.validation.annotation.Validated}, * and custom annotations whose name starts with "Valid". * @param binder the DataBinder to be used diff --git a/spring-web/src/main/java/org/springframework/web/method/annotation/RequestParamMapMethodArgumentResolver.java b/spring-web/src/main/java/org/springframework/web/method/annotation/RequestParamMapMethodArgumentResolver.java index 221743e7154..7c71280f4fd 100644 --- a/spring-web/src/main/java/org/springframework/web/method/annotation/RequestParamMapMethodArgumentResolver.java +++ b/spring-web/src/main/java/org/springframework/web/method/annotation/RequestParamMapMethodArgumentResolver.java @@ -20,8 +20,8 @@ import java.util.Collection; import java.util.LinkedHashMap; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.Part; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.Part; import org.springframework.core.MethodParameter; import org.springframework.core.ResolvableType; diff --git a/spring-web/src/main/java/org/springframework/web/method/annotation/RequestParamMethodArgumentResolver.java b/spring-web/src/main/java/org/springframework/web/method/annotation/RequestParamMethodArgumentResolver.java index e1d373ca5b8..ec1aeb1149d 100644 --- a/spring-web/src/main/java/org/springframework/web/method/annotation/RequestParamMethodArgumentResolver.java +++ b/spring-web/src/main/java/org/springframework/web/method/annotation/RequestParamMethodArgumentResolver.java @@ -22,8 +22,8 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.Part; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.Part; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.config.ConfigurableBeanFactory; @@ -52,7 +52,7 @@ import org.springframework.web.util.UriComponentsBuilder; /** * Resolves method arguments annotated with @{@link RequestParam}, arguments of * type {@link MultipartFile} in conjunction with Spring's {@link MultipartResolver} - * abstraction, and arguments of type {@code javax.servlet.http.Part} in conjunction + * abstraction, and arguments of type {@code jakarta.servlet.http.Part} in conjunction * with Servlet 3.0 multipart requests. This resolver can also be created in default * resolution mode in which simple types (int, long, etc.) not annotated with * {@link RequestParam @RequestParam} are also treated as request parameters with diff --git a/spring-web/src/main/java/org/springframework/web/multipart/MultipartFile.java b/spring-web/src/main/java/org/springframework/web/multipart/MultipartFile.java index e92a6c47fe6..725bbfc0dc8 100644 --- a/spring-web/src/main/java/org/springframework/web/multipart/MultipartFile.java +++ b/spring-web/src/main/java/org/springframework/web/multipart/MultipartFile.java @@ -134,7 +134,7 @@ public interface MultipartFile extends InputStreamSource { * @throws IllegalStateException if the file has already been moved * in the filesystem and is not available anymore for another transfer * @see org.apache.commons.fileupload.FileItem#write(File) - * @see javax.servlet.http.Part#write(String) + * @see jakarta.servlet.http.Part#write(String) */ void transferTo(File dest) throws IOException, IllegalStateException; diff --git a/spring-web/src/main/java/org/springframework/web/multipart/MultipartHttpServletRequest.java b/spring-web/src/main/java/org/springframework/web/multipart/MultipartHttpServletRequest.java index 7788b1e7045..692dd710d22 100644 --- a/spring-web/src/main/java/org/springframework/web/multipart/MultipartHttpServletRequest.java +++ b/spring-web/src/main/java/org/springframework/web/multipart/MultipartHttpServletRequest.java @@ -16,7 +16,7 @@ package org.springframework.web.multipart; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; @@ -26,7 +26,7 @@ import org.springframework.lang.Nullable; * Provides additional methods for dealing with multipart content within a * servlet request, allowing to access uploaded files. * Implementations also need to override the standard - * {@link javax.servlet.ServletRequest} methods for parameter access, making + * {@link jakarta.servlet.ServletRequest} methods for parameter access, making * multipart parameters available. * *

    A concrete implementation is @@ -40,9 +40,9 @@ import org.springframework.lang.Nullable; * @since 29.09.2003 * @see MultipartResolver * @see MultipartFile - * @see javax.servlet.http.HttpServletRequest#getParameter - * @see javax.servlet.http.HttpServletRequest#getParameterNames - * @see javax.servlet.http.HttpServletRequest#getParameterMap + * @see jakarta.servlet.http.HttpServletRequest#getParameter + * @see jakarta.servlet.http.HttpServletRequest#getParameterNames + * @see jakarta.servlet.http.HttpServletRequest#getParameterMap * @see org.springframework.web.multipart.support.DefaultMultipartHttpServletRequest * @see org.springframework.web.multipart.support.AbstractMultipartHttpServletRequest */ diff --git a/spring-web/src/main/java/org/springframework/web/multipart/MultipartResolver.java b/spring-web/src/main/java/org/springframework/web/multipart/MultipartResolver.java index c8d7b642391..cd18292d260 100644 --- a/spring-web/src/main/java/org/springframework/web/multipart/MultipartResolver.java +++ b/spring-web/src/main/java/org/springframework/web/multipart/MultipartResolver.java @@ -16,7 +16,7 @@ package org.springframework.web.multipart; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; /** * A strategy interface for multipart file upload resolution in accordance @@ -42,7 +42,7 @@ import javax.servlet.http.HttpServletRequest; * *

    If a {@link org.springframework.web.servlet.DispatcherServlet} detects a * multipart request, it will resolve it via the configured {@link MultipartResolver} - * and pass on a wrapped {@link javax.servlet.http.HttpServletRequest}. Controllers + * and pass on a wrapped {@link jakarta.servlet.http.HttpServletRequest}. Controllers * can then cast their given request to the {@link MultipartHttpServletRequest} * interface, which allows for access to any {@link MultipartFile MultipartFiles}. * Note that this cast is only supported in case of an actual multipart request. @@ -106,9 +106,9 @@ public interface MultipartResolver { * @see MultipartHttpServletRequest#getFile * @see MultipartHttpServletRequest#getFileNames * @see MultipartHttpServletRequest#getFileMap - * @see javax.servlet.http.HttpServletRequest#getParameter - * @see javax.servlet.http.HttpServletRequest#getParameterNames - * @see javax.servlet.http.HttpServletRequest#getParameterMap + * @see jakarta.servlet.http.HttpServletRequest#getParameter + * @see jakarta.servlet.http.HttpServletRequest#getParameterNames + * @see jakarta.servlet.http.HttpServletRequest#getParameterMap */ MultipartHttpServletRequest resolveMultipart(HttpServletRequest request) throws MultipartException; diff --git a/spring-web/src/main/java/org/springframework/web/multipart/commons/CommonsFileUploadSupport.java b/spring-web/src/main/java/org/springframework/web/multipart/commons/CommonsFileUploadSupport.java deleted file mode 100644 index 99fcee5f8c4..00000000000 --- a/spring-web/src/main/java/org/springframework/web/multipart/commons/CommonsFileUploadSupport.java +++ /dev/null @@ -1,374 +0,0 @@ -/* - * Copyright 2002-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.web.multipart.commons; - -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.nio.charset.Charset; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.apache.commons.fileupload.FileItem; -import org.apache.commons.fileupload.FileItemFactory; -import org.apache.commons.fileupload.FileUpload; -import org.apache.commons.fileupload.disk.DiskFileItemFactory; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import org.springframework.core.io.Resource; -import org.springframework.core.log.LogFormatUtils; -import org.springframework.http.MediaType; -import org.springframework.lang.Nullable; -import org.springframework.util.LinkedMultiValueMap; -import org.springframework.util.MultiValueMap; -import org.springframework.util.StringUtils; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.util.WebUtils; - -/** - * Base class for multipart resolvers that use Apache Commons FileUpload - * 1.2 or above. - * - *

    Provides common configuration properties and parsing functionality - * for multipart requests, using a Map of Spring CommonsMultipartFile instances - * as representation of uploaded files and a String-based parameter Map as - * representation of uploaded form fields. - * - * @author Juergen Hoeller - * @since 2.0 - * @see CommonsMultipartFile - * @see CommonsMultipartResolver - */ -public abstract class CommonsFileUploadSupport { - - protected final Log logger = LogFactory.getLog(getClass()); - - private final DiskFileItemFactory fileItemFactory; - - private final FileUpload fileUpload; - - private boolean uploadTempDirSpecified = false; - - private boolean preserveFilename = false; - - - /** - * Instantiate a new CommonsFileUploadSupport with its - * corresponding FileItemFactory and FileUpload instances. - * @see #newFileItemFactory - * @see #newFileUpload - */ - public CommonsFileUploadSupport() { - this.fileItemFactory = newFileItemFactory(); - this.fileUpload = newFileUpload(getFileItemFactory()); - } - - - /** - * Return the underlying {@code org.apache.commons.fileupload.disk.DiskFileItemFactory} - * instance. There is hardly any need to access this. - * @return the underlying DiskFileItemFactory instance - */ - public DiskFileItemFactory getFileItemFactory() { - return this.fileItemFactory; - } - - /** - * Return the underlying {@code org.apache.commons.fileupload.FileUpload} - * instance. There is hardly any need to access this. - * @return the underlying FileUpload instance - */ - public FileUpload getFileUpload() { - return this.fileUpload; - } - - /** - * Set the maximum allowed size (in bytes) before an upload gets rejected. - * -1 indicates no limit (the default). - * @param maxUploadSize the maximum upload size allowed - * @see org.apache.commons.fileupload.FileUploadBase#setSizeMax - */ - public void setMaxUploadSize(long maxUploadSize) { - this.fileUpload.setSizeMax(maxUploadSize); - } - - /** - * Set the maximum allowed size (in bytes) for each individual file before - * an upload gets rejected. -1 indicates no limit (the default). - * @param maxUploadSizePerFile the maximum upload size per file - * @since 4.2 - * @see org.apache.commons.fileupload.FileUploadBase#setFileSizeMax - */ - public void setMaxUploadSizePerFile(long maxUploadSizePerFile) { - this.fileUpload.setFileSizeMax(maxUploadSizePerFile); - } - - /** - * Set the maximum allowed size (in bytes) before uploads are written to disk. - * Uploaded files will still be received past this amount, but they will not be - * stored in memory. Default is 10240, according to Commons FileUpload. - * @param maxInMemorySize the maximum in memory size allowed - * @see org.apache.commons.fileupload.disk.DiskFileItemFactory#setSizeThreshold - */ - public void setMaxInMemorySize(int maxInMemorySize) { - this.fileItemFactory.setSizeThreshold(maxInMemorySize); - } - - /** - * Set the default character encoding to use for parsing requests, - * to be applied to headers of individual parts and to form fields. - * Default is ISO-8859-1, according to the Servlet spec. - *

    If the request specifies a character encoding itself, the request - * encoding will override this setting. This also allows for generically - * overriding the character encoding in a filter that invokes the - * {@code ServletRequest.setCharacterEncoding} method. - * @param defaultEncoding the character encoding to use - * @see javax.servlet.ServletRequest#getCharacterEncoding - * @see javax.servlet.ServletRequest#setCharacterEncoding - * @see WebUtils#DEFAULT_CHARACTER_ENCODING - * @see org.apache.commons.fileupload.FileUploadBase#setHeaderEncoding - */ - public void setDefaultEncoding(String defaultEncoding) { - this.fileUpload.setHeaderEncoding(defaultEncoding); - } - - /** - * Determine the default encoding to use for parsing requests. - * @see #setDefaultEncoding - */ - protected String getDefaultEncoding() { - String encoding = getFileUpload().getHeaderEncoding(); - if (encoding == null) { - encoding = WebUtils.DEFAULT_CHARACTER_ENCODING; - } - return encoding; - } - - /** - * Set the temporary directory where uploaded files get stored. - * Default is the servlet container's temporary directory for the web application. - * @see org.springframework.web.util.WebUtils#TEMP_DIR_CONTEXT_ATTRIBUTE - */ - public void setUploadTempDir(Resource uploadTempDir) throws IOException { - if (!uploadTempDir.exists() && !uploadTempDir.getFile().mkdirs()) { - throw new IllegalArgumentException("Given uploadTempDir [" + uploadTempDir + "] could not be created"); - } - this.fileItemFactory.setRepository(uploadTempDir.getFile()); - this.uploadTempDirSpecified = true; - } - - /** - * Return the temporary directory where uploaded files get stored. - * @see #setUploadTempDir - */ - protected boolean isUploadTempDirSpecified() { - return this.uploadTempDirSpecified; - } - - /** - * Set whether to preserve the filename as sent by the client, not stripping off - * path information in {@link CommonsMultipartFile#getOriginalFilename()}. - *

    Default is "false", stripping off path information that may prefix the - * actual filename e.g. from Opera. Switch this to "true" for preserving the - * client-specified filename as-is, including potential path separators. - * @since 4.3.5 - * @see MultipartFile#getOriginalFilename() - * @see CommonsMultipartFile#setPreserveFilename(boolean) - */ - public void setPreserveFilename(boolean preserveFilename) { - this.preserveFilename = preserveFilename; - } - - - /** - * Factory method for a Commons DiskFileItemFactory instance. - *

    Default implementation returns a standard DiskFileItemFactory. - * Can be overridden to use a custom subclass, e.g. for testing purposes. - * @return the new DiskFileItemFactory instance - */ - protected DiskFileItemFactory newFileItemFactory() { - return new DiskFileItemFactory(); - } - - /** - * Factory method for a Commons FileUpload instance. - *

    To be implemented by subclasses. - * @param fileItemFactory the Commons FileItemFactory to build upon - * @return the Commons FileUpload instance - */ - protected abstract FileUpload newFileUpload(FileItemFactory fileItemFactory); - - - /** - * Determine an appropriate FileUpload instance for the given encoding. - *

    Default implementation returns the shared FileUpload instance - * if the encoding matches, else creates a new FileUpload instance - * with the same configuration other than the desired encoding. - * @param encoding the character encoding to use - * @return an appropriate FileUpload instance. - */ - protected FileUpload prepareFileUpload(@Nullable String encoding) { - FileUpload fileUpload = getFileUpload(); - FileUpload actualFileUpload = fileUpload; - - // Use new temporary FileUpload instance if the request specifies - // its own encoding that does not match the default encoding. - if (encoding != null && !encoding.equals(fileUpload.getHeaderEncoding())) { - actualFileUpload = newFileUpload(getFileItemFactory()); - actualFileUpload.setSizeMax(fileUpload.getSizeMax()); - actualFileUpload.setFileSizeMax(fileUpload.getFileSizeMax()); - actualFileUpload.setHeaderEncoding(encoding); - } - - return actualFileUpload; - } - - /** - * Parse the given List of Commons FileItems into a Spring MultipartParsingResult, - * containing Spring MultipartFile instances and a Map of multipart parameter. - * @param fileItems the Commons FileItems to parse - * @param encoding the encoding to use for form fields - * @return the Spring MultipartParsingResult - * @see CommonsMultipartFile#CommonsMultipartFile(org.apache.commons.fileupload.FileItem) - */ - protected MultipartParsingResult parseFileItems(List fileItems, String encoding) { - MultiValueMap multipartFiles = new LinkedMultiValueMap<>(); - Map multipartParameters = new HashMap<>(); - Map multipartParameterContentTypes = new HashMap<>(); - - // Extract multipart files and multipart parameters. - for (FileItem fileItem : fileItems) { - if (fileItem.isFormField()) { - String value; - String partEncoding = determineEncoding(fileItem.getContentType(), encoding); - try { - value = fileItem.getString(partEncoding); - } - catch (UnsupportedEncodingException ex) { - if (logger.isWarnEnabled()) { - logger.warn("Could not decode multipart item '" + fileItem.getFieldName() + - "' with encoding '" + partEncoding + "': using platform default"); - } - value = fileItem.getString(); - } - String[] curParam = multipartParameters.get(fileItem.getFieldName()); - if (curParam == null) { - // simple form field - multipartParameters.put(fileItem.getFieldName(), new String[] {value}); - } - else { - // array of simple form fields - String[] newParam = StringUtils.addStringToArray(curParam, value); - multipartParameters.put(fileItem.getFieldName(), newParam); - } - multipartParameterContentTypes.put(fileItem.getFieldName(), fileItem.getContentType()); - } - else { - // multipart file field - CommonsMultipartFile file = createMultipartFile(fileItem); - multipartFiles.add(file.getName(), file); - LogFormatUtils.traceDebug(logger, traceOn -> - "Part '" + file.getName() + "', size " + file.getSize() + - " bytes, filename='" + file.getOriginalFilename() + "'" + - (traceOn ? ", storage=" + file.getStorageDescription() : "") - ); - } - } - return new MultipartParsingResult(multipartFiles, multipartParameters, multipartParameterContentTypes); - } - - /** - * Create a {@link CommonsMultipartFile} wrapper for the given Commons {@link FileItem}. - * @param fileItem the Commons FileItem to wrap - * @return the corresponding CommonsMultipartFile (potentially a custom subclass) - * @since 4.3.5 - * @see #setPreserveFilename(boolean) - * @see CommonsMultipartFile#setPreserveFilename(boolean) - */ - protected CommonsMultipartFile createMultipartFile(FileItem fileItem) { - CommonsMultipartFile multipartFile = new CommonsMultipartFile(fileItem); - multipartFile.setPreserveFilename(this.preserveFilename); - return multipartFile; - } - - /** - * Cleanup the Spring MultipartFiles created during multipart parsing, - * potentially holding temporary data on disk. - *

    Deletes the underlying Commons FileItem instances. - * @param multipartFiles a Collection of MultipartFile instances - * @see org.apache.commons.fileupload.FileItem#delete() - */ - protected void cleanupFileItems(MultiValueMap multipartFiles) { - for (List files : multipartFiles.values()) { - for (MultipartFile file : files) { - if (file instanceof CommonsMultipartFile) { - CommonsMultipartFile cmf = (CommonsMultipartFile) file; - cmf.getFileItem().delete(); - LogFormatUtils.traceDebug(logger, traceOn -> - "Cleaning up part '" + cmf.getName() + - "', filename '" + cmf.getOriginalFilename() + "'" + - (traceOn ? ", stored " + cmf.getStorageDescription() : "")); - } - } - } - } - - private String determineEncoding(String contentTypeHeader, String defaultEncoding) { - if (!StringUtils.hasText(contentTypeHeader)) { - return defaultEncoding; - } - MediaType contentType = MediaType.parseMediaType(contentTypeHeader); - Charset charset = contentType.getCharset(); - return (charset != null ? charset.name() : defaultEncoding); - } - - - /** - * Holder for a Map of Spring MultipartFiles and a Map of - * multipart parameters. - */ - protected static class MultipartParsingResult { - - private final MultiValueMap multipartFiles; - - private final Map multipartParameters; - - private final Map multipartParameterContentTypes; - - public MultipartParsingResult(MultiValueMap mpFiles, - Map mpParams, Map mpParamContentTypes) { - - this.multipartFiles = mpFiles; - this.multipartParameters = mpParams; - this.multipartParameterContentTypes = mpParamContentTypes; - } - - public MultiValueMap getMultipartFiles() { - return this.multipartFiles; - } - - public Map getMultipartParameters() { - return this.multipartParameters; - } - - public Map getMultipartParameterContentTypes() { - return this.multipartParameterContentTypes; - } - } - -} diff --git a/spring-web/src/main/java/org/springframework/web/multipart/commons/CommonsMultipartFile.java b/spring-web/src/main/java/org/springframework/web/multipart/commons/CommonsMultipartFile.java deleted file mode 100644 index 691b52519e2..00000000000 --- a/spring-web/src/main/java/org/springframework/web/multipart/commons/CommonsMultipartFile.java +++ /dev/null @@ -1,242 +0,0 @@ -/* - * Copyright 2002-2020 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.web.multipart.commons; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.Serializable; -import java.nio.file.Files; -import java.nio.file.Path; - -import org.apache.commons.fileupload.FileItem; -import org.apache.commons.fileupload.FileUploadException; -import org.apache.commons.fileupload.disk.DiskFileItem; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import org.springframework.core.log.LogFormatUtils; -import org.springframework.util.FileCopyUtils; -import org.springframework.util.StreamUtils; -import org.springframework.web.multipart.MultipartFile; - -/** - * {@link MultipartFile} implementation for Apache Commons FileUpload. - * - * @author Trevor D. Cook - * @author Juergen Hoeller - * @since 29.09.2003 - * @see CommonsMultipartResolver - */ -@SuppressWarnings("serial") -public class CommonsMultipartFile implements MultipartFile, Serializable { - - protected static final Log logger = LogFactory.getLog(CommonsMultipartFile.class); - - private final FileItem fileItem; - - private final long size; - - private boolean preserveFilename = false; - - - /** - * Create an instance wrapping the given FileItem. - * @param fileItem the FileItem to wrap - */ - public CommonsMultipartFile(FileItem fileItem) { - this.fileItem = fileItem; - this.size = this.fileItem.getSize(); - } - - - /** - * Return the underlying {@code org.apache.commons.fileupload.FileItem} - * instance. There is hardly any need to access this. - */ - public final FileItem getFileItem() { - return this.fileItem; - } - - /** - * Set whether to preserve the filename as sent by the client, not stripping off - * path information in {@link CommonsMultipartFile#getOriginalFilename()}. - *

    Default is "false", stripping off path information that may prefix the - * actual filename e.g. from Opera. Switch this to "true" for preserving the - * client-specified filename as-is, including potential path separators. - * @since 4.3.5 - * @see #getOriginalFilename() - * @see CommonsMultipartResolver#setPreserveFilename(boolean) - */ - public void setPreserveFilename(boolean preserveFilename) { - this.preserveFilename = preserveFilename; - } - - - @Override - public String getName() { - return this.fileItem.getFieldName(); - } - - @Override - public String getOriginalFilename() { - String filename = this.fileItem.getName(); - if (filename == null) { - // Should never happen. - return ""; - } - if (this.preserveFilename) { - // Do not try to strip off a path... - return filename; - } - - // Check for Unix-style path - int unixSep = filename.lastIndexOf('/'); - // Check for Windows-style path - int winSep = filename.lastIndexOf('\\'); - // Cut off at latest possible point - int pos = Math.max(winSep, unixSep); - if (pos != -1) { - // Any sort of path separator found... - return filename.substring(pos + 1); - } - else { - // A plain name - return filename; - } - } - - @Override - public String getContentType() { - return this.fileItem.getContentType(); - } - - @Override - public boolean isEmpty() { - return (this.size == 0); - } - - @Override - public long getSize() { - return this.size; - } - - @Override - public byte[] getBytes() { - if (!isAvailable()) { - throw new IllegalStateException("File has been moved - cannot be read again"); - } - byte[] bytes = this.fileItem.get(); - return (bytes != null ? bytes : new byte[0]); - } - - @Override - public InputStream getInputStream() throws IOException { - if (!isAvailable()) { - throw new IllegalStateException("File has been moved - cannot be read again"); - } - InputStream inputStream = this.fileItem.getInputStream(); - return (inputStream != null ? inputStream : StreamUtils.emptyInput()); - } - - @Override - public void transferTo(File dest) throws IOException, IllegalStateException { - if (!isAvailable()) { - throw new IllegalStateException("File has already been moved - cannot be transferred again"); - } - - if (dest.exists() && !dest.delete()) { - throw new IOException( - "Destination file [" + dest.getAbsolutePath() + "] already exists and could not be deleted"); - } - - try { - this.fileItem.write(dest); - LogFormatUtils.traceDebug(logger, traceOn -> { - String action = "transferred"; - if (!this.fileItem.isInMemory()) { - action = (isAvailable() ? "copied" : "moved"); - } - return "Part '" + getName() + "', filename '" + getOriginalFilename() + "'" + - (traceOn ? ", stored " + getStorageDescription() : "") + - ": " + action + " to [" + dest.getAbsolutePath() + "]"; - }); - } - catch (FileUploadException ex) { - throw new IllegalStateException(ex.getMessage(), ex); - } - catch (IllegalStateException | IOException ex) { - // Pass through IllegalStateException when coming from FileItem directly, - // or propagate an exception from I/O operations within FileItem.write - throw ex; - } - catch (Exception ex) { - throw new IOException("File transfer failed", ex); - } - } - - @Override - public void transferTo(Path dest) throws IOException, IllegalStateException { - if (!isAvailable()) { - throw new IllegalStateException("File has already been moved - cannot be transferred again"); - } - - FileCopyUtils.copy(this.fileItem.getInputStream(), Files.newOutputStream(dest)); - } - - /** - * Determine whether the multipart content is still available. - * If a temporary file has been moved, the content is no longer available. - */ - protected boolean isAvailable() { - // If in memory, it's available. - if (this.fileItem.isInMemory()) { - return true; - } - // Check actual existence of temporary file. - if (this.fileItem instanceof DiskFileItem) { - return ((DiskFileItem) this.fileItem).getStoreLocation().exists(); - } - // Check whether current file size is different than original one. - return (this.fileItem.getSize() == this.size); - } - - /** - * Return a description for the storage location of the multipart content. - * Tries to be as specific as possible: mentions the file location in case - * of a temporary file. - */ - public String getStorageDescription() { - if (this.fileItem.isInMemory()) { - return "in memory"; - } - else if (this.fileItem instanceof DiskFileItem) { - return "at [" + ((DiskFileItem) this.fileItem).getStoreLocation().getAbsolutePath() + "]"; - } - else { - return "on disk"; - } - } - - @Override - public String toString() { - return "MultipartFile[field=\"" + this.fileItem.getFieldName() + "\"" + - (this.fileItem.getName() != null ? ", filename=" + this.fileItem.getName() : "" ) + - (this.fileItem.getContentType() != null ? ", contentType=" + this.fileItem.getContentType() : "") + - ", size=" + this.fileItem.getSize() + "]"; - } -} diff --git a/spring-web/src/main/java/org/springframework/web/multipart/commons/CommonsMultipartResolver.java b/spring-web/src/main/java/org/springframework/web/multipart/commons/CommonsMultipartResolver.java deleted file mode 100644 index b6911fe9813..00000000000 --- a/spring-web/src/main/java/org/springframework/web/multipart/commons/CommonsMultipartResolver.java +++ /dev/null @@ -1,237 +0,0 @@ -/* - * Copyright 2002-2021 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.web.multipart.commons; - -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; - -import org.apache.commons.fileupload.FileItem; -import org.apache.commons.fileupload.FileItemFactory; -import org.apache.commons.fileupload.FileUpload; -import org.apache.commons.fileupload.FileUploadBase; -import org.apache.commons.fileupload.FileUploadException; -import org.apache.commons.fileupload.servlet.ServletFileUpload; -import org.apache.commons.fileupload.servlet.ServletRequestContext; - -import org.springframework.lang.Nullable; -import org.springframework.util.Assert; -import org.springframework.web.context.ServletContextAware; -import org.springframework.web.multipart.MaxUploadSizeExceededException; -import org.springframework.web.multipart.MultipartException; -import org.springframework.web.multipart.MultipartHttpServletRequest; -import org.springframework.web.multipart.MultipartResolver; -import org.springframework.web.multipart.support.AbstractMultipartHttpServletRequest; -import org.springframework.web.multipart.support.DefaultMultipartHttpServletRequest; -import org.springframework.web.util.WebUtils; - -/** - * Servlet-based {@link MultipartResolver} implementation for - * Apache Commons FileUpload - * 1.2 or above. This resolver variant delegates to a local FileUpload library - * within the application, providing maximum portability across Servlet containers. - * - *

    Commons FileUpload traditionally parses POST requests with any "multipart/" type. - * Supported HTTP methods may be customized through {@link #setSupportedMethods}. - * - *

    Provides "maxUploadSize", "maxInMemorySize" and "defaultEncoding" settings as - * bean properties (inherited from {@link CommonsFileUploadSupport}). See corresponding - * ServletFileUpload / DiskFileItemFactory properties ("sizeMax", "sizeThreshold", - * "headerEncoding") for details in terms of defaults and accepted values. - * - *

    Saves temporary files to the servlet container's temporary directory. - * Needs to be initialized either by an application context or - * via the constructor that takes a ServletContext (for standalone usage). - * - *

    Note: The common alternative is - * {@link org.springframework.web.multipart.support.StandardServletMultipartResolver}, - * delegating to the Servlet container's own multipart parser, with configuration to - * happen at the container level and potentially with container-specific limitations. - * - * @author Trevor D. Cook - * @author Juergen Hoeller - * @since 29.09.2003 - * @see #CommonsMultipartResolver(ServletContext) - * @see #setResolveLazily - * @see #setSupportedMethods - * @see org.apache.commons.fileupload.servlet.ServletFileUpload - * @see org.apache.commons.fileupload.disk.DiskFileItemFactory - * @see org.springframework.web.multipart.support.StandardServletMultipartResolver - */ -public class CommonsMultipartResolver extends CommonsFileUploadSupport - implements MultipartResolver, ServletContextAware { - - private boolean resolveLazily = false; - - @Nullable - private Set supportedMethods; - - - /** - * Constructor for use as bean. Determines the servlet container's - * temporary directory via the ServletContext passed in as through the - * ServletContextAware interface (typically by a WebApplicationContext). - * @see #setServletContext - * @see org.springframework.web.context.ServletContextAware - * @see org.springframework.web.context.WebApplicationContext - */ - public CommonsMultipartResolver() { - super(); - } - - /** - * Constructor for standalone usage. Determines the servlet container's - * temporary directory via the given ServletContext. - * @param servletContext the ServletContext to use - */ - public CommonsMultipartResolver(ServletContext servletContext) { - this(); - setServletContext(servletContext); - } - - - /** - * Set whether to resolve the multipart request lazily at the time of - * file or parameter access. - *

    Default is "false", resolving the multipart elements immediately, throwing - * corresponding exceptions at the time of the {@link #resolveMultipart} call. - * Switch this to "true" for lazy multipart parsing, throwing parse exceptions - * once the application attempts to obtain multipart files or parameters. - */ - public void setResolveLazily(boolean resolveLazily) { - this.resolveLazily = resolveLazily; - } - - /** - * Specify supported methods as an array of HTTP method names. - * The traditional Commons FileUpload default is "POST" only. - *

    When configured as a Spring property value, - * this can be a comma-separated String: e.g. "POST,PUT". - * @since 5.3.9 - */ - public void setSupportedMethods(String... supportedMethods) { - this.supportedMethods = new HashSet<>(Arrays.asList(supportedMethods)); - } - - /** - * Initialize the underlying {@code org.apache.commons.fileupload.servlet.ServletFileUpload} - * instance. Can be overridden to use a custom subclass, e.g. for testing purposes. - * @param fileItemFactory the Commons FileItemFactory to use - * @return the new ServletFileUpload instance - */ - @Override - protected FileUpload newFileUpload(FileItemFactory fileItemFactory) { - return new ServletFileUpload(fileItemFactory); - } - - @Override - public void setServletContext(ServletContext servletContext) { - if (!isUploadTempDirSpecified()) { - getFileItemFactory().setRepository(WebUtils.getTempDir(servletContext)); - } - } - - - @Override - public boolean isMultipart(HttpServletRequest request) { - return (this.supportedMethods != null ? - this.supportedMethods.contains(request.getMethod()) && - FileUploadBase.isMultipartContent(new ServletRequestContext(request)) : - ServletFileUpload.isMultipartContent(request)); - } - - @Override - public MultipartHttpServletRequest resolveMultipart(final HttpServletRequest request) throws MultipartException { - Assert.notNull(request, "Request must not be null"); - if (this.resolveLazily) { - return new DefaultMultipartHttpServletRequest(request) { - @Override - protected void initializeMultipart() { - MultipartParsingResult parsingResult = parseRequest(request); - setMultipartFiles(parsingResult.getMultipartFiles()); - setMultipartParameters(parsingResult.getMultipartParameters()); - setMultipartParameterContentTypes(parsingResult.getMultipartParameterContentTypes()); - } - }; - } - else { - MultipartParsingResult parsingResult = parseRequest(request); - return new DefaultMultipartHttpServletRequest(request, parsingResult.getMultipartFiles(), - parsingResult.getMultipartParameters(), parsingResult.getMultipartParameterContentTypes()); - } - } - - /** - * Parse the given servlet request, resolving its multipart elements. - * @param request the request to parse - * @return the parsing result - * @throws MultipartException if multipart resolution failed. - */ - protected MultipartParsingResult parseRequest(HttpServletRequest request) throws MultipartException { - String encoding = determineEncoding(request); - FileUpload fileUpload = prepareFileUpload(encoding); - try { - List fileItems = ((ServletFileUpload) fileUpload).parseRequest(request); - return parseFileItems(fileItems, encoding); - } - catch (FileUploadBase.SizeLimitExceededException ex) { - throw new MaxUploadSizeExceededException(fileUpload.getSizeMax(), ex); - } - catch (FileUploadBase.FileSizeLimitExceededException ex) { - throw new MaxUploadSizeExceededException(fileUpload.getFileSizeMax(), ex); - } - catch (FileUploadException ex) { - throw new MultipartException("Failed to parse multipart servlet request", ex); - } - } - - /** - * Determine the encoding for the given request. - * Can be overridden in subclasses. - *

    The default implementation checks the request encoding, - * falling back to the default encoding specified for this resolver. - * @param request current HTTP request - * @return the encoding for the request (never {@code null}) - * @see javax.servlet.ServletRequest#getCharacterEncoding - * @see #setDefaultEncoding - */ - protected String determineEncoding(HttpServletRequest request) { - String encoding = request.getCharacterEncoding(); - if (encoding == null) { - encoding = getDefaultEncoding(); - } - return encoding; - } - - @Override - public void cleanupMultipart(MultipartHttpServletRequest request) { - if (!(request instanceof AbstractMultipartHttpServletRequest) || - ((AbstractMultipartHttpServletRequest) request).isResolved()) { - try { - cleanupFileItems(request.getMultiFileMap()); - } - catch (Throwable ex) { - logger.warn("Failed to perform multipart cleanup for servlet request", ex); - } - } - } - -} diff --git a/spring-web/src/main/java/org/springframework/web/multipart/commons/package-info.java b/spring-web/src/main/java/org/springframework/web/multipart/commons/package-info.java deleted file mode 100644 index 03b636815d4..00000000000 --- a/spring-web/src/main/java/org/springframework/web/multipart/commons/package-info.java +++ /dev/null @@ -1,10 +0,0 @@ -/** - * MultipartResolver implementation for - * Apache Commons FileUpload. - */ -@NonNullApi -@NonNullFields -package org.springframework.web.multipart.commons; - -import org.springframework.lang.NonNullApi; -import org.springframework.lang.NonNullFields; diff --git a/spring-web/src/main/java/org/springframework/web/multipart/support/AbstractMultipartHttpServletRequest.java b/spring-web/src/main/java/org/springframework/web/multipart/support/AbstractMultipartHttpServletRequest.java index 3c2a8834c56..8504b96816c 100644 --- a/spring-web/src/main/java/org/springframework/web/multipart/support/AbstractMultipartHttpServletRequest.java +++ b/spring-web/src/main/java/org/springframework/web/multipart/support/AbstractMultipartHttpServletRequest.java @@ -22,8 +22,8 @@ import java.util.Iterator; import java.util.List; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; diff --git a/spring-web/src/main/java/org/springframework/web/multipart/support/DefaultMultipartHttpServletRequest.java b/spring-web/src/main/java/org/springframework/web/multipart/support/DefaultMultipartHttpServletRequest.java index d882620af27..3a7859e5615 100644 --- a/spring-web/src/main/java/org/springframework/web/multipart/support/DefaultMultipartHttpServletRequest.java +++ b/spring-web/src/main/java/org/springframework/web/multipart/support/DefaultMultipartHttpServletRequest.java @@ -23,7 +23,7 @@ import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.http.HttpHeaders; import org.springframework.lang.Nullable; diff --git a/spring-web/src/main/java/org/springframework/web/multipart/support/MissingServletRequestPartException.java b/spring-web/src/main/java/org/springframework/web/multipart/support/MissingServletRequestPartException.java index 414405d8038..f19d587f5e2 100644 --- a/spring-web/src/main/java/org/springframework/web/multipart/support/MissingServletRequestPartException.java +++ b/spring-web/src/main/java/org/springframework/web/multipart/support/MissingServletRequestPartException.java @@ -16,7 +16,7 @@ package org.springframework.web.multipart.support; -import javax.servlet.ServletException; +import jakarta.servlet.ServletException; import org.springframework.web.multipart.MultipartResolver; diff --git a/spring-web/src/main/java/org/springframework/web/multipart/support/MultipartFilter.java b/spring-web/src/main/java/org/springframework/web/multipart/support/MultipartFilter.java index 1cd8fb2c3ce..276c5a05e20 100644 --- a/spring-web/src/main/java/org/springframework/web/multipart/support/MultipartFilter.java +++ b/spring-web/src/main/java/org/springframework/web/multipart/support/MultipartFilter.java @@ -18,10 +18,10 @@ package org.springframework.web.multipart.support; import java.io.IOException; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; diff --git a/spring-web/src/main/java/org/springframework/web/multipart/support/MultipartResolutionDelegate.java b/spring-web/src/main/java/org/springframework/web/multipart/support/MultipartResolutionDelegate.java index 7d554e9052d..6d480e85814 100644 --- a/spring-web/src/main/java/org/springframework/web/multipart/support/MultipartResolutionDelegate.java +++ b/spring-web/src/main/java/org/springframework/web/multipart/support/MultipartResolutionDelegate.java @@ -20,8 +20,8 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.Part; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.Part; import org.springframework.core.MethodParameter; import org.springframework.core.ResolvableType; diff --git a/spring-web/src/main/java/org/springframework/web/multipart/support/RequestPartServletServerHttpRequest.java b/spring-web/src/main/java/org/springframework/web/multipart/support/RequestPartServletServerHttpRequest.java index e390f90f733..aa1bfca3c3f 100644 --- a/spring-web/src/main/java/org/springframework/web/multipart/support/RequestPartServletServerHttpRequest.java +++ b/spring-web/src/main/java/org/springframework/web/multipart/support/RequestPartServletServerHttpRequest.java @@ -21,8 +21,8 @@ import java.io.IOException; import java.io.InputStream; import java.nio.charset.Charset; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.Part; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.Part; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; diff --git a/spring-web/src/main/java/org/springframework/web/multipart/support/StandardMultipartHttpServletRequest.java b/spring-web/src/main/java/org/springframework/web/multipart/support/StandardMultipartHttpServletRequest.java index 6970c8e12ea..7f21e5e2775 100644 --- a/spring-web/src/main/java/org/springframework/web/multipart/support/StandardMultipartHttpServletRequest.java +++ b/spring-web/src/main/java/org/springframework/web/multipart/support/StandardMultipartHttpServletRequest.java @@ -32,9 +32,9 @@ import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; -import javax.mail.internet.MimeUtility; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.Part; +import jakarta.mail.internet.MimeUtility; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.Part; import org.springframework.http.ContentDisposition; import org.springframework.http.HttpHeaders; diff --git a/spring-web/src/main/java/org/springframework/web/multipart/support/StandardServletMultipartResolver.java b/spring-web/src/main/java/org/springframework/web/multipart/support/StandardServletMultipartResolver.java index dc06f0768be..3a29473a4af 100644 --- a/spring-web/src/main/java/org/springframework/web/multipart/support/StandardServletMultipartResolver.java +++ b/spring-web/src/main/java/org/springframework/web/multipart/support/StandardServletMultipartResolver.java @@ -16,9 +16,8 @@ package org.springframework.web.multipart.support; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.Part; - +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.Part; import org.apache.commons.logging.LogFactory; import org.springframework.http.MediaType; @@ -29,7 +28,7 @@ import org.springframework.web.multipart.MultipartResolver; /** * Standard implementation of the {@link MultipartResolver} interface, - * based on the Servlet 3.0 {@link javax.servlet.http.Part} API. + * based on the Servlet 3.0 {@link jakarta.servlet.http.Part} API. * To be added as "multipartResolver" bean to a Spring DispatcherServlet context, * without any extra configuration at the bean level (see below). * @@ -44,9 +43,9 @@ import org.springframework.web.multipart.MultipartResolver; * *

    Note: In order to use Servlet 3.0 based multipart parsing, * you need to mark the affected servlet with a "multipart-config" section in - * {@code web.xml}, or with a {@link javax.servlet.MultipartConfigElement} + * {@code web.xml}, or with a {@link jakarta.servlet.MultipartConfigElement} * in programmatic servlet registration, or (in case of a custom servlet class) - * possibly with a {@link javax.servlet.annotation.MultipartConfig} annotation + * possibly with a {@link jakarta.servlet.annotation.MultipartConfig} annotation * on your servlet class. Configuration settings such as maximum sizes or * storage locations need to be applied at that servlet registration level; * Servlet 3.0 does not allow for them to be set at the MultipartResolver level. diff --git a/spring-web/src/main/java/org/springframework/web/multipart/support/StandardServletPartUtils.java b/spring-web/src/main/java/org/springframework/web/multipart/support/StandardServletPartUtils.java index 6a9da0981c5..5b5b18f1323 100644 --- a/spring-web/src/main/java/org/springframework/web/multipart/support/StandardServletPartUtils.java +++ b/spring-web/src/main/java/org/springframework/web/multipart/support/StandardServletPartUtils.java @@ -19,8 +19,8 @@ package org.springframework.web.multipart.support; import java.util.ArrayList; import java.util.List; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.Part; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.Part; import org.springframework.beans.MutablePropertyValues; import org.springframework.util.LinkedMultiValueMap; diff --git a/spring-web/src/main/java/org/springframework/web/server/adapter/AbstractReactiveWebInitializer.java b/spring-web/src/main/java/org/springframework/web/server/adapter/AbstractReactiveWebInitializer.java index afafa743394..93db78699c2 100644 --- a/spring-web/src/main/java/org/springframework/web/server/adapter/AbstractReactiveWebInitializer.java +++ b/spring-web/src/main/java/org/springframework/web/server/adapter/AbstractReactiveWebInitializer.java @@ -16,11 +16,11 @@ package org.springframework.web.server.adapter; -import javax.servlet.ServletContext; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; -import javax.servlet.ServletException; -import javax.servlet.ServletRegistration; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRegistration; import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; diff --git a/spring-web/src/main/java/org/springframework/web/util/ContentCachingRequestWrapper.java b/spring-web/src/main/java/org/springframework/web/util/ContentCachingRequestWrapper.java index faa0ccbf643..64df59fb273 100644 --- a/spring-web/src/main/java/org/springframework/web/util/ContentCachingRequestWrapper.java +++ b/spring-web/src/main/java/org/springframework/web/util/ContentCachingRequestWrapper.java @@ -27,16 +27,16 @@ import java.util.Iterator; import java.util.List; import java.util.Map; -import javax.servlet.ReadListener; -import javax.servlet.ServletInputStream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; +import jakarta.servlet.ReadListener; +import jakarta.servlet.ServletInputStream; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; import org.springframework.http.HttpMethod; import org.springframework.lang.Nullable; /** - * {@link javax.servlet.http.HttpServletRequest} wrapper that caches all content read from + * {@link jakarta.servlet.http.HttpServletRequest} wrapper that caches all content read from * the {@linkplain #getInputStream() input stream} and {@linkplain #getReader() reader}, * and allows this content to be retrieved via a {@link #getContentAsByteArray() byte array}. * diff --git a/spring-web/src/main/java/org/springframework/web/util/ContentCachingResponseWrapper.java b/spring-web/src/main/java/org/springframework/web/util/ContentCachingResponseWrapper.java index 1b8d3337d80..d1de91db742 100644 --- a/spring-web/src/main/java/org/springframework/web/util/ContentCachingResponseWrapper.java +++ b/spring-web/src/main/java/org/springframework/web/util/ContentCachingResponseWrapper.java @@ -22,17 +22,17 @@ import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; -import javax.servlet.ServletOutputStream; -import javax.servlet.WriteListener; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpServletResponseWrapper; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.WriteListener; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponseWrapper; import org.springframework.http.HttpHeaders; import org.springframework.lang.Nullable; import org.springframework.util.FastByteArrayOutputStream; /** - * {@link javax.servlet.http.HttpServletResponse} wrapper that caches all content written to + * {@link jakarta.servlet.http.HttpServletResponse} wrapper that caches all content written to * the {@linkplain #getOutputStream() output stream} and {@linkplain #getWriter() writer}, * and allows this content to be retrieved via a {@link #getContentAsByteArray() byte array}. * diff --git a/spring-web/src/main/java/org/springframework/web/util/CookieGenerator.java b/spring-web/src/main/java/org/springframework/web/util/CookieGenerator.java index 2324274e816..82cc13d9eac 100644 --- a/spring-web/src/main/java/org/springframework/web/util/CookieGenerator.java +++ b/spring-web/src/main/java/org/springframework/web/util/CookieGenerator.java @@ -16,9 +16,8 @@ package org.springframework.web.util; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -68,7 +67,7 @@ public class CookieGenerator { /** * Use the given name for cookies created by this generator. - * @see javax.servlet.http.Cookie#getName() + * @see jakarta.servlet.http.Cookie#getName() */ public void setCookieName(@Nullable String cookieName) { this.cookieName = cookieName; @@ -85,7 +84,7 @@ public class CookieGenerator { /** * Use the given domain for cookies created by this generator. * The cookie is only visible to servers in this domain. - * @see javax.servlet.http.Cookie#setDomain + * @see jakarta.servlet.http.Cookie#setDomain */ public void setCookieDomain(@Nullable String cookieDomain) { this.cookieDomain = cookieDomain; @@ -102,7 +101,7 @@ public class CookieGenerator { /** * Use the given path for cookies created by this generator. * The cookie is only visible to URLs in this path and below. - * @see javax.servlet.http.Cookie#setPath + * @see jakarta.servlet.http.Cookie#setPath */ public void setCookiePath(String cookiePath) { this.cookiePath = cookiePath; @@ -120,7 +119,7 @@ public class CookieGenerator { * Useful special value: -1 ... not persistent, deleted when client shuts down. *

    Default is no specific maximum age at all, using the Servlet container's * default. - * @see javax.servlet.http.Cookie#setMaxAge + * @see jakarta.servlet.http.Cookie#setMaxAge */ public void setCookieMaxAge(@Nullable Integer cookieMaxAge) { this.cookieMaxAge = cookieMaxAge; @@ -139,7 +138,7 @@ public class CookieGenerator { * such as HTTPS (SSL). This is an indication to the receiving browser, * not processed by the HTTP server itself. *

    Default is "false". - * @see javax.servlet.http.Cookie#setSecure + * @see jakarta.servlet.http.Cookie#setSecure */ public void setCookieSecure(boolean cookieSecure) { this.cookieSecure = cookieSecure; @@ -156,7 +155,7 @@ public class CookieGenerator { /** * Set whether the cookie is supposed to be marked with the "HttpOnly" attribute. *

    Default is "false". - * @see javax.servlet.http.Cookie#setHttpOnly + * @see jakarta.servlet.http.Cookie#setHttpOnly */ public void setCookieHttpOnly(boolean cookieHttpOnly) { this.cookieHttpOnly = cookieHttpOnly; diff --git a/spring-web/src/main/java/org/springframework/web/util/HttpSessionMutexListener.java b/spring-web/src/main/java/org/springframework/web/util/HttpSessionMutexListener.java index 369904116fe..34837514696 100644 --- a/spring-web/src/main/java/org/springframework/web/util/HttpSessionMutexListener.java +++ b/spring-web/src/main/java/org/springframework/web/util/HttpSessionMutexListener.java @@ -18,8 +18,8 @@ package org.springframework.web.util; import java.io.Serializable; -import javax.servlet.http.HttpSessionEvent; -import javax.servlet.http.HttpSessionListener; +import jakarta.servlet.http.HttpSessionEvent; +import jakarta.servlet.http.HttpSessionListener; /** * Servlet HttpSessionListener that automatically exposes the session mutex @@ -39,7 +39,7 @@ import javax.servlet.http.HttpSessionListener; * @author Juergen Hoeller * @since 1.2.7 * @see WebUtils#SESSION_MUTEX_ATTRIBUTE - * @see WebUtils#getSessionMutex(javax.servlet.http.HttpSession) + * @see WebUtils#getSessionMutex(jakarta.servlet.http.HttpSession) * @see org.springframework.web.servlet.mvc.AbstractController#setSynchronizeOnSession */ public class HttpSessionMutexListener implements HttpSessionListener { diff --git a/spring-web/src/main/java/org/springframework/web/util/IntrospectorCleanupListener.java b/spring-web/src/main/java/org/springframework/web/util/IntrospectorCleanupListener.java index d3afef75f98..cdf38031364 100644 --- a/spring-web/src/main/java/org/springframework/web/util/IntrospectorCleanupListener.java +++ b/spring-web/src/main/java/org/springframework/web/util/IntrospectorCleanupListener.java @@ -18,8 +18,8 @@ package org.springframework.web.util; import java.beans.Introspector; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; import org.springframework.beans.CachedIntrospectionResults; diff --git a/spring-web/src/main/java/org/springframework/web/util/NestedServletException.java b/spring-web/src/main/java/org/springframework/web/util/NestedServletException.java index 1f8db8376be..08fc49bbeac 100644 --- a/spring-web/src/main/java/org/springframework/web/util/NestedServletException.java +++ b/spring-web/src/main/java/org/springframework/web/util/NestedServletException.java @@ -16,7 +16,7 @@ package org.springframework.web.util; -import javax.servlet.ServletException; +import jakarta.servlet.ServletException; import org.springframework.core.NestedExceptionUtils; import org.springframework.lang.Nullable; diff --git a/spring-web/src/main/java/org/springframework/web/util/ServletContextPropertyUtils.java b/spring-web/src/main/java/org/springframework/web/util/ServletContextPropertyUtils.java index ffaefa75b4b..d0c07c9222a 100644 --- a/spring-web/src/main/java/org/springframework/web/util/ServletContextPropertyUtils.java +++ b/spring-web/src/main/java/org/springframework/web/util/ServletContextPropertyUtils.java @@ -16,7 +16,7 @@ package org.springframework.web.util; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import org.springframework.lang.Nullable; import org.springframework.util.PropertyPlaceholderHelper; diff --git a/spring-web/src/main/java/org/springframework/web/util/ServletRequestPathUtils.java b/spring-web/src/main/java/org/springframework/web/util/ServletRequestPathUtils.java index b757f3e59f8..19c2c7742c8 100644 --- a/spring-web/src/main/java/org/springframework/web/util/ServletRequestPathUtils.java +++ b/spring-web/src/main/java/org/springframework/web/util/ServletRequestPathUtils.java @@ -18,11 +18,11 @@ package org.springframework.web.util; import java.nio.charset.StandardCharsets; import java.util.List; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletRequest; -import javax.servlet.http.HttpServletMapping; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.MappingMatch; +import jakarta.servlet.RequestDispatcher; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.http.HttpServletMapping; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.MappingMatch; import org.springframework.http.server.PathContainer; import org.springframework.http.server.RequestPath; diff --git a/spring-web/src/main/java/org/springframework/web/util/TagUtils.java b/spring-web/src/main/java/org/springframework/web/util/TagUtils.java index f1e206547b2..d299c11de56 100644 --- a/spring-web/src/main/java/org/springframework/web/util/TagUtils.java +++ b/spring-web/src/main/java/org/springframework/web/util/TagUtils.java @@ -16,8 +16,8 @@ package org.springframework.web.util; -import javax.servlet.jsp.PageContext; -import javax.servlet.jsp.tagext.Tag; +import jakarta.servlet.jsp.PageContext; +import jakarta.servlet.jsp.tagext.Tag; import org.springframework.util.Assert; @@ -28,13 +28,13 @@ import org.springframework.util.Assert; *

    *

      *
    • {@code page} will be transformed to - * {@link javax.servlet.jsp.PageContext#PAGE_SCOPE PageContext.PAGE_SCOPE} + * {@link jakarta.servlet.jsp.PageContext#PAGE_SCOPE PageContext.PAGE_SCOPE} *
    • {@code request} will be transformed to - * {@link javax.servlet.jsp.PageContext#REQUEST_SCOPE PageContext.REQUEST_SCOPE} + * {@link jakarta.servlet.jsp.PageContext#REQUEST_SCOPE PageContext.REQUEST_SCOPE} *
    • {@code session} will be transformed to - * {@link javax.servlet.jsp.PageContext#SESSION_SCOPE PageContext.SESSION_SCOPE} + * {@link jakarta.servlet.jsp.PageContext#SESSION_SCOPE PageContext.SESSION_SCOPE} *
    • {@code application} will be transformed to - * {@link javax.servlet.jsp.PageContext#APPLICATION_SCOPE PageContext.APPLICATION_SCOPE} + * {@link jakarta.servlet.jsp.PageContext#APPLICATION_SCOPE PageContext.APPLICATION_SCOPE} *
    * * @author Alef Arendsen @@ -123,7 +123,7 @@ public abstract class TagUtils { * or in the case of the {@link String}-typed arguments, is composed wholly * of whitespace; or if the supplied {@code ancestorTagClass} is not * type-assignable to the {@link Tag} class - * @see #hasAncestorOfType(javax.servlet.jsp.tagext.Tag, Class) + * @see #hasAncestorOfType(jakarta.servlet.jsp.tagext.Tag, Class) */ public static void assertHasAncestorOfType(Tag tag, Class ancestorTagClass, String tagName, String ancestorTagName) { diff --git a/spring-web/src/main/java/org/springframework/web/util/UrlPathHelper.java b/spring-web/src/main/java/org/springframework/web/util/UrlPathHelper.java index 663dbb7566c..a17335391a3 100644 --- a/spring-web/src/main/java/org/springframework/web/util/UrlPathHelper.java +++ b/spring-web/src/main/java/org/springframework/web/util/UrlPathHelper.java @@ -21,12 +21,11 @@ import java.nio.charset.UnsupportedCharsetException; import java.util.Map; import java.util.Properties; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletRequest; -import javax.servlet.http.HttpServletMapping; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.MappingMatch; - +import jakarta.servlet.RequestDispatcher; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.http.HttpServletMapping; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.MappingMatch; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -51,7 +50,7 @@ import org.springframework.util.StringUtils; * @author Rossen Stoyanchev * @since 14.01.2004 * @see #getLookupPathForRequest - * @see javax.servlet.RequestDispatcher + * @see jakarta.servlet.RequestDispatcher */ public class UrlPathHelper { @@ -92,7 +91,7 @@ public class UrlPathHelper { /** * Whether URL lookups should always use the full path within the current * web application context, i.e. within - * {@link javax.servlet.ServletContext#getContextPath()}. + * {@link jakarta.servlet.ServletContext#getContextPath()}. *

    If set to {@literal false} the path within the current servlet mapping * is used instead if applicable (i.e. in the case of a prefix based Servlet * mapping such as "/myServlet/*"). @@ -118,7 +117,7 @@ public class UrlPathHelper { * @see #getContextPath * @see #getRequestUri * @see WebUtils#DEFAULT_CHARACTER_ENCODING - * @see javax.servlet.ServletRequest#getCharacterEncoding() + * @see jakarta.servlet.ServletRequest#getCharacterEncoding() * @see java.net.URLDecoder#decode(String, String) */ public void setUrlDecode(boolean urlDecode) { @@ -159,8 +158,8 @@ public class UrlPathHelper { * {@code ServletRequest.setCharacterEncoding} method. * @param defaultEncoding the character encoding to use * @see #determineEncoding - * @see javax.servlet.ServletRequest#getCharacterEncoding() - * @see javax.servlet.ServletRequest#setCharacterEncoding(String) + * @see jakarta.servlet.ServletRequest#getCharacterEncoding() + * @see jakarta.servlet.ServletRequest#setCharacterEncoding(String) * @see WebUtils#DEFAULT_CHARACTER_ENCODING */ public void setDefaultEncoding(String defaultEncoding) { @@ -558,7 +557,7 @@ public class UrlPathHelper { * @param source the String to decode * @return the decoded String * @see WebUtils#DEFAULT_CHARACTER_ENCODING - * @see javax.servlet.ServletRequest#getCharacterEncoding + * @see jakarta.servlet.ServletRequest#getCharacterEncoding * @see java.net.URLDecoder#decode(String, String) * @see java.net.URLDecoder#decode(String) */ @@ -591,7 +590,7 @@ public class UrlPathHelper { * falling back to the default encoding specified for this resolver. * @param request current HTTP request * @return the encoding for the request (never {@code null}) - * @see javax.servlet.ServletRequest#getCharacterEncoding() + * @see jakarta.servlet.ServletRequest#getCharacterEncoding() * @see #setDefaultEncoding */ protected String determineEncoding(HttpServletRequest request) { diff --git a/spring-web/src/main/java/org/springframework/web/util/WebAppRootListener.java b/spring-web/src/main/java/org/springframework/web/util/WebAppRootListener.java index bd340eea48b..d96231b501c 100644 --- a/spring-web/src/main/java/org/springframework/web/util/WebAppRootListener.java +++ b/spring-web/src/main/java/org/springframework/web/util/WebAppRootListener.java @@ -16,8 +16,8 @@ package org.springframework.web.util; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; /** * Listener that sets a system property to the web application root directory. diff --git a/spring-web/src/main/java/org/springframework/web/util/WebUtils.java b/spring-web/src/main/java/org/springframework/web/util/WebUtils.java index 8a0e76127ae..7b4c471371a 100644 --- a/spring-web/src/main/java/org/springframework/web/util/WebUtils.java +++ b/spring-web/src/main/java/org/springframework/web/util/WebUtils.java @@ -25,15 +25,15 @@ import java.util.Map; import java.util.StringTokenizer; import java.util.TreeMap; -import javax.servlet.ServletContext; -import javax.servlet.ServletRequest; -import javax.servlet.ServletRequestWrapper; -import javax.servlet.ServletResponse; -import javax.servlet.ServletResponseWrapper; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletRequestWrapper; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.ServletResponseWrapper; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpRequest; @@ -61,70 +61,70 @@ public abstract class WebUtils { *

    If included via a {@code RequestDispatcher}, the current resource will see the * originating request. Its own request URI is exposed as a request attribute. */ - public static final String INCLUDE_REQUEST_URI_ATTRIBUTE = "javax.servlet.include.request_uri"; + public static final String INCLUDE_REQUEST_URI_ATTRIBUTE = "jakarta.servlet.include.request_uri"; /** * Standard Servlet 2.3+ spec request attribute for include context path. *

    If included via a {@code RequestDispatcher}, the current resource will see the * originating context path. Its own context path is exposed as a request attribute. */ - public static final String INCLUDE_CONTEXT_PATH_ATTRIBUTE = "javax.servlet.include.context_path"; + public static final String INCLUDE_CONTEXT_PATH_ATTRIBUTE = "jakarta.servlet.include.context_path"; /** * Standard Servlet 2.3+ spec request attribute for include servlet path. *

    If included via a {@code RequestDispatcher}, the current resource will see the * originating servlet path. Its own servlet path is exposed as a request attribute. */ - public static final String INCLUDE_SERVLET_PATH_ATTRIBUTE = "javax.servlet.include.servlet_path"; + public static final String INCLUDE_SERVLET_PATH_ATTRIBUTE = "jakarta.servlet.include.servlet_path"; /** * Standard Servlet 2.3+ spec request attribute for include path info. *

    If included via a {@code RequestDispatcher}, the current resource will see the * originating path info. Its own path info is exposed as a request attribute. */ - public static final String INCLUDE_PATH_INFO_ATTRIBUTE = "javax.servlet.include.path_info"; + public static final String INCLUDE_PATH_INFO_ATTRIBUTE = "jakarta.servlet.include.path_info"; /** * Standard Servlet 2.3+ spec request attribute for include query string. *

    If included via a {@code RequestDispatcher}, the current resource will see the * originating query string. Its own query string is exposed as a request attribute. */ - public static final String INCLUDE_QUERY_STRING_ATTRIBUTE = "javax.servlet.include.query_string"; + public static final String INCLUDE_QUERY_STRING_ATTRIBUTE = "jakarta.servlet.include.query_string"; /** * Standard Servlet 2.4+ spec request attribute for forward request URI. *

    If forwarded to via a RequestDispatcher, the current resource will see its * own request URI. The originating request URI is exposed as a request attribute. */ - public static final String FORWARD_REQUEST_URI_ATTRIBUTE = "javax.servlet.forward.request_uri"; + public static final String FORWARD_REQUEST_URI_ATTRIBUTE = "jakarta.servlet.forward.request_uri"; /** * Standard Servlet 2.4+ spec request attribute for forward context path. *

    If forwarded to via a RequestDispatcher, the current resource will see its * own context path. The originating context path is exposed as a request attribute. */ - public static final String FORWARD_CONTEXT_PATH_ATTRIBUTE = "javax.servlet.forward.context_path"; + public static final String FORWARD_CONTEXT_PATH_ATTRIBUTE = "jakarta.servlet.forward.context_path"; /** * Standard Servlet 2.4+ spec request attribute for forward servlet path. *

    If forwarded to via a RequestDispatcher, the current resource will see its * own servlet path. The originating servlet path is exposed as a request attribute. */ - public static final String FORWARD_SERVLET_PATH_ATTRIBUTE = "javax.servlet.forward.servlet_path"; + public static final String FORWARD_SERVLET_PATH_ATTRIBUTE = "jakarta.servlet.forward.servlet_path"; /** * Standard Servlet 2.4+ spec request attribute for forward path info. *

    If forwarded to via a RequestDispatcher, the current resource will see its * own path ingo. The originating path info is exposed as a request attribute. */ - public static final String FORWARD_PATH_INFO_ATTRIBUTE = "javax.servlet.forward.path_info"; + public static final String FORWARD_PATH_INFO_ATTRIBUTE = "jakarta.servlet.forward.path_info"; /** * Standard Servlet 2.4+ spec request attribute for forward query string. *

    If forwarded to via a RequestDispatcher, the current resource will see its * own query string. The originating query string is exposed as a request attribute. */ - public static final String FORWARD_QUERY_STRING_ATTRIBUTE = "javax.servlet.forward.query_string"; + public static final String FORWARD_QUERY_STRING_ATTRIBUTE = "jakarta.servlet.forward.query_string"; /** * Standard Servlet 2.3+ spec request attribute for error page status code. @@ -132,7 +132,7 @@ public abstract class WebUtils { * to them directly rather than through the servlet container's error page * resolution mechanism. */ - public static final String ERROR_STATUS_CODE_ATTRIBUTE = "javax.servlet.error.status_code"; + public static final String ERROR_STATUS_CODE_ATTRIBUTE = "jakarta.servlet.error.status_code"; /** * Standard Servlet 2.3+ spec request attribute for error page exception type. @@ -140,7 +140,7 @@ public abstract class WebUtils { * to them directly rather than through the servlet container's error page * resolution mechanism. */ - public static final String ERROR_EXCEPTION_TYPE_ATTRIBUTE = "javax.servlet.error.exception_type"; + public static final String ERROR_EXCEPTION_TYPE_ATTRIBUTE = "jakarta.servlet.error.exception_type"; /** * Standard Servlet 2.3+ spec request attribute for error page message. @@ -148,7 +148,7 @@ public abstract class WebUtils { * to them directly rather than through the servlet container's error page * resolution mechanism. */ - public static final String ERROR_MESSAGE_ATTRIBUTE = "javax.servlet.error.message"; + public static final String ERROR_MESSAGE_ATTRIBUTE = "jakarta.servlet.error.message"; /** * Standard Servlet 2.3+ spec request attribute for error page exception. @@ -156,7 +156,7 @@ public abstract class WebUtils { * to them directly rather than through the servlet container's error page * resolution mechanism. */ - public static final String ERROR_EXCEPTION_ATTRIBUTE = "javax.servlet.error.exception"; + public static final String ERROR_EXCEPTION_ATTRIBUTE = "jakarta.servlet.error.exception"; /** * Standard Servlet 2.3+ spec request attribute for error page request URI. @@ -164,7 +164,7 @@ public abstract class WebUtils { * to them directly rather than through the servlet container's error page * resolution mechanism. */ - public static final String ERROR_REQUEST_URI_ATTRIBUTE = "javax.servlet.error.request_uri"; + public static final String ERROR_REQUEST_URI_ATTRIBUTE = "jakarta.servlet.error.request_uri"; /** * Standard Servlet 2.3+ spec request attribute for error page servlet name. @@ -172,7 +172,7 @@ public abstract class WebUtils { * to them directly rather than through the servlet container's error page * resolution mechanism. */ - public static final String ERROR_SERVLET_NAME_ATTRIBUTE = "javax.servlet.error.servlet_name"; + public static final String ERROR_SERVLET_NAME_ATTRIBUTE = "jakarta.servlet.error.servlet_name"; /** * Prefix of the charset clause in a content type String: ";charset=". @@ -190,7 +190,7 @@ public abstract class WebUtils { * Standard Servlet spec context attribute that specifies a temporary * directory for the current web application, of type {@code java.io.File}. */ - public static final String TEMP_DIR_CONTEXT_ATTRIBUTE = "javax.servlet.context.tempdir"; + public static final String TEMP_DIR_CONTEXT_ATTRIBUTE = "jakarta.servlet.context.tempdir"; /** * HTML escape parameter at the servlet context level @@ -331,7 +331,7 @@ public abstract class WebUtils { * @param path the path within the web application * @return the corresponding real path * @throws FileNotFoundException if the path cannot be resolved to a resource - * @see javax.servlet.ServletContext#getRealPath + * @see jakarta.servlet.ServletContext#getRealPath */ public static String getRealPath(ServletContext servletContext, String path) throws FileNotFoundException { Assert.notNull(servletContext, "ServletContext must not be null"); @@ -492,7 +492,7 @@ public abstract class WebUtils { /** * Determine whether the given request is an include request, * that is, not a top-level HTTP request coming in from the outside. - *

    Checks the presence of the "javax.servlet.include.request_uri" + *

    Checks the presence of the "jakarta.servlet.include.request_uri" * request attribute. Could check any request attribute that is only * present in an include request. * @param request current servlet request @@ -503,18 +503,18 @@ public abstract class WebUtils { } /** - * Expose the Servlet spec's error attributes as {@link javax.servlet.http.HttpServletRequest} + * Expose the Servlet spec's error attributes as {@link jakarta.servlet.http.HttpServletRequest} * attributes under the keys defined in the Servlet 2.3 specification, for error pages that * are rendered directly rather than through the Servlet container's error page resolution: - * {@code javax.servlet.error.status_code}, - * {@code javax.servlet.error.exception_type}, - * {@code javax.servlet.error.message}, - * {@code javax.servlet.error.exception}, - * {@code javax.servlet.error.request_uri}, - * {@code javax.servlet.error.servlet_name}. + * {@code jakarta.servlet.error.status_code}, + * {@code jakarta.servlet.error.exception_type}, + * {@code jakarta.servlet.error.message}, + * {@code jakarta.servlet.error.exception}, + * {@code jakarta.servlet.error.request_uri}, + * {@code jakarta.servlet.error.servlet_name}. *

    Does not override values if already present, to respect attribute values * that have been exposed explicitly before. - *

    Exposes status code 200 by default. Set the "javax.servlet.error.status_code" + *

    Exposes status code 200 by default. Set the "jakarta.servlet.error.status_code" * attribute explicitly (before or after) in order to expose a different status code. * @param request current servlet request * @param ex the exception encountered @@ -546,14 +546,14 @@ public abstract class WebUtils { } /** - * Clear the Servlet spec's error attributes as {@link javax.servlet.http.HttpServletRequest} + * Clear the Servlet spec's error attributes as {@link jakarta.servlet.http.HttpServletRequest} * attributes under the keys defined in the Servlet 2.3 specification: - * {@code javax.servlet.error.status_code}, - * {@code javax.servlet.error.exception_type}, - * {@code javax.servlet.error.message}, - * {@code javax.servlet.error.exception}, - * {@code javax.servlet.error.request_uri}, - * {@code javax.servlet.error.servlet_name}. + * {@code jakarta.servlet.error.status_code}, + * {@code jakarta.servlet.error.exception_type}, + * {@code jakarta.servlet.error.message}, + * {@code jakarta.servlet.error.exception}, + * {@code jakarta.servlet.error.request_uri}, + * {@code jakarta.servlet.error.servlet_name}. * @param request current servlet request */ public static void clearErrorRequestAttributes(HttpServletRequest request) { @@ -683,9 +683,9 @@ public abstract class WebUtils { * (if this is null or the empty string, all parameters will match) * @return map containing request parameters without the prefix, * containing either a String or a String array as values - * @see javax.servlet.ServletRequest#getParameterNames - * @see javax.servlet.ServletRequest#getParameterValues - * @see javax.servlet.ServletRequest#getParameterMap + * @see jakarta.servlet.ServletRequest#getParameterNames + * @see jakarta.servlet.ServletRequest#getParameterValues + * @see jakarta.servlet.ServletRequest#getParameterMap */ public static Map getParametersStartingWith(ServletRequest request, @Nullable String prefix) { Assert.notNull(request, "Request must not be null"); diff --git a/spring-web/src/test/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriterTests.java b/spring-web/src/test/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriterTests.java index 17c057d6d6f..a4b292f86af 100644 --- a/spring-web/src/test/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriterTests.java +++ b/spring-web/src/test/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriterTests.java @@ -180,9 +180,8 @@ public class MultipartHttpMessageWriterTests extends AbstractLeakCheckingTests { assertThat(value).isEqualTo("AaBbCc"); } - @Test // gh-24582 + @Test // gh-24582 public void writeMultipartRelated() { - MediaType mediaType = MediaType.parseMediaType("multipart/related;type=foo"); MultipartBodyBuilder bodyBuilder = new MultipartBodyBuilder(); @@ -297,9 +296,9 @@ public class MultipartHttpMessageWriterTests extends AbstractLeakCheckingTests { MediaType contentType = response.getHeaders().getContentType(); assertThat(contentType.getParameter("boundary")).as("No boundary found").isNotNull(); - // see if Synchronoss NIO Multipart can read what we wrote - SynchronossPartHttpMessageReader synchronossReader = new SynchronossPartHttpMessageReader(); - MultipartHttpMessageReader reader = new MultipartHttpMessageReader(synchronossReader); + // see if we can read what we wrote + DefaultPartHttpMessageReader partReader = new DefaultPartHttpMessageReader(); + MultipartHttpMessageReader reader = new MultipartHttpMessageReader(partReader); MockServerHttpRequest request = MockServerHttpRequest.post("/") .contentType(MediaType.parseMediaType(contentType.toString())) diff --git a/spring-web/src/test/java/org/springframework/http/codec/multipart/SynchronossPartHttpMessageReaderTests.java b/spring-web/src/test/java/org/springframework/http/codec/multipart/SynchronossPartHttpMessageReaderTests.java deleted file mode 100644 index 10dbdba63a7..00000000000 --- a/spring-web/src/test/java/org/springframework/http/codec/multipart/SynchronossPartHttpMessageReaderTests.java +++ /dev/null @@ -1,237 +0,0 @@ -/* - * Copyright 2002-2021 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.http.codec.multipart; - -import java.io.File; -import java.io.IOException; -import java.nio.channels.ReadableByteChannel; -import java.time.Duration; -import java.util.Map; -import java.util.function.Consumer; - -import org.junit.jupiter.api.Test; -import org.reactivestreams.Subscription; -import reactor.core.publisher.BaseSubscriber; -import reactor.core.publisher.Flux; -import reactor.core.publisher.Mono; -import reactor.test.StepVerifier; - -import org.springframework.core.ResolvableType; -import org.springframework.core.codec.DecodingException; -import org.springframework.core.io.ClassPathResource; -import org.springframework.core.io.buffer.DataBuffer; -import org.springframework.core.io.buffer.DataBufferUtils; -import org.springframework.core.testfixture.io.buffer.AbstractLeakCheckingTests; -import org.springframework.http.HttpMethod; -import org.springframework.http.MediaType; -import org.springframework.http.client.MultipartBodyBuilder; -import org.springframework.http.server.reactive.ServerHttpRequest; -import org.springframework.util.MultiValueMap; -import org.springframework.web.testfixture.http.client.reactive.MockClientHttpRequest; -import org.springframework.web.testfixture.http.server.reactive.MockServerHttpRequest; - -import static java.nio.charset.StandardCharsets.UTF_8; -import static java.util.Collections.emptyMap; -import static java.util.Collections.singletonMap; -import static org.assertj.core.api.Assertions.assertThat; -import static org.springframework.core.ResolvableType.forClassWithGenerics; -import static org.springframework.http.HttpHeaders.CONTENT_TYPE; -import static org.springframework.http.MediaType.MULTIPART_FORM_DATA; - -/** - * Unit tests for {@link SynchronossPartHttpMessageReader}. - * - * @author Sebastien Deleuze - * @author Rossen Stoyanchev - * @author Brian Clozel - */ -public class SynchronossPartHttpMessageReaderTests extends AbstractLeakCheckingTests { - - private final MultipartHttpMessageReader reader = - new MultipartHttpMessageReader(new SynchronossPartHttpMessageReader()); - - private static final ResolvableType PARTS_ELEMENT_TYPE = - forClassWithGenerics(MultiValueMap.class, String.class, Part.class); - - - @Test - void canRead() { - assertThat(this.reader.canRead(PARTS_ELEMENT_TYPE, MediaType.MULTIPART_FORM_DATA)).isTrue(); - assertThat(this.reader.canRead(PARTS_ELEMENT_TYPE, MediaType.MULTIPART_MIXED)).isTrue(); - assertThat(this.reader.canRead(PARTS_ELEMENT_TYPE, MediaType.MULTIPART_RELATED)).isTrue(); - assertThat(this.reader.canRead(PARTS_ELEMENT_TYPE, null)).isTrue(); - - assertThat(this.reader.canRead( - forClassWithGenerics(MultiValueMap.class, String.class, Object.class), - MediaType.MULTIPART_FORM_DATA)).isFalse(); - - assertThat(this.reader.canRead( - forClassWithGenerics(MultiValueMap.class, String.class, String.class), - MediaType.MULTIPART_FORM_DATA)).isFalse(); - - assertThat(this.reader.canRead( - forClassWithGenerics(Map.class, String.class, String.class), - MediaType.MULTIPART_FORM_DATA)).isFalse(); - - assertThat(this.reader.canRead( - forClassWithGenerics(MultiValueMap.class, String.class, Part.class), - MediaType.APPLICATION_FORM_URLENCODED)).isFalse(); - } - - @Test - void resolveParts() { - ServerHttpRequest request = generateMultipartRequest(); - MultiValueMap parts = this.reader.readMono(PARTS_ELEMENT_TYPE, request, emptyMap()).block(); - - assertThat(parts).containsOnlyKeys("filePart", "textPart"); - - Part part = parts.getFirst("filePart"); - assertThat(part).isInstanceOf(FilePart.class); - assertThat(part.name()).isEqualTo("filePart"); - assertThat(((FilePart) part).filename()).isEqualTo("foo.txt"); - DataBuffer buffer = DataBufferUtils.join(part.content()).block(); - assertThat(buffer.toString(UTF_8)).isEqualTo("Lorem Ipsum."); - DataBufferUtils.release(buffer); - - part = parts.getFirst("textPart"); - assertThat(part).isInstanceOf(FormFieldPart.class); - assertThat(part.name()).isEqualTo("textPart"); - assertThat(((FormFieldPart) part).value()).isEqualTo("sample-text"); - } - - @Test // SPR-16545 - void transferTo() throws IOException { - ServerHttpRequest request = generateMultipartRequest(); - MultiValueMap parts = this.reader.readMono(PARTS_ELEMENT_TYPE, request, emptyMap()).block(); - - assertThat(parts).isNotNull(); - FilePart part = (FilePart) parts.getFirst("filePart"); - assertThat(part).isNotNull(); - - File dest = File.createTempFile(part.filename(), "multipart"); - part.transferTo(dest).block(Duration.ofSeconds(5)); - - assertThat(dest.exists()).isTrue(); - assertThat(dest.length()).isEqualTo(12); - assertThat(dest.delete()).isTrue(); - } - - @Test - void bodyError() { - ServerHttpRequest request = generateErrorMultipartRequest(); - StepVerifier.create(this.reader.readMono(PARTS_ELEMENT_TYPE, request, emptyMap())).verifyError(); - } - - @Test - void readPartsWithoutDemand() { - ServerHttpRequest request = generateMultipartRequest(); - Mono> parts = this.reader.readMono(PARTS_ELEMENT_TYPE, request, emptyMap()); - ZeroDemandSubscriber subscriber = new ZeroDemandSubscriber(); - parts.subscribe(subscriber); - subscriber.cancel(); - } - - @Test - void gh23768() throws IOException { - ReadableByteChannel channel = new ClassPathResource("invalid.multipart", getClass()).readableChannel(); - Flux body = DataBufferUtils.readByteChannel(() -> channel, this.bufferFactory, 1024); - - MediaType contentType = new MediaType("multipart", "form-data", - singletonMap("boundary", "NbjrKgjbsaMLdnMxMfDpD6myWomYc0qNX0w")); - ServerHttpRequest request = MockServerHttpRequest.post("/") - .contentType(contentType) - .body(body); - - Mono> parts = this.reader.readMono(PARTS_ELEMENT_TYPE, request, emptyMap()); - - StepVerifier.create(parts) - .assertNext(result -> assertThat(result).isEmpty()) - .verifyComplete(); - } - - @Test - void readTooManyParts() { - testMultipartExceptions(reader -> reader.setMaxParts(1), - ex -> assertThat(ex) - .isInstanceOf(DecodingException.class) - .hasMessageStartingWith("Failure while parsing part[2]") - .hasRootCauseMessage("Too many parts: Part[2] but maxParts=1") - ); - } - - @Test - void readFilePartTooBig() { - testMultipartExceptions(reader -> reader.setMaxDiskUsagePerPart(5), - ex -> assertThat(ex) - .isInstanceOf(DecodingException.class) - .hasMessageStartingWith("Failure while parsing part[1]") - .hasRootCauseMessage("Part[1] exceeded the disk usage limit of 5 bytes") - ); - } - - @Test - void readPartHeadersTooBig() { - testMultipartExceptions(reader -> reader.setMaxInMemorySize(1), - ex -> assertThat(ex) - .isInstanceOf(DecodingException.class) - .hasMessageStartingWith("Failure while parsing part[1]") - .hasRootCauseMessage("Part[1] exceeded the in-memory limit of 1 bytes") - ); - } - - private void testMultipartExceptions( - Consumer configurer, Consumer assertions) { - - SynchronossPartHttpMessageReader reader = new SynchronossPartHttpMessageReader(); - configurer.accept(reader); - MultipartHttpMessageReader multipartReader = new MultipartHttpMessageReader(reader); - StepVerifier.create(multipartReader.readMono(PARTS_ELEMENT_TYPE, generateMultipartRequest(), emptyMap())) - .consumeErrorWith(assertions) - .verify(); - } - - private ServerHttpRequest generateMultipartRequest() { - MultipartBodyBuilder partsBuilder = new MultipartBodyBuilder(); - partsBuilder.part("filePart", new ClassPathResource("org/springframework/http/codec/multipart/foo.txt")); - partsBuilder.part("textPart", "sample-text"); - - MockClientHttpRequest outputMessage = new MockClientHttpRequest(HttpMethod.POST, "/"); - new MultipartHttpMessageWriter() - .write(Mono.just(partsBuilder.build()), null, MediaType.MULTIPART_FORM_DATA, outputMessage, null) - .block(Duration.ofSeconds(5)); - Flux requestBody = outputMessage.getBody() - .map(buffer -> this.bufferFactory.wrap(buffer.asByteBuffer())); - return MockServerHttpRequest.post("/") - .contentType(outputMessage.getHeaders().getContentType()) - .body(requestBody); - } - - private ServerHttpRequest generateErrorMultipartRequest() { - return MockServerHttpRequest.post("/") - .header(CONTENT_TYPE, MULTIPART_FORM_DATA.toString()) - .body(Flux.just(this.bufferFactory.wrap("invalid content".getBytes()))); - } - - private static class ZeroDemandSubscriber extends BaseSubscriber> { - - @Override - protected void hookOnSubscribe(Subscription subscription) { - // Just subscribe without requesting - } - } - -} diff --git a/spring-web/src/test/java/org/springframework/http/codec/xml/Jaxb2XmlDecoderTests.java b/spring-web/src/test/java/org/springframework/http/codec/xml/Jaxb2XmlDecoderTests.java index 0f01d8c47a9..64acde26937 100644 --- a/spring-web/src/test/java/org/springframework/http/codec/xml/Jaxb2XmlDecoderTests.java +++ b/spring-web/src/test/java/org/springframework/http/codec/xml/Jaxb2XmlDecoderTests.java @@ -253,7 +253,7 @@ public class Jaxb2XmlDecoderTests extends AbstractLeakCheckingTests { } - @javax.xml.bind.annotation.XmlType(name = "pojo") + @jakarta.xml.bind.annotation.XmlType(name = "pojo") public static class TypePojo { private String foo; diff --git a/spring-web/src/test/java/org/springframework/http/codec/xml/Jaxb2XmlEncoderTests.java b/spring-web/src/test/java/org/springframework/http/codec/xml/Jaxb2XmlEncoderTests.java index a32a3f727eb..ab0f2ad8d63 100644 --- a/spring-web/src/test/java/org/springframework/http/codec/xml/Jaxb2XmlEncoderTests.java +++ b/spring-web/src/test/java/org/springframework/http/codec/xml/Jaxb2XmlEncoderTests.java @@ -20,10 +20,9 @@ import java.util.Arrays; import java.util.List; import java.util.function.Consumer; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlElements; -import javax.xml.bind.annotation.XmlRootElement; - +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlElements; +import jakarta.xml.bind.annotation.XmlRootElement; import org.junit.jupiter.api.Test; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; diff --git a/spring-web/src/test/java/org/springframework/http/codec/xml/jaxb/XmlRootElement.java b/spring-web/src/test/java/org/springframework/http/codec/xml/jaxb/XmlRootElement.java index 7a2dae1aca4..3d17b341696 100644 --- a/spring-web/src/test/java/org/springframework/http/codec/xml/jaxb/XmlRootElement.java +++ b/spring-web/src/test/java/org/springframework/http/codec/xml/jaxb/XmlRootElement.java @@ -19,7 +19,7 @@ package org.springframework.http.codec.xml.jaxb; /** * @author Arjen Poutsma */ -@javax.xml.bind.annotation.XmlRootElement +@jakarta.xml.bind.annotation.XmlRootElement public class XmlRootElement { } diff --git a/spring-web/src/test/java/org/springframework/http/codec/xml/jaxb/XmlRootElementWithName.java b/spring-web/src/test/java/org/springframework/http/codec/xml/jaxb/XmlRootElementWithName.java index 88de86671ac..5fd82ef986e 100644 --- a/spring-web/src/test/java/org/springframework/http/codec/xml/jaxb/XmlRootElementWithName.java +++ b/spring-web/src/test/java/org/springframework/http/codec/xml/jaxb/XmlRootElementWithName.java @@ -16,7 +16,7 @@ package org.springframework.http.codec.xml.jaxb; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlRootElement; /** * @author Arjen Poutsma diff --git a/spring-web/src/test/java/org/springframework/http/codec/xml/jaxb/XmlRootElementWithNameAndNamespace.java b/spring-web/src/test/java/org/springframework/http/codec/xml/jaxb/XmlRootElementWithNameAndNamespace.java index dfb765bd098..3a89dd3e696 100644 --- a/spring-web/src/test/java/org/springframework/http/codec/xml/jaxb/XmlRootElementWithNameAndNamespace.java +++ b/spring-web/src/test/java/org/springframework/http/codec/xml/jaxb/XmlRootElementWithNameAndNamespace.java @@ -16,7 +16,7 @@ package org.springframework.http.codec.xml.jaxb; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlRootElement; /** * @author Arjen Poutsma diff --git a/spring-web/src/test/java/org/springframework/http/codec/xml/jaxb/XmlType.java b/spring-web/src/test/java/org/springframework/http/codec/xml/jaxb/XmlType.java index cff0d9f4509..749f4c22e23 100644 --- a/spring-web/src/test/java/org/springframework/http/codec/xml/jaxb/XmlType.java +++ b/spring-web/src/test/java/org/springframework/http/codec/xml/jaxb/XmlType.java @@ -19,7 +19,7 @@ package org.springframework.http.codec.xml.jaxb; /** * @author Arjen Poutsma */ -@javax.xml.bind.annotation.XmlType +@jakarta.xml.bind.annotation.XmlType public class XmlType { } diff --git a/spring-web/src/test/java/org/springframework/http/codec/xml/jaxb/XmlTypeWithName.java b/spring-web/src/test/java/org/springframework/http/codec/xml/jaxb/XmlTypeWithName.java index 60c42519a8d..744524da594 100644 --- a/spring-web/src/test/java/org/springframework/http/codec/xml/jaxb/XmlTypeWithName.java +++ b/spring-web/src/test/java/org/springframework/http/codec/xml/jaxb/XmlTypeWithName.java @@ -16,7 +16,7 @@ package org.springframework.http.codec.xml.jaxb; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlType; /** * @author Arjen Poutsma diff --git a/spring-web/src/test/java/org/springframework/http/codec/xml/jaxb/XmlTypeWithNameAndNamespace.java b/spring-web/src/test/java/org/springframework/http/codec/xml/jaxb/XmlTypeWithNameAndNamespace.java index f1ea796fbaa..a299b84c4c7 100644 --- a/spring-web/src/test/java/org/springframework/http/codec/xml/jaxb/XmlTypeWithNameAndNamespace.java +++ b/spring-web/src/test/java/org/springframework/http/codec/xml/jaxb/XmlTypeWithNameAndNamespace.java @@ -16,7 +16,7 @@ package org.springframework.http.codec.xml.jaxb; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.XmlType; /** * @author Arjen Poutsma diff --git a/spring-web/src/test/java/org/springframework/http/codec/xml/jaxb/package-info.java b/spring-web/src/test/java/org/springframework/http/codec/xml/jaxb/package-info.java index f3b3a59496b..00c3767ca86 100644 --- a/spring-web/src/test/java/org/springframework/http/codec/xml/jaxb/package-info.java +++ b/spring-web/src/test/java/org/springframework/http/codec/xml/jaxb/package-info.java @@ -1,2 +1,2 @@ -@javax.xml.bind.annotation.XmlSchema(namespace = "namespace") +@jakarta.xml.bind.annotation.XmlSchema(namespace = "namespace") package org.springframework.http.codec.xml.jaxb; diff --git a/spring-web/src/test/java/org/springframework/http/converter/FormHttpMessageConverterTests.java b/spring-web/src/test/java/org/springframework/http/converter/FormHttpMessageConverterTests.java index 43bfe055209..9f307b45035 100644 --- a/spring-web/src/test/java/org/springframework/http/converter/FormHttpMessageConverterTests.java +++ b/spring-web/src/test/java/org/springframework/http/converter/FormHttpMessageConverterTests.java @@ -29,11 +29,12 @@ import java.util.Map; import javax.xml.transform.Source; import javax.xml.transform.stream.StreamSource; -import org.apache.commons.fileupload.FileItem; -import org.apache.commons.fileupload.FileItemFactory; -import org.apache.commons.fileupload.FileUpload; -import org.apache.commons.fileupload.RequestContext; -import org.apache.commons.fileupload.disk.DiskFileItemFactory; +import org.apache.tomcat.util.http.fileupload.FileItem; +import org.apache.tomcat.util.http.fileupload.FileItemFactory; +import org.apache.tomcat.util.http.fileupload.FileUpload; +import org.apache.tomcat.util.http.fileupload.RequestContext; +import org.apache.tomcat.util.http.fileupload.UploadContext; +import org.apache.tomcat.util.http.fileupload.disk.DiskFileItemFactory; import org.junit.jupiter.api.Test; import org.springframework.core.io.ClassPathResource; @@ -327,16 +328,17 @@ public class FormHttpMessageConverterTests { } - private static class MockHttpOutputMessageRequestContext implements RequestContext { + private static class MockHttpOutputMessageRequestContext implements UploadContext { private final MockHttpOutputMessage outputMessage; + private final byte[] body; private MockHttpOutputMessageRequestContext(MockHttpOutputMessage outputMessage) { this.outputMessage = outputMessage; + this.body = this.outputMessage.getBodyAsBytes(); } - @Override public String getCharacterEncoding() { MediaType type = this.outputMessage.getHeaders().getContentType(); @@ -350,17 +352,17 @@ public class FormHttpMessageConverterTests { } @Override - @Deprecated - public int getContentLength() { - return this.outputMessage.getBodyAsBytes().length; + public InputStream getInputStream() throws IOException { + return new ByteArrayInputStream(body); } @Override - public InputStream getInputStream() throws IOException { - return new ByteArrayInputStream(this.outputMessage.getBodyAsBytes()); + public long contentLength() { + return body.length; } } + public static class MyBean { private String string; diff --git a/spring-web/src/test/java/org/springframework/http/converter/json/JsonbHttpMessageConverterTests.java b/spring-web/src/test/java/org/springframework/http/converter/json/JsonbHttpMessageConverterTests.java index 7649e8415bd..44e14ac5761 100644 --- a/spring-web/src/test/java/org/springframework/http/converter/json/JsonbHttpMessageConverterTests.java +++ b/spring-web/src/test/java/org/springframework/http/converter/json/JsonbHttpMessageConverterTests.java @@ -162,7 +162,7 @@ public class JsonbHttpMessageConverterTests { MockHttpOutputMessage outputMessage = new MockHttpOutputMessage(); String body = "H\u00e9llo W\u00f6rld"; this.converter.write(body, contentType, outputMessage); - assertThat(outputMessage.getBodyAsString(StandardCharsets.UTF_16BE)).as("Invalid result").isEqualTo(body); + assertThat(outputMessage.getBodyAsString(StandardCharsets.UTF_16BE)).as("Invalid result").isEqualTo("\"" + body + "\""); assertThat(outputMessage.getHeaders().getContentType()).as("Invalid content-type").isEqualTo(contentType); } @@ -260,7 +260,7 @@ public class JsonbHttpMessageConverterTests { MockHttpOutputMessage outputMessage = new MockHttpOutputMessage(); this.converter.setPrefixJson(true); this.converter.writeInternal("foo", null, outputMessage); - assertThat(outputMessage.getBodyAsString(StandardCharsets.UTF_8)).isEqualTo(")]}', foo"); + assertThat(outputMessage.getBodyAsString(StandardCharsets.UTF_8)).isEqualTo(")]}', \"foo\""); } @Test @@ -268,7 +268,7 @@ public class JsonbHttpMessageConverterTests { MockHttpOutputMessage outputMessage = new MockHttpOutputMessage(); this.converter.setJsonPrefix(")))"); this.converter.writeInternal("foo", null, outputMessage); - assertThat(outputMessage.getBodyAsString(StandardCharsets.UTF_8)).isEqualTo(")))foo"); + assertThat(outputMessage.getBodyAsString(StandardCharsets.UTF_8)).isEqualTo(")))\"foo\""); } diff --git a/spring-web/src/test/java/org/springframework/http/converter/xml/Jaxb2CollectionHttpMessageConverterTests.java b/spring-web/src/test/java/org/springframework/http/converter/xml/Jaxb2CollectionHttpMessageConverterTests.java index 0b02ce6ae1f..c3c176bea6c 100644 --- a/spring-web/src/test/java/org/springframework/http/converter/xml/Jaxb2CollectionHttpMessageConverterTests.java +++ b/spring-web/src/test/java/org/springframework/http/converter/xml/Jaxb2CollectionHttpMessageConverterTests.java @@ -21,12 +21,12 @@ import java.util.Collection; import java.util.List; import java.util.Set; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; import javax.xml.stream.XMLInputFactory; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-web/src/test/java/org/springframework/http/converter/xml/Jaxb2RootElementHttpMessageConverterTests.java b/spring-web/src/test/java/org/springframework/http/converter/xml/Jaxb2RootElementHttpMessageConverterTests.java index cf5fa05d46c..dc210e628d0 100644 --- a/spring-web/src/test/java/org/springframework/http/converter/xml/Jaxb2RootElementHttpMessageConverterTests.java +++ b/spring-web/src/test/java/org/springframework/http/converter/xml/Jaxb2RootElementHttpMessageConverterTests.java @@ -18,15 +18,14 @@ package org.springframework.http.converter.xml; import java.nio.charset.StandardCharsets; -import javax.xml.bind.Marshaller; -import javax.xml.bind.Unmarshaller; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.adapters.XmlAdapter; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; - +import jakarta.xml.bind.Marshaller; +import jakarta.xml.bind.Unmarshaller; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; +import jakarta.xml.bind.annotation.adapters.XmlAdapter; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.xmlunit.diff.DifferenceEvaluator; diff --git a/spring-web/src/test/java/org/springframework/http/server/reactive/ErrorHandlerIntegrationTests.java b/spring-web/src/test/java/org/springframework/http/server/reactive/ErrorHandlerIntegrationTests.java index 44bbd00a296..79d0158eae9 100644 --- a/spring-web/src/test/java/org/springframework/http/server/reactive/ErrorHandlerIntegrationTests.java +++ b/spring-web/src/test/java/org/springframework/http/server/reactive/ErrorHandlerIntegrationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2020 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -70,7 +70,7 @@ class ErrorHandlerIntegrationTests extends AbstractHttpHandlerIntegrationTests { assertThat(response.getStatusCode()).isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR); } - @ParameterizedHttpServerTest // SPR-15560 + @ParameterizedHttpServerTest // SPR-15560 void emptyPathSegments(HttpServer httpServer) throws Exception { startServer(httpServer); diff --git a/spring-web/src/test/java/org/springframework/http/server/reactive/HeadersAdaptersTests.java b/spring-web/src/test/java/org/springframework/http/server/reactive/HeadersAdaptersTests.java index ce7e1b14fbd..0a95cdfdaca 100644 --- a/spring-web/src/test/java/org/springframework/http/server/reactive/HeadersAdaptersTests.java +++ b/spring-web/src/test/java/org/springframework/http/server/reactive/HeadersAdaptersTests.java @@ -136,7 +136,7 @@ class HeadersAdaptersTests { arguments("Netty", new NettyHeadersAdapter(new DefaultHttpHeaders())), arguments("Tomcat", new TomcatHeadersAdapter(new MimeHeaders())), arguments("Undertow", new UndertowHeadersAdapter(new HeaderMap())), - arguments("Jetty", new JettyHeadersAdapter(new HttpFields())) + arguments("Jetty", new JettyHeadersAdapter(HttpFields.build())) ); } diff --git a/spring-web/src/test/java/org/springframework/http/server/reactive/ServerHttpRequestTests.java b/spring-web/src/test/java/org/springframework/http/server/reactive/ServerHttpRequestTests.java index 7eca5ed6e14..d88f32d4119 100644 --- a/spring-web/src/test/java/org/springframework/http/server/reactive/ServerHttpRequestTests.java +++ b/spring-web/src/test/java/org/springframework/http/server/reactive/ServerHttpRequestTests.java @@ -21,11 +21,10 @@ import java.net.URI; import java.util.Arrays; import java.util.Collections; -import javax.servlet.AsyncContext; -import javax.servlet.ReadListener; -import javax.servlet.ServletInputStream; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.AsyncContext; +import jakarta.servlet.ReadListener; +import jakarta.servlet.ServletInputStream; +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.Test; import org.springframework.core.io.buffer.DefaultDataBufferFactory; diff --git a/spring-web/src/test/java/org/springframework/web/bind/support/WebRequestDataBinderIntegrationTests.java b/spring-web/src/test/java/org/springframework/web/bind/support/WebRequestDataBinderIntegrationTests.java index d54f09f09d5..f53a7eb494a 100644 --- a/spring-web/src/test/java/org/springframework/web/bind/support/WebRequestDataBinderIntegrationTests.java +++ b/spring-web/src/test/java/org/springframework/web/bind/support/WebRequestDataBinderIntegrationTests.java @@ -18,12 +18,11 @@ package org.springframework.web.bind.support; import java.util.List; -import javax.servlet.MultipartConfigElement; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.Part; - +import jakarta.servlet.MultipartConfigElement; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.Part; import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.NetworkConnector; import org.eclipse.jetty.server.Server; diff --git a/spring-web/src/test/java/org/springframework/web/context/ContextLoaderInitializerTests.java b/spring-web/src/test/java/org/springframework/web/context/ContextLoaderInitializerTests.java index 4c252fffd34..5bd5599aa97 100644 --- a/spring-web/src/test/java/org/springframework/web/context/ContextLoaderInitializerTests.java +++ b/spring-web/src/test/java/org/springframework/web/context/ContextLoaderInitializerTests.java @@ -18,9 +18,8 @@ package org.springframework.web.context; import java.util.EventListener; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletException; - +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-web/src/test/java/org/springframework/web/context/request/RequestAndSessionScopedBeanTests.java b/spring-web/src/test/java/org/springframework/web/context/request/RequestAndSessionScopedBeanTests.java index c413f2ca410..23613401695 100644 --- a/spring-web/src/test/java/org/springframework/web/context/request/RequestAndSessionScopedBeanTests.java +++ b/spring-web/src/test/java/org/springframework/web/context/request/RequestAndSessionScopedBeanTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,8 +16,7 @@ package org.springframework.web.context.request; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.BeanCreationException; @@ -38,7 +37,7 @@ public class RequestAndSessionScopedBeanTests { @Test @SuppressWarnings("resource") - public void testPutBeanInRequest() throws Exception { + public void testPutBeanInRequest() { String targetBeanName = "target"; StaticWebApplicationContext wac = new StaticWebApplicationContext(); @@ -73,7 +72,7 @@ public class RequestAndSessionScopedBeanTests { @Test @SuppressWarnings("resource") - public void testPutBeanInSession() throws Exception { + public void testPutBeanInSession() { String targetBeanName = "target"; HttpServletRequest request = new MockHttpServletRequest(); RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(request)); diff --git a/spring-web/src/test/java/org/springframework/web/context/request/RequestContextListenerTests.java b/spring-web/src/test/java/org/springframework/web/context/request/RequestContextListenerTests.java index 4e4bdedb134..84487b927d4 100644 --- a/spring-web/src/test/java/org/springframework/web/context/request/RequestContextListenerTests.java +++ b/spring-web/src/test/java/org/springframework/web/context/request/RequestContextListenerTests.java @@ -16,8 +16,7 @@ package org.springframework.web.context.request; -import javax.servlet.ServletRequestEvent; - +import jakarta.servlet.ServletRequestEvent; import org.junit.jupiter.api.Test; import org.springframework.core.task.MockRunnable; diff --git a/spring-web/src/test/java/org/springframework/web/context/request/ServletRequestAttributesTests.java b/spring-web/src/test/java/org/springframework/web/context/request/ServletRequestAttributesTests.java index d71be10683a..373df295887 100644 --- a/spring-web/src/test/java/org/springframework/web/context/request/ServletRequestAttributesTests.java +++ b/spring-web/src/test/java/org/springframework/web/context/request/ServletRequestAttributesTests.java @@ -19,9 +19,8 @@ package org.springframework.web.context.request; import java.io.Serializable; import java.math.BigInteger; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; - +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; import org.junit.jupiter.api.Test; import org.springframework.web.testfixture.servlet.MockHttpServletRequest; diff --git a/spring-web/src/test/java/org/springframework/web/context/request/ServletWebRequestTests.java b/spring-web/src/test/java/org/springframework/web/context/request/ServletWebRequestTests.java index db295dc5a99..42ab49c5838 100644 --- a/spring-web/src/test/java/org/springframework/web/context/request/ServletWebRequestTests.java +++ b/spring-web/src/test/java/org/springframework/web/context/request/ServletWebRequestTests.java @@ -19,13 +19,12 @@ package org.springframework.web.context.request; import java.util.Locale; import java.util.Map; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpServletResponseWrapper; - +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponseWrapper; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-web/src/test/java/org/springframework/web/context/request/WebApplicationContextScopeTests.java b/spring-web/src/test/java/org/springframework/web/context/request/WebApplicationContextScopeTests.java index 8315021b4b5..4f4a3a1d8f2 100644 --- a/spring-web/src/test/java/org/springframework/web/context/request/WebApplicationContextScopeTests.java +++ b/spring-web/src/test/java/org/springframework/web/context/request/WebApplicationContextScopeTests.java @@ -16,8 +16,7 @@ package org.springframework.web.context.request; -import javax.servlet.ServletContextEvent; - +import jakarta.servlet.ServletContextEvent; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.support.GenericBeanDefinition; diff --git a/spring-web/src/test/java/org/springframework/web/context/request/async/StandardServletAsyncWebRequestTests.java b/spring-web/src/test/java/org/springframework/web/context/request/async/StandardServletAsyncWebRequestTests.java index 6a71cf98582..1d0ddfbe1b0 100644 --- a/spring-web/src/test/java/org/springframework/web/context/request/async/StandardServletAsyncWebRequestTests.java +++ b/spring-web/src/test/java/org/springframework/web/context/request/async/StandardServletAsyncWebRequestTests.java @@ -18,8 +18,7 @@ package org.springframework.web.context.request.async; import java.util.function.Consumer; -import javax.servlet.AsyncEvent; - +import jakarta.servlet.AsyncEvent; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-web/src/test/java/org/springframework/web/context/request/async/WebAsyncManagerErrorTests.java b/spring-web/src/test/java/org/springframework/web/context/request/async/WebAsyncManagerErrorTests.java index 6ecb5fd2fd5..c9ff621c4d6 100644 --- a/spring-web/src/test/java/org/springframework/web/context/request/async/WebAsyncManagerErrorTests.java +++ b/spring-web/src/test/java/org/springframework/web/context/request/async/WebAsyncManagerErrorTests.java @@ -19,8 +19,7 @@ package org.springframework.web.context.request.async; import java.util.concurrent.Callable; import java.util.function.Consumer; -import javax.servlet.AsyncEvent; - +import jakarta.servlet.AsyncEvent; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-web/src/test/java/org/springframework/web/context/request/async/WebAsyncManagerTests.java b/spring-web/src/test/java/org/springframework/web/context/request/async/WebAsyncManagerTests.java index ccde83a39c4..2a88cd9566b 100644 --- a/spring-web/src/test/java/org/springframework/web/context/request/async/WebAsyncManagerTests.java +++ b/spring-web/src/test/java/org/springframework/web/context/request/async/WebAsyncManagerTests.java @@ -19,8 +19,7 @@ package org.springframework.web.context.request.async; import java.util.concurrent.Callable; import java.util.function.Consumer; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-web/src/test/java/org/springframework/web/context/request/async/WebAsyncManagerTimeoutTests.java b/spring-web/src/test/java/org/springframework/web/context/request/async/WebAsyncManagerTimeoutTests.java index e07100c0045..d3293e41c66 100644 --- a/spring-web/src/test/java/org/springframework/web/context/request/async/WebAsyncManagerTimeoutTests.java +++ b/spring-web/src/test/java/org/springframework/web/context/request/async/WebAsyncManagerTimeoutTests.java @@ -19,8 +19,7 @@ package org.springframework.web.context.request.async; import java.util.concurrent.Callable; import java.util.concurrent.Future; -import javax.servlet.AsyncEvent; - +import jakarta.servlet.AsyncEvent; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-web/src/test/java/org/springframework/web/context/support/Spr8510Tests.java b/spring-web/src/test/java/org/springframework/web/context/support/Spr8510Tests.java index c8036faac90..85b7e70f095 100644 --- a/spring-web/src/test/java/org/springframework/web/context/support/Spr8510Tests.java +++ b/spring-web/src/test/java/org/springframework/web/context/support/Spr8510Tests.java @@ -16,8 +16,7 @@ package org.springframework.web.context.support; -import javax.servlet.ServletContextEvent; - +import jakarta.servlet.ServletContextEvent; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.ClassPathBeanDefinitionScanner; diff --git a/spring-web/src/test/java/org/springframework/web/cors/DefaultCorsProcessorTests.java b/spring-web/src/test/java/org/springframework/web/cors/DefaultCorsProcessorTests.java index c57aeffeada..0212bada3e1 100644 --- a/spring-web/src/test/java/org/springframework/web/cors/DefaultCorsProcessorTests.java +++ b/spring-web/src/test/java/org/springframework/web/cors/DefaultCorsProcessorTests.java @@ -18,8 +18,7 @@ package org.springframework.web.cors; import java.util.Arrays; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-web/src/test/java/org/springframework/web/cors/reactive/CorsWebFilterTests.java b/spring-web/src/test/java/org/springframework/web/cors/reactive/CorsWebFilterTests.java index 2a269ad5534..9d1c940dc03 100644 --- a/spring-web/src/test/java/org/springframework/web/cors/reactive/CorsWebFilterTests.java +++ b/spring-web/src/test/java/org/springframework/web/cors/reactive/CorsWebFilterTests.java @@ -19,8 +19,7 @@ package org.springframework.web.cors.reactive; import java.io.IOException; import java.util.Arrays; -import javax.servlet.ServletException; - +import jakarta.servlet.ServletException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import reactor.core.publisher.Mono; diff --git a/spring-web/src/test/java/org/springframework/web/filter/CharacterEncodingFilterTests.java b/spring-web/src/test/java/org/springframework/web/filter/CharacterEncodingFilterTests.java index 8ab956d66f4..41d3a4192ea 100644 --- a/spring-web/src/test/java/org/springframework/web/filter/CharacterEncodingFilterTests.java +++ b/spring-web/src/test/java/org/springframework/web/filter/CharacterEncodingFilterTests.java @@ -16,11 +16,10 @@ package org.springframework.web.filter; -import javax.servlet.DispatcherType; -import javax.servlet.FilterChain; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.DispatcherType; +import jakarta.servlet.FilterChain; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.Test; import org.springframework.web.testfixture.servlet.MockFilterConfig; diff --git a/spring-web/src/test/java/org/springframework/web/filter/CompositeFilterTests.java b/spring-web/src/test/java/org/springframework/web/filter/CompositeFilterTests.java index fe9a21dd88a..322a3899704 100644 --- a/spring-web/src/test/java/org/springframework/web/filter/CompositeFilterTests.java +++ b/spring-web/src/test/java/org/springframework/web/filter/CompositeFilterTests.java @@ -19,14 +19,13 @@ package org.springframework.web.filter; import java.io.IOException; import java.util.Arrays; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; - +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import org.junit.jupiter.api.Test; import org.springframework.web.testfixture.servlet.MockFilterConfig; diff --git a/spring-web/src/test/java/org/springframework/web/filter/ContentCachingResponseWrapperTests.java b/spring-web/src/test/java/org/springframework/web/filter/ContentCachingResponseWrapperTests.java index 576d0287d17..c7f326ac5bb 100644 --- a/spring-web/src/test/java/org/springframework/web/filter/ContentCachingResponseWrapperTests.java +++ b/spring-web/src/test/java/org/springframework/web/filter/ContentCachingResponseWrapperTests.java @@ -17,8 +17,7 @@ package org.springframework.web.filter; import java.nio.charset.StandardCharsets; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.Test; import org.springframework.http.HttpHeaders; diff --git a/spring-web/src/test/java/org/springframework/web/filter/CorsFilterTests.java b/spring-web/src/test/java/org/springframework/web/filter/CorsFilterTests.java index 35a72e528cb..f3e13468d00 100644 --- a/spring-web/src/test/java/org/springframework/web/filter/CorsFilterTests.java +++ b/spring-web/src/test/java/org/springframework/web/filter/CorsFilterTests.java @@ -19,9 +19,8 @@ package org.springframework.web.filter; import java.io.IOException; import java.util.Arrays; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; - +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-web/src/test/java/org/springframework/web/filter/DelegatingFilterProxyTests.java b/spring-web/src/test/java/org/springframework/web/filter/DelegatingFilterProxyTests.java index 3454a81d4eb..875169ca252 100644 --- a/spring-web/src/test/java/org/springframework/web/filter/DelegatingFilterProxyTests.java +++ b/spring-web/src/test/java/org/springframework/web/filter/DelegatingFilterProxyTests.java @@ -18,14 +18,13 @@ package org.springframework.web.filter; import java.io.IOException; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; - +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import org.junit.jupiter.api.Test; import org.springframework.web.context.WebApplicationContext; diff --git a/spring-web/src/test/java/org/springframework/web/filter/ForwardedHeaderFilterTests.java b/spring-web/src/test/java/org/springframework/web/filter/ForwardedHeaderFilterTests.java index 35fa6df4c4f..a96aee17ccf 100644 --- a/spring-web/src/test/java/org/springframework/web/filter/ForwardedHeaderFilterTests.java +++ b/spring-web/src/test/java/org/springframework/web/filter/ForwardedHeaderFilterTests.java @@ -19,14 +19,13 @@ package org.springframework.web.filter; import java.io.IOException; import java.util.Enumeration; -import javax.servlet.DispatcherType; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.DispatcherType; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; diff --git a/spring-web/src/test/java/org/springframework/web/filter/HiddenHttpMethodFilterTests.java b/spring-web/src/test/java/org/springframework/web/filter/HiddenHttpMethodFilterTests.java index c35c86b6036..07a508247a3 100644 --- a/spring-web/src/test/java/org/springframework/web/filter/HiddenHttpMethodFilterTests.java +++ b/spring-web/src/test/java/org/springframework/web/filter/HiddenHttpMethodFilterTests.java @@ -18,12 +18,11 @@ package org.springframework.web.filter; import java.io.IOException; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.Test; import org.springframework.web.testfixture.servlet.MockHttpServletRequest; diff --git a/spring-web/src/test/java/org/springframework/web/filter/OncePerRequestFilterTests.java b/spring-web/src/test/java/org/springframework/web/filter/OncePerRequestFilterTests.java index 94024a67492..f535af81640 100644 --- a/spring-web/src/test/java/org/springframework/web/filter/OncePerRequestFilterTests.java +++ b/spring-web/src/test/java/org/springframework/web/filter/OncePerRequestFilterTests.java @@ -18,13 +18,12 @@ package org.springframework.web.filter; import java.io.IOException; -import javax.servlet.DispatcherType; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.DispatcherType; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-web/src/test/java/org/springframework/web/filter/RelativeRedirectFilterTests.java b/spring-web/src/test/java/org/springframework/web/filter/RelativeRedirectFilterTests.java index dd23fd6ac27..f8e67ea7b1d 100644 --- a/spring-web/src/test/java/org/springframework/web/filter/RelativeRedirectFilterTests.java +++ b/spring-web/src/test/java/org/springframework/web/filter/RelativeRedirectFilterTests.java @@ -16,9 +16,8 @@ package org.springframework.web.filter; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpServletResponseWrapper; - +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponseWrapper; import org.junit.jupiter.api.Test; import org.mockito.InOrder; import org.mockito.Mockito; diff --git a/spring-web/src/test/java/org/springframework/web/filter/RequestContextFilterTests.java b/spring-web/src/test/java/org/springframework/web/filter/RequestContextFilterTests.java index c88b2e36c95..fdfe302fbdf 100644 --- a/spring-web/src/test/java/org/springframework/web/filter/RequestContextFilterTests.java +++ b/spring-web/src/test/java/org/springframework/web/filter/RequestContextFilterTests.java @@ -18,11 +18,10 @@ package org.springframework.web.filter; import java.io.IOException; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; - +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import org.junit.jupiter.api.Test; import org.springframework.web.context.request.RequestAttributes; diff --git a/spring-web/src/test/java/org/springframework/web/filter/RequestLoggingFilterTests.java b/spring-web/src/test/java/org/springframework/web/filter/RequestLoggingFilterTests.java index e3053bbb1b4..b7684a5a82f 100644 --- a/spring-web/src/test/java/org/springframework/web/filter/RequestLoggingFilterTests.java +++ b/spring-web/src/test/java/org/springframework/web/filter/RequestLoggingFilterTests.java @@ -18,10 +18,9 @@ package org.springframework.web.filter; import java.nio.charset.StandardCharsets; -import javax.servlet.FilterChain; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.FilterChain; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.Test; import org.springframework.util.FileCopyUtils; diff --git a/spring-web/src/test/java/org/springframework/web/filter/ShallowEtagHeaderFilterTests.java b/spring-web/src/test/java/org/springframework/web/filter/ShallowEtagHeaderFilterTests.java index 1dccc8e02ab..445aa47e7bd 100644 --- a/spring-web/src/test/java/org/springframework/web/filter/ShallowEtagHeaderFilterTests.java +++ b/spring-web/src/test/java/org/springframework/web/filter/ShallowEtagHeaderFilterTests.java @@ -18,9 +18,8 @@ package org.springframework.web.filter; import java.nio.charset.StandardCharsets; -import javax.servlet.FilterChain; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.FilterChain; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.Test; import org.springframework.util.FileCopyUtils; diff --git a/spring-web/src/test/java/org/springframework/web/jsf/DelegatingNavigationHandlerTests.java b/spring-web/src/test/java/org/springframework/web/jsf/DelegatingNavigationHandlerTests.java index 07a27a0cd62..51904f64687 100644 --- a/spring-web/src/test/java/org/springframework/web/jsf/DelegatingNavigationHandlerTests.java +++ b/spring-web/src/test/java/org/springframework/web/jsf/DelegatingNavigationHandlerTests.java @@ -16,9 +16,8 @@ package org.springframework.web.jsf; -import javax.faces.application.NavigationHandler; -import javax.faces.context.FacesContext; - +import jakarta.faces.application.NavigationHandler; +import jakarta.faces.context.FacesContext; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.BeanFactory; diff --git a/spring-web/src/test/java/org/springframework/web/jsf/DelegatingPhaseListenerTests.java b/spring-web/src/test/java/org/springframework/web/jsf/DelegatingPhaseListenerTests.java index f174615da96..733b51464e9 100644 --- a/spring-web/src/test/java/org/springframework/web/jsf/DelegatingPhaseListenerTests.java +++ b/spring-web/src/test/java/org/springframework/web/jsf/DelegatingPhaseListenerTests.java @@ -16,11 +16,10 @@ package org.springframework.web.jsf; -import javax.faces.context.FacesContext; -import javax.faces.event.PhaseEvent; -import javax.faces.event.PhaseId; -import javax.faces.event.PhaseListener; - +import jakarta.faces.context.FacesContext; +import jakarta.faces.event.PhaseEvent; +import jakarta.faces.event.PhaseId; +import jakarta.faces.event.PhaseListener; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.ListableBeanFactory; diff --git a/spring-web/src/test/java/org/springframework/web/jsf/MockFacesContext.java b/spring-web/src/test/java/org/springframework/web/jsf/MockFacesContext.java index 77ef2ad1e58..f7298643350 100644 --- a/spring-web/src/test/java/org/springframework/web/jsf/MockFacesContext.java +++ b/spring-web/src/test/java/org/springframework/web/jsf/MockFacesContext.java @@ -18,22 +18,22 @@ package org.springframework.web.jsf; import java.util.Iterator; -import javax.faces.application.Application; -import javax.faces.application.FacesMessage; -import javax.faces.application.FacesMessage.Severity; -import javax.faces.component.UIViewRoot; -import javax.faces.context.ExternalContext; -import javax.faces.context.FacesContext; -import javax.faces.context.ResponseStream; -import javax.faces.context.ResponseWriter; -import javax.faces.render.RenderKit; +import jakarta.faces.application.Application; +import jakarta.faces.application.FacesMessage; +import jakarta.faces.application.FacesMessage.Severity; +import jakarta.faces.component.UIViewRoot; +import jakarta.faces.context.ExternalContext; +import jakarta.faces.context.FacesContext; +import jakarta.faces.context.ResponseStream; +import jakarta.faces.context.ResponseWriter; +import jakarta.faces.render.RenderKit; /** * Mock implementation of the {@code FacesContext} class to facilitate * standalone Action unit tests. * * @author Ulrik Sandberg - * @see javax.faces.context.FacesContext + * @see jakarta.faces.context.FacesContext */ public class MockFacesContext extends FacesContext { diff --git a/spring-web/src/test/java/org/springframework/web/jsf/MockLifecycle.java b/spring-web/src/test/java/org/springframework/web/jsf/MockLifecycle.java index 39685816ff5..41aaf64ca97 100644 --- a/spring-web/src/test/java/org/springframework/web/jsf/MockLifecycle.java +++ b/spring-web/src/test/java/org/springframework/web/jsf/MockLifecycle.java @@ -16,10 +16,10 @@ package org.springframework.web.jsf; -import javax.faces.FacesException; -import javax.faces.context.FacesContext; -import javax.faces.event.PhaseListener; -import javax.faces.lifecycle.Lifecycle; +import jakarta.faces.FacesException; +import jakarta.faces.context.FacesContext; +import jakarta.faces.event.PhaseListener; +import jakarta.faces.lifecycle.Lifecycle; /** * @author Juergen Hoeller diff --git a/spring-web/src/test/java/org/springframework/web/method/ControllerAdviceBeanTests.java b/spring-web/src/test/java/org/springframework/web/method/ControllerAdviceBeanTests.java index a75c220fdf2..78d24a16170 100644 --- a/spring-web/src/test/java/org/springframework/web/method/ControllerAdviceBeanTests.java +++ b/spring-web/src/test/java/org/springframework/web/method/ControllerAdviceBeanTests.java @@ -20,8 +20,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.List; -import javax.annotation.Priority; - +import jakarta.annotation.Priority; import org.junit.jupiter.api.Test; import org.springframework.beans.BeanUtils; diff --git a/spring-web/src/test/java/org/springframework/web/method/annotation/CookieValueMethodArgumentResolverTests.java b/spring-web/src/test/java/org/springframework/web/method/annotation/CookieValueMethodArgumentResolverTests.java index 47b184f4881..581e4fe2b12 100644 --- a/spring-web/src/test/java/org/springframework/web/method/annotation/CookieValueMethodArgumentResolverTests.java +++ b/spring-web/src/test/java/org/springframework/web/method/annotation/CookieValueMethodArgumentResolverTests.java @@ -18,8 +18,7 @@ package org.springframework.web.method.annotation; import java.lang.reflect.Method; -import javax.servlet.http.Cookie; - +import jakarta.servlet.http.Cookie; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-web/src/test/java/org/springframework/web/method/annotation/ExceptionHandlerMethodResolverTests.java b/spring-web/src/test/java/org/springframework/web/method/annotation/ExceptionHandlerMethodResolverTests.java index 1a2ebcf8153..30fe752b58e 100644 --- a/spring-web/src/test/java/org/springframework/web/method/annotation/ExceptionHandlerMethodResolverTests.java +++ b/spring-web/src/test/java/org/springframework/web/method/annotation/ExceptionHandlerMethodResolverTests.java @@ -21,9 +21,8 @@ import java.io.IOException; import java.net.BindException; import java.net.SocketException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.Test; import org.springframework.stereotype.Controller; diff --git a/spring-web/src/test/java/org/springframework/web/method/annotation/RequestParamMapMethodArgumentResolverTests.java b/spring-web/src/test/java/org/springframework/web/method/annotation/RequestParamMapMethodArgumentResolverTests.java index 8bc0dcb2660..2c1693a6065 100644 --- a/spring-web/src/test/java/org/springframework/web/method/annotation/RequestParamMapMethodArgumentResolverTests.java +++ b/spring-web/src/test/java/org/springframework/web/method/annotation/RequestParamMapMethodArgumentResolverTests.java @@ -19,8 +19,7 @@ package org.springframework.web.method.annotation; import java.util.Collections; import java.util.Map; -import javax.servlet.http.Part; - +import jakarta.servlet.http.Part; import org.junit.jupiter.api.Test; import org.springframework.core.MethodParameter; diff --git a/spring-web/src/test/java/org/springframework/web/method/annotation/RequestParamMethodArgumentResolverTests.java b/spring-web/src/test/java/org/springframework/web/method/annotation/RequestParamMethodArgumentResolverTests.java index 5ad7e894bb1..684d3d76ca4 100644 --- a/spring-web/src/test/java/org/springframework/web/method/annotation/RequestParamMethodArgumentResolverTests.java +++ b/spring-web/src/test/java/org/springframework/web/method/annotation/RequestParamMethodArgumentResolverTests.java @@ -21,8 +21,7 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import javax.servlet.http.Part; - +import jakarta.servlet.http.Part; import org.junit.jupiter.api.Test; import org.springframework.beans.propertyeditors.StringTrimmerEditor; diff --git a/spring-web/src/test/java/org/springframework/web/multipart/commons/CommonsMultipartResolverTests.java b/spring-web/src/test/java/org/springframework/web/multipart/commons/CommonsMultipartResolverTests.java deleted file mode 100644 index e37bb54c025..00000000000 --- a/spring-web/src/test/java/org/springframework/web/multipart/commons/CommonsMultipartResolverTests.java +++ /dev/null @@ -1,618 +0,0 @@ -/* - * Copyright 2002-2021 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.web.multipart.commons; - -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.UnsupportedEncodingException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Enumeration; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.fileupload.FileItem; -import org.apache.commons.fileupload.FileItemFactory; -import org.apache.commons.fileupload.FileItemHeaders; -import org.apache.commons.fileupload.FileUpload; -import org.apache.commons.fileupload.servlet.ServletFileUpload; -import org.junit.jupiter.api.Test; - -import org.springframework.beans.MutablePropertyValues; -import org.springframework.http.MediaType; -import org.springframework.util.MultiValueMap; -import org.springframework.web.bind.ServletRequestDataBinder; -import org.springframework.web.context.WebApplicationContext; -import org.springframework.web.context.support.StaticWebApplicationContext; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.multipart.MultipartHttpServletRequest; -import org.springframework.web.multipart.support.ByteArrayMultipartFileEditor; -import org.springframework.web.multipart.support.MultipartFilter; -import org.springframework.web.multipart.support.StringMultipartFileEditor; -import org.springframework.web.testfixture.servlet.MockFilterConfig; -import org.springframework.web.testfixture.servlet.MockHttpServletRequest; -import org.springframework.web.testfixture.servlet.MockHttpServletResponse; -import org.springframework.web.testfixture.servlet.MockServletContext; -import org.springframework.web.testfixture.servlet.PassThroughFilterChain; -import org.springframework.web.util.WebUtils; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * @author Juergen Hoeller - * @author Arjen Poutsma - * @since 08.10.2003 - */ -public class CommonsMultipartResolverTests { - - @Test - public void isMultipartWithDefaultSetting() { - CommonsMultipartResolver resolver = new CommonsMultipartResolver(); - - MockHttpServletRequest request = new MockHttpServletRequest("POST", "/"); - assertThat(resolver.isMultipart(request)).isFalse(); - - request.setContentType(MediaType.MULTIPART_FORM_DATA_VALUE); - assertThat(resolver.isMultipart(request)).isTrue(); - - request.setContentType(MediaType.MULTIPART_MIXED_VALUE); - assertThat(resolver.isMultipart(request)).isTrue(); - - request.setContentType(MediaType.MULTIPART_RELATED_VALUE); - assertThat(resolver.isMultipart(request)).isTrue(); - - request = new MockHttpServletRequest("PUT", "/"); - assertThat(resolver.isMultipart(request)).isFalse(); - - request.setContentType(MediaType.MULTIPART_FORM_DATA_VALUE); - assertThat(resolver.isMultipart(request)).isFalse(); - - request.setContentType(MediaType.MULTIPART_MIXED_VALUE); - assertThat(resolver.isMultipart(request)).isFalse(); - - request.setContentType(MediaType.MULTIPART_RELATED_VALUE); - assertThat(resolver.isMultipart(request)).isFalse(); - } - - @Test - public void isMultipartWithSupportedMethods() { - CommonsMultipartResolver resolver = new CommonsMultipartResolver(); - resolver.setSupportedMethods("POST", "PUT"); - - MockHttpServletRequest request = new MockHttpServletRequest("POST", "/"); - assertThat(resolver.isMultipart(request)).isFalse(); - - request.setContentType(MediaType.MULTIPART_FORM_DATA_VALUE); - assertThat(resolver.isMultipart(request)).isTrue(); - - request.setContentType(MediaType.MULTIPART_MIXED_VALUE); - assertThat(resolver.isMultipart(request)).isTrue(); - - request.setContentType(MediaType.MULTIPART_RELATED_VALUE); - assertThat(resolver.isMultipart(request)).isTrue(); - - request = new MockHttpServletRequest("PUT", "/"); - assertThat(resolver.isMultipart(request)).isFalse(); - - request.setContentType(MediaType.MULTIPART_FORM_DATA_VALUE); - assertThat(resolver.isMultipart(request)).isTrue(); - - request.setContentType(MediaType.MULTIPART_MIXED_VALUE); - assertThat(resolver.isMultipart(request)).isTrue(); - - request.setContentType(MediaType.MULTIPART_RELATED_VALUE); - assertThat(resolver.isMultipart(request)).isTrue(); - } - - @Test - public void withApplicationContext() throws Exception { - doTestWithApplicationContext(false); - } - - @Test - public void withApplicationContextAndLazyResolution() throws Exception { - doTestWithApplicationContext(true); - } - - private void doTestWithApplicationContext(boolean lazy) throws Exception { - StaticWebApplicationContext wac = new StaticWebApplicationContext(); - wac.setServletContext(new MockServletContext()); - wac.getServletContext().setAttribute(WebUtils.TEMP_DIR_CONTEXT_ATTRIBUTE, new File("mytemp")); - wac.refresh(); - MockCommonsMultipartResolver resolver = new MockCommonsMultipartResolver(); - resolver.setMaxUploadSize(1000); - resolver.setMaxInMemorySize(100); - resolver.setDefaultEncoding("enc"); - if (lazy) { - resolver.setResolveLazily(false); - } - resolver.setServletContext(wac.getServletContext()); - assertThat(resolver.getFileUpload().getSizeMax()).isEqualTo(1000); - assertThat(resolver.getFileItemFactory().getSizeThreshold()).isEqualTo(100); - assertThat(resolver.getFileUpload().getHeaderEncoding()).isEqualTo("enc"); - assertThat(resolver.getFileItemFactory().getRepository().getAbsolutePath().endsWith("mytemp")).isTrue(); - - MockHttpServletRequest originalRequest = new MockHttpServletRequest(); - originalRequest.setMethod("POST"); - originalRequest.setContentType("multipart/form-data"); - originalRequest.addHeader("Content-type", "multipart/form-data"); - originalRequest.addParameter("getField", "getValue"); - assertThat(resolver.isMultipart(originalRequest)).isTrue(); - MultipartHttpServletRequest request = resolver.resolveMultipart(originalRequest); - - doTestParameters(request); - - doTestFiles(request); - - doTestBinding(resolver, originalRequest, request); - - wac.close(); - } - - private void doTestParameters(MultipartHttpServletRequest request) { - Set parameterNames = new HashSet<>(); - Enumeration parameterEnum = request.getParameterNames(); - while (parameterEnum.hasMoreElements()) { - parameterNames.add(parameterEnum.nextElement()); - } - assertThat(parameterNames.size()).isEqualTo(3); - assertThat(parameterNames.contains("field3")).isTrue(); - assertThat(parameterNames.contains("field4")).isTrue(); - assertThat(parameterNames.contains("getField")).isTrue(); - assertThat(request.getParameter("field3")).isEqualTo("value3"); - List parameterValues = Arrays.asList(request.getParameterValues("field3")); - assertThat(parameterValues.size()).isEqualTo(1); - assertThat(parameterValues.contains("value3")).isTrue(); - assertThat(request.getParameter("field4")).isEqualTo("value4"); - parameterValues = Arrays.asList(request.getParameterValues("field4")); - assertThat(parameterValues.size()).isEqualTo(2); - assertThat(parameterValues.contains("value4")).isTrue(); - assertThat(parameterValues.contains("value5")).isTrue(); - assertThat(request.getParameter("field4")).isEqualTo("value4"); - assertThat(request.getParameter("getField")).isEqualTo("getValue"); - - List parameterMapKeys = new ArrayList<>(); - List parameterMapValues = new ArrayList<>(); - for (Object o : request.getParameterMap().keySet()) { - String key = (String) o; - parameterMapKeys.add(key); - parameterMapValues.add(request.getParameterMap().get(key)); - } - assertThat(parameterMapKeys.size()).isEqualTo(3); - assertThat(parameterMapValues.size()).isEqualTo(3); - int field3Index = parameterMapKeys.indexOf("field3"); - int field4Index = parameterMapKeys.indexOf("field4"); - int getFieldIndex = parameterMapKeys.indexOf("getField"); - assertThat(field3Index != -1).isTrue(); - assertThat(field4Index != -1).isTrue(); - assertThat(getFieldIndex != -1).isTrue(); - parameterValues = Arrays.asList((String[]) parameterMapValues.get(field3Index)); - assertThat(parameterValues.size()).isEqualTo(1); - assertThat(parameterValues.contains("value3")).isTrue(); - parameterValues = Arrays.asList((String[]) parameterMapValues.get(field4Index)); - assertThat(parameterValues.size()).isEqualTo(2); - assertThat(parameterValues.contains("value4")).isTrue(); - assertThat(parameterValues.contains("value5")).isTrue(); - parameterValues = Arrays.asList((String[]) parameterMapValues.get(getFieldIndex)); - assertThat(parameterValues.size()).isEqualTo(1); - assertThat(parameterValues.contains("getValue")).isTrue(); - } - - private void doTestFiles(MultipartHttpServletRequest request) throws IOException { - Set fileNames = new HashSet<>(); - Iterator fileIter = request.getFileNames(); - while (fileIter.hasNext()) { - fileNames.add(fileIter.next()); - } - assertThat(fileNames.size()).isEqualTo(3); - assertThat(fileNames.contains("field1")).isTrue(); - assertThat(fileNames.contains("field2")).isTrue(); - assertThat(fileNames.contains("field2x")).isTrue(); - CommonsMultipartFile file1 = (CommonsMultipartFile) request.getFile("field1"); - CommonsMultipartFile file2 = (CommonsMultipartFile) request.getFile("field2"); - CommonsMultipartFile file2x = (CommonsMultipartFile) request.getFile("field2x"); - - Map fileMap = request.getFileMap(); - assertThat(fileMap.size()).isEqualTo(3); - assertThat(fileMap.containsKey("field1")).isTrue(); - assertThat(fileMap.containsKey("field2")).isTrue(); - assertThat(fileMap.containsKey("field2x")).isTrue(); - assertThat(fileMap.get("field1")).isEqualTo(file1); - assertThat(fileMap.get("field2")).isEqualTo(file2); - assertThat(fileMap.get("field2x")).isEqualTo(file2x); - - MultiValueMap multiFileMap = request.getMultiFileMap(); - assertThat(multiFileMap.size()).isEqualTo(3); - assertThat(multiFileMap.containsKey("field1")).isTrue(); - assertThat(multiFileMap.containsKey("field2")).isTrue(); - assertThat(multiFileMap.containsKey("field2x")).isTrue(); - List field1Files = multiFileMap.get("field1"); - assertThat(field1Files.size()).isEqualTo(2); - assertThat(field1Files.contains(file1)).isTrue(); - assertThat(multiFileMap.getFirst("field1")).isEqualTo(file1); - assertThat(multiFileMap.getFirst("field2")).isEqualTo(file2); - assertThat(multiFileMap.getFirst("field2x")).isEqualTo(file2x); - - assertThat(file1.getContentType()).isEqualTo("type1"); - assertThat(file2.getContentType()).isEqualTo("type2"); - assertThat(file2x.getContentType()).isEqualTo("type2"); - assertThat(file1.getOriginalFilename()).isEqualTo("field1.txt"); - assertThat(file2.getOriginalFilename()).isEqualTo("field2.txt"); - assertThat(file2x.getOriginalFilename()).isEqualTo("field2x.txt"); - assertThat(new String(file1.getBytes())).isEqualTo("text1"); - assertThat(new String(file2.getBytes())).isEqualTo("text2"); - assertThat(file1.getSize()).isEqualTo(5); - assertThat(file2.getSize()).isEqualTo(5); - boolean condition1 = file1.getInputStream() instanceof ByteArrayInputStream; - assertThat(condition1).isTrue(); - boolean condition = file2.getInputStream() instanceof ByteArrayInputStream; - assertThat(condition).isTrue(); - File transfer1 = new File("C:/transfer1"); - file1.transferTo(transfer1); - File transfer2 = new File("C:/transfer2"); - file2.transferTo(transfer2); - assertThat(((MockFileItem) file1.getFileItem()).writtenFile).isEqualTo(transfer1); - assertThat(((MockFileItem) file2.getFileItem()).writtenFile).isEqualTo(transfer2); - - } - - private void doTestBinding(MockCommonsMultipartResolver resolver, MockHttpServletRequest originalRequest, - MultipartHttpServletRequest request) throws UnsupportedEncodingException { - - MultipartTestBean1 mtb1 = new MultipartTestBean1(); - assertThat(mtb1.getField1()).isEqualTo(null); - assertThat(mtb1.getField2()).isEqualTo(null); - ServletRequestDataBinder binder = new ServletRequestDataBinder(mtb1, "mybean"); - binder.registerCustomEditor(byte[].class, new ByteArrayMultipartFileEditor()); - binder.bind(request); - List file1List = request.getFiles("field1"); - CommonsMultipartFile file1a = (CommonsMultipartFile) file1List.get(0); - CommonsMultipartFile file1b = (CommonsMultipartFile) file1List.get(1); - CommonsMultipartFile file2 = (CommonsMultipartFile) request.getFile("field2"); - assertThat(mtb1.getField1()[0]).isEqualTo(file1a); - assertThat(mtb1.getField1()[1]).isEqualTo(file1b); - assertThat(new String(mtb1.getField2())).isEqualTo(new String(file2.getBytes())); - - MultipartTestBean2 mtb2 = new MultipartTestBean2(); - assertThat(mtb2.getField1()).isEqualTo(null); - assertThat(mtb2.getField2()).isEqualTo(null); - binder = new ServletRequestDataBinder(mtb2, "mybean"); - binder.registerCustomEditor(String.class, "field1", new StringMultipartFileEditor()); - binder.registerCustomEditor(String.class, "field2", new StringMultipartFileEditor("UTF-16")); - binder.bind(request); - assertThat(mtb2.getField1()[0]).isEqualTo(new String(file1a.getBytes())); - assertThat(mtb2.getField1()[1]).isEqualTo(new String(file1b.getBytes())); - assertThat(mtb2.getField2()).isEqualTo(new String(file2.getBytes(), "UTF-16")); - - resolver.cleanupMultipart(request); - assertThat(((MockFileItem) file1a.getFileItem()).deleted).isTrue(); - assertThat(((MockFileItem) file1b.getFileItem()).deleted).isTrue(); - assertThat(((MockFileItem) file2.getFileItem()).deleted).isTrue(); - - resolver.setEmpty(true); - request = resolver.resolveMultipart(originalRequest); - binder.setBindEmptyMultipartFiles(false); - String firstBound = mtb2.getField2(); - binder.bind(request); - assertThat(mtb2.getField2().isEmpty()).isFalse(); - assertThat(mtb2.getField2()).isEqualTo(firstBound); - - request = resolver.resolveMultipart(originalRequest); - binder.setBindEmptyMultipartFiles(true); - binder.bind(request); - assertThat(mtb2.getField2().isEmpty()).isTrue(); - } - - @Test - public void withServletContextAndFilter() throws Exception { - StaticWebApplicationContext wac = new StaticWebApplicationContext(); - wac.setServletContext(new MockServletContext()); - wac.registerSingleton("filterMultipartResolver", MockCommonsMultipartResolver.class, new MutablePropertyValues()); - wac.getServletContext().setAttribute(WebUtils.TEMP_DIR_CONTEXT_ATTRIBUTE, new File("mytemp")); - wac.refresh(); - wac.getServletContext().setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, wac); - CommonsMultipartResolver resolver = new CommonsMultipartResolver(wac.getServletContext()); - assertThat(resolver.getFileItemFactory().getRepository().getAbsolutePath().endsWith("mytemp")).isTrue(); - - MockFilterConfig filterConfig = new MockFilterConfig(wac.getServletContext(), "filter"); - filterConfig.addInitParameter("class", "notWritable"); - filterConfig.addInitParameter("unknownParam", "someValue"); - final MultipartFilter filter = new MultipartFilter(); - filter.init(filterConfig); - - final List files = new ArrayList<>(); - final FilterChain filterChain = new FilterChain() { - @Override - public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse) { - MultipartHttpServletRequest request = (MultipartHttpServletRequest) servletRequest; - files.addAll(request.getFileMap().values()); - } - }; - - FilterChain filterChain2 = new PassThroughFilterChain(filter, filterChain); - - MockHttpServletRequest originalRequest = new MockHttpServletRequest(); - MockHttpServletResponse response = new MockHttpServletResponse(); - originalRequest.setMethod("POST"); - originalRequest.setContentType("multipart/form-data"); - originalRequest.addHeader("Content-type", "multipart/form-data"); - filter.doFilter(originalRequest, response, filterChain2); - - CommonsMultipartFile file1 = (CommonsMultipartFile) files.get(0); - CommonsMultipartFile file2 = (CommonsMultipartFile) files.get(1); - assertThat(((MockFileItem) file1.getFileItem()).deleted).isTrue(); - assertThat(((MockFileItem) file2.getFileItem()).deleted).isTrue(); - } - - @Test - public void withServletContextAndFilterWithCustomBeanName() throws Exception { - StaticWebApplicationContext wac = new StaticWebApplicationContext(); - wac.setServletContext(new MockServletContext()); - wac.refresh(); - wac.registerSingleton("myMultipartResolver", MockCommonsMultipartResolver.class, new MutablePropertyValues()); - wac.getServletContext().setAttribute(WebUtils.TEMP_DIR_CONTEXT_ATTRIBUTE, new File("mytemp")); - wac.getServletContext().setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, wac); - CommonsMultipartResolver resolver = new CommonsMultipartResolver(wac.getServletContext()); - assertThat(resolver.getFileItemFactory().getRepository().getAbsolutePath().endsWith("mytemp")).isTrue(); - - MockFilterConfig filterConfig = new MockFilterConfig(wac.getServletContext(), "filter"); - filterConfig.addInitParameter("multipartResolverBeanName", "myMultipartResolver"); - - final List files = new ArrayList<>(); - FilterChain filterChain = new FilterChain() { - @Override - public void doFilter(ServletRequest originalRequest, ServletResponse response) { - if (originalRequest instanceof MultipartHttpServletRequest) { - MultipartHttpServletRequest request = (MultipartHttpServletRequest) originalRequest; - files.addAll(request.getFileMap().values()); - } - } - }; - - MultipartFilter filter = new MultipartFilter() { - private boolean invoked = false; - @Override - protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, - FilterChain filterChain) throws ServletException, IOException { - super.doFilterInternal(request, response, filterChain); - super.doFilterInternal(request, response, filterChain); - if (invoked) { - throw new ServletException("Should not have been invoked twice"); - } - invoked = true; - } - }; - filter.init(filterConfig); - - MockHttpServletRequest originalRequest = new MockHttpServletRequest(); - originalRequest.setMethod("POST"); - originalRequest.setContentType("multipart/form-data"); - originalRequest.addHeader("Content-type", "multipart/form-data"); - HttpServletResponse response = new MockHttpServletResponse(); - filter.doFilter(originalRequest, response, filterChain); - CommonsMultipartFile file1 = (CommonsMultipartFile) files.get(0); - CommonsMultipartFile file2 = (CommonsMultipartFile) files.get(1); - assertThat(((MockFileItem) file1.getFileItem()).deleted).isTrue(); - assertThat(((MockFileItem) file2.getFileItem()).deleted).isTrue(); - } - - - public static class MockCommonsMultipartResolver extends CommonsMultipartResolver { - - private boolean empty; - - protected void setEmpty(boolean empty) { - this.empty = empty; - } - - @Override - protected FileUpload newFileUpload(FileItemFactory fileItemFactory) { - return new ServletFileUpload() { - @Override - public List parseRequest(HttpServletRequest request) { - if (request instanceof MultipartHttpServletRequest) { - throw new IllegalStateException("Already a multipart request"); - } - List fileItems = new ArrayList<>(); - MockFileItem fileItem1 = new MockFileItem( - "field1", "type1", empty ? "" : "field1.txt", empty ? "" : "text1"); - MockFileItem fileItem1x = new MockFileItem( - "field1", "type1", empty ? "" : "field1.txt", empty ? "" : "text1"); - MockFileItem fileItem2 = new MockFileItem( - "field2", "type2", empty ? "" : "C:\\mypath/field2.txt", empty ? "" : "text2"); - MockFileItem fileItem2x = new MockFileItem( - "field2x", "type2", empty ? "" : "C:/mypath\\field2x.txt", empty ? "" : "text2"); - MockFileItem fileItem3 = new MockFileItem("field3", null, null, "value3"); - MockFileItem fileItem4 = new MockFileItem("field4", "text/html; charset=iso-8859-1", null, "value4"); - MockFileItem fileItem5 = new MockFileItem("field4", null, null, "value5"); - fileItems.add(fileItem1); - fileItems.add(fileItem1x); - fileItems.add(fileItem2); - fileItems.add(fileItem2x); - fileItems.add(fileItem3); - fileItems.add(fileItem4); - fileItems.add(fileItem5); - return fileItems; - } - }; - } - } - - - private static class MockFileItem implements FileItem { - - private String fieldName; - private String contentType; - private String name; - private String value; - - private File writtenFile; - private boolean deleted; - - public MockFileItem(String fieldName, String contentType, String name, String value) { - this.fieldName = fieldName; - this.contentType = contentType; - this.name = name; - this.value = value; - } - - @Override - public InputStream getInputStream() throws IOException { - return new ByteArrayInputStream(value.getBytes()); - } - - @Override - public String getContentType() { - return contentType; - } - - @Override - public String getName() { - return name; - } - - @Override - public boolean isInMemory() { - return true; - } - - @Override - public long getSize() { - return value.length(); - } - - @Override - public byte[] get() { - return value.getBytes(); - } - - @Override - public String getString(String encoding) throws UnsupportedEncodingException { - return new String(get(), encoding); - } - - @Override - public String getString() { - return value; - } - - @Override - public void write(File file) throws Exception { - this.writtenFile = file; - } - - @Override - public void delete() { - this.deleted = true; - } - - @Override - public String getFieldName() { - return fieldName; - } - - @Override - public void setFieldName(String s) { - this.fieldName = s; - } - - @Override - public boolean isFormField() { - return (this.name == null); - } - - @Override - public void setFormField(boolean b) { - throw new UnsupportedOperationException(); - } - - @Override - public OutputStream getOutputStream() throws IOException { - throw new UnsupportedOperationException(); - } - - @Override - public FileItemHeaders getHeaders() { - throw new UnsupportedOperationException(); - } - - @Override - public void setHeaders(FileItemHeaders headers) { - throw new UnsupportedOperationException(); - } - } - - - public class MultipartTestBean1 { - - private MultipartFile[] field1; - private byte[] field2; - - public void setField1(MultipartFile[] field1) { - this.field1 = field1; - } - - public MultipartFile[] getField1() { - return field1; - } - - public void setField2(byte[] field2) { - this.field2 = field2; - } - - public byte[] getField2() { - return field2; - } - } - - - public class MultipartTestBean2 { - - private String[] field1; - private String field2; - - public void setField1(String[] field1) { - this.field1 = field1; - } - - public String[] getField1() { - return field1; - } - - public void setField2(String field2) { - this.field2 = field2; - } - - public String getField2() { - return field2; - } - } - -} diff --git a/spring-web/src/test/java/org/springframework/web/multipart/support/RequestPartServletServerHttpRequestTests.java b/spring-web/src/test/java/org/springframework/web/multipart/support/RequestPartServletServerHttpRequestTests.java index b9c0e2ee90a..28aebfa7e82 100644 --- a/spring-web/src/test/java/org/springframework/web/multipart/support/RequestPartServletServerHttpRequestTests.java +++ b/spring-web/src/test/java/org/springframework/web/multipart/support/RequestPartServletServerHttpRequestTests.java @@ -19,9 +19,8 @@ package org.springframework.web.multipart.support; import java.net.URI; import java.nio.charset.StandardCharsets; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; - +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; import org.junit.jupiter.api.Test; import org.springframework.http.HttpHeaders; diff --git a/spring-web/src/test/java/org/springframework/web/util/ServletRequestPathUtilsTests.java b/spring-web/src/test/java/org/springframework/web/util/ServletRequestPathUtilsTests.java index 6814bd55df7..b8ccbaaeeb9 100644 --- a/spring-web/src/test/java/org/springframework/web/util/ServletRequestPathUtilsTests.java +++ b/spring-web/src/test/java/org/springframework/web/util/ServletRequestPathUtilsTests.java @@ -15,8 +15,7 @@ */ package org.springframework.web.util; -import javax.servlet.http.MappingMatch; - +import jakarta.servlet.http.MappingMatch; import org.junit.jupiter.api.Test; import org.springframework.http.server.RequestPath; diff --git a/spring-web/src/test/java/org/springframework/web/util/TagUtilsTests.java b/spring-web/src/test/java/org/springframework/web/util/TagUtilsTests.java index 2306cdca78c..bfcc8214445 100644 --- a/spring-web/src/test/java/org/springframework/web/util/TagUtilsTests.java +++ b/spring-web/src/test/java/org/springframework/web/util/TagUtilsTests.java @@ -16,10 +16,9 @@ package org.springframework.web.util; -import javax.servlet.jsp.PageContext; -import javax.servlet.jsp.tagext.Tag; -import javax.servlet.jsp.tagext.TagSupport; - +import jakarta.servlet.jsp.PageContext; +import jakarta.servlet.jsp.tagext.Tag; +import jakarta.servlet.jsp.tagext.TagSupport; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; diff --git a/spring-web/src/test/java/org/springframework/web/util/WebUtilsTests.java b/spring-web/src/test/java/org/springframework/web/util/WebUtilsTests.java index 998af1c9eb1..3f186456628 100644 --- a/spring-web/src/test/java/org/springframework/web/util/WebUtilsTests.java +++ b/spring-web/src/test/java/org/springframework/web/util/WebUtilsTests.java @@ -21,8 +21,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.Test; import org.springframework.http.HttpHeaders; diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/DelegatingServletInputStream.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/DelegatingServletInputStream.java index 7be60d7318d..03e4c18f550 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/DelegatingServletInputStream.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/DelegatingServletInputStream.java @@ -19,13 +19,13 @@ package org.springframework.web.testfixture.servlet; import java.io.IOException; import java.io.InputStream; -import javax.servlet.ReadListener; -import javax.servlet.ServletInputStream; +import jakarta.servlet.ReadListener; +import jakarta.servlet.ServletInputStream; import org.springframework.util.Assert; /** - * Delegating implementation of {@link javax.servlet.ServletInputStream}. + * Delegating implementation of {@link jakarta.servlet.ServletInputStream}. * *

    Used by {@link MockHttpServletRequest}; typically not directly * used for testing application controllers. diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/DelegatingServletOutputStream.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/DelegatingServletOutputStream.java index 774f4bf672c..e35f81d30f5 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/DelegatingServletOutputStream.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/DelegatingServletOutputStream.java @@ -19,13 +19,13 @@ package org.springframework.web.testfixture.servlet; import java.io.IOException; import java.io.OutputStream; -import javax.servlet.ServletOutputStream; -import javax.servlet.WriteListener; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.WriteListener; import org.springframework.util.Assert; /** - * Delegating implementation of {@link javax.servlet.ServletOutputStream}. + * Delegating implementation of {@link jakarta.servlet.ServletOutputStream}. * *

    Used by {@link MockHttpServletResponse}; typically not directly * used for testing application controllers. diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockAsyncContext.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockAsyncContext.java index 0391911be35..f01b2b7411e 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockAsyncContext.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockAsyncContext.java @@ -20,15 +20,15 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; -import javax.servlet.AsyncContext; -import javax.servlet.AsyncEvent; -import javax.servlet.AsyncListener; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.AsyncContext; +import jakarta.servlet.AsyncEvent; +import jakarta.servlet.AsyncListener; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.beans.BeanUtils; import org.springframework.lang.Nullable; diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockBodyContent.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockBodyContent.java index 1d6a50611f2..5992baa04d6 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockBodyContent.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockBodyContent.java @@ -21,14 +21,14 @@ import java.io.Reader; import java.io.StringReader; import java.io.Writer; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.jsp.JspWriter; -import javax.servlet.jsp.tagext.BodyContent; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.jsp.JspWriter; +import jakarta.servlet.jsp.tagext.BodyContent; import org.springframework.lang.Nullable; /** - * Mock implementation of the {@link javax.servlet.jsp.tagext.BodyContent} class. + * Mock implementation of the {@link jakarta.servlet.jsp.tagext.BodyContent} class. * Only necessary for testing applications when testing custom JSP tags. * * @author Juergen Hoeller diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockCookie.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockCookie.java index 8f2e5eaa975..c0305df35af 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockCookie.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockCookie.java @@ -20,7 +20,7 @@ import java.time.DateTimeException; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; -import javax.servlet.http.Cookie; +import jakarta.servlet.http.Cookie; import org.springframework.lang.Nullable; import org.springframework.util.Assert; diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockExpressionEvaluator.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockExpressionEvaluator.java deleted file mode 100644 index 3358798e768..00000000000 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockExpressionEvaluator.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright 2002-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.web.testfixture.servlet; - -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.PageContext; - -import org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager; - -/** - * Mock implementation of the JSP 2.0 {@link javax.servlet.jsp.el.ExpressionEvaluator} - * interface, delegating to the Apache JSTL {@link ExpressionEvaluatorManager}. - * Only necessary for testing applications when testing custom JSP tags. - * - *

    Note that the Apache JSTL implementation (jstl.jar, standard.jar) has to be - * available on the classpath to use this expression evaluator. - * - * @author Juergen Hoeller - * @since 1.1.5 - * @see org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager - */ -@SuppressWarnings("deprecation") -public class MockExpressionEvaluator extends javax.servlet.jsp.el.ExpressionEvaluator { - - private final PageContext pageContext; - - - /** - * Create a new MockExpressionEvaluator for the given PageContext. - * @param pageContext the JSP PageContext to run in - */ - public MockExpressionEvaluator(PageContext pageContext) { - this.pageContext = pageContext; - } - - - @Override - @SuppressWarnings("rawtypes") - public javax.servlet.jsp.el.Expression parseExpression(final String expression, final Class expectedType, - final javax.servlet.jsp.el.FunctionMapper functionMapper) throws javax.servlet.jsp.el.ELException { - - return new javax.servlet.jsp.el.Expression() { - @Override - public Object evaluate(javax.servlet.jsp.el.VariableResolver variableResolver) throws javax.servlet.jsp.el.ELException { - return doEvaluate(expression, expectedType, functionMapper); - } - }; - } - - @Override - @SuppressWarnings("rawtypes") - public Object evaluate(String expression, Class expectedType, javax.servlet.jsp.el.VariableResolver variableResolver, - javax.servlet.jsp.el.FunctionMapper functionMapper) throws javax.servlet.jsp.el.ELException { - - return doEvaluate(expression, expectedType, functionMapper); - } - - @SuppressWarnings("rawtypes") - protected Object doEvaluate(String expression, Class expectedType, javax.servlet.jsp.el.FunctionMapper functionMapper) - throws javax.servlet.jsp.el.ELException { - - try { - return ExpressionEvaluatorManager.evaluate("JSP EL expression", expression, expectedType, this.pageContext); - } - catch (JspException ex) { - throw new javax.servlet.jsp.el.ELException("Parsing of JSP EL expression \"" + expression + "\" failed", ex); - } - } - -} diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockFilterChain.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockFilterChain.java index 259fecf306a..ed7b3d93dda 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockFilterChain.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockFilterChain.java @@ -22,20 +22,20 @@ import java.util.Collections; import java.util.Iterator; import java.util.List; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.Servlet; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.Servlet; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.ObjectUtils; /** - * Mock implementation of the {@link javax.servlet.FilterChain} interface. + * Mock implementation of the {@link jakarta.servlet.FilterChain} interface. * *

    A {@link MockFilterChain} can be configured with one or more filters and a * Servlet to invoke. The first time the chain is called, it invokes all filters diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockFilterConfig.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockFilterConfig.java index 2cd954986c3..931f043df59 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockFilterConfig.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockFilterConfig.java @@ -21,17 +21,17 @@ import java.util.Enumeration; import java.util.LinkedHashMap; import java.util.Map; -import javax.servlet.FilterConfig; -import javax.servlet.ServletContext; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletContext; import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** - * Mock implementation of the {@link javax.servlet.FilterConfig} interface. + * Mock implementation of the {@link jakarta.servlet.FilterConfig} interface. * *

    Used for testing the web framework; also useful for testing - * custom {@link javax.servlet.Filter} implementations. + * custom {@link jakarta.servlet.Filter} implementations. * * @author Juergen Hoeller * @since 1.0.2 diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletMapping.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletMapping.java index 4b2ce3087f1..b24ed628e59 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletMapping.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletMapping.java @@ -16,8 +16,8 @@ package org.springframework.web.testfixture.servlet; -import javax.servlet.http.HttpServletMapping; -import javax.servlet.http.MappingMatch; +import jakarta.servlet.http.HttpServletMapping; +import jakarta.servlet.http.MappingMatch; import org.springframework.lang.Nullable; diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletRequest.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletRequest.java index d9023c3ca1e..bcf9172d8f9 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletRequest.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletRequest.java @@ -43,21 +43,21 @@ import java.util.Set; import java.util.TimeZone; import java.util.stream.Collectors; -import javax.servlet.AsyncContext; -import javax.servlet.DispatcherType; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletInputStream; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletMapping; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; -import javax.servlet.http.HttpUpgradeHandler; -import javax.servlet.http.Part; +import jakarta.servlet.AsyncContext; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.RequestDispatcher; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletInputStream; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletMapping; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; +import jakarta.servlet.http.HttpUpgradeHandler; +import jakarta.servlet.http.Part; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; @@ -72,7 +72,7 @@ import org.springframework.util.StreamUtils; import org.springframework.util.StringUtils; /** - * Mock implementation of the {@link javax.servlet.http.HttpServletRequest} interface. + * Mock implementation of the {@link jakarta.servlet.http.HttpServletRequest} interface. * *

    The default, preferred {@link Locale} for the server mocked by this request * is {@link Locale#ENGLISH}. This value can be changed via {@link #addPreferredLocale} @@ -823,7 +823,7 @@ public class MockHttpServletRequest implements HttpServletRequest { *

    In contrast to the Servlet specification, this mock implementation * does not take into consideration any locales * specified via the {@code Accept-Language} header. - * @see javax.servlet.ServletRequest#getLocale() + * @see jakarta.servlet.ServletRequest#getLocale() * @see #addPreferredLocale(Locale) * @see #setPreferredLocales(List) */ @@ -841,7 +841,7 @@ public class MockHttpServletRequest implements HttpServletRequest { *

    In contrast to the Servlet specification, this mock implementation * does not take into consideration any locales * specified via the {@code Accept-Language} header. - * @see javax.servlet.ServletRequest#getLocales() + * @see jakarta.servlet.ServletRequest#getLocales() * @see #addPreferredLocale(Locale) * @see #setPreferredLocales(List) */ @@ -864,7 +864,7 @@ public class MockHttpServletRequest implements HttpServletRequest { /** * Return {@code true} if the {@link #setSecure secure} flag has been set * to {@code true} or if the {@link #getScheme scheme} is {@code https}. - * @see javax.servlet.ServletRequest#isSecure() + * @see jakarta.servlet.ServletRequest#isSecure() */ @Override public boolean isSecure() { diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletResponse.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletResponse.java index 4a343c8344c..00763fa9746 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletResponse.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletResponse.java @@ -38,9 +38,9 @@ import java.util.Locale; import java.util.Map; import java.util.TimeZone; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; @@ -51,7 +51,7 @@ import org.springframework.util.StringUtils; import org.springframework.web.util.WebUtils; /** - * Mock implementation of the {@link javax.servlet.http.HttpServletResponse} interface. + * Mock implementation of the {@link jakarta.servlet.http.HttpServletResponse} interface. * *

    As of Spring Framework 5.0, this set of mocks is designed on a Servlet 4.0 baseline. * @@ -383,7 +383,7 @@ public class MockHttpServletResponse implements HttpServletResponse { @Override public void setLocale(@Nullable Locale locale) { - // Although the Javadoc for javax.servlet.ServletResponse.setLocale(Locale) does not + // Although the Javadoc for jakarta.servlet.ServletResponse.setLocale(Locale) does not // state how a null value for the supplied Locale should be handled, both Tomcat and // Jetty simply ignore a null value. So we do the same here. if (locale == null) { diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpSession.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpSession.java index b8302c48c57..a33c7c9a223 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpSession.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpSession.java @@ -25,17 +25,17 @@ import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.Map; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpSession; -import javax.servlet.http.HttpSessionBindingEvent; -import javax.servlet.http.HttpSessionBindingListener; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpSession; +import jakarta.servlet.http.HttpSessionBindingEvent; +import jakarta.servlet.http.HttpSessionBindingListener; import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.StringUtils; /** - * Mock implementation of the {@link javax.servlet.http.HttpSession} interface. + * Mock implementation of the {@link jakarta.servlet.http.HttpSession} interface. * *

    As of Spring 5.0, this set of mocks is designed on a Servlet 4.0 baseline. * @@ -149,7 +149,7 @@ public class MockHttpSession implements HttpSession { } @Override - public javax.servlet.http.HttpSessionContext getSessionContext() { + public jakarta.servlet.http.HttpSessionContext getSessionContext() { throw new UnsupportedOperationException("getSessionContext"); } diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockJspWriter.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockJspWriter.java index 03997d1076b..467a220a3f1 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockJspWriter.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockJspWriter.java @@ -20,13 +20,13 @@ import java.io.IOException; import java.io.PrintWriter; import java.io.Writer; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.jsp.JspWriter; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.jsp.JspWriter; import org.springframework.lang.Nullable; /** - * Mock implementation of the {@link javax.servlet.jsp.JspWriter} class. + * Mock implementation of the {@link jakarta.servlet.jsp.JspWriter} class. * Only necessary for testing applications when testing custom JSP tags. * * @author Juergen Hoeller diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockMultipartHttpServletRequest.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockMultipartHttpServletRequest.java index c36eb3ac7bc..88c51b9498d 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockMultipartHttpServletRequest.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockMultipartHttpServletRequest.java @@ -24,9 +24,9 @@ import java.util.Iterator; import java.util.List; import java.util.Map; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.http.Part; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.Part; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockPageContext.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockPageContext.java index 7ffc2d62631..f45973ef9d0 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockPageContext.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockPageContext.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,24 +24,24 @@ import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.Map; -import javax.el.ELContext; -import javax.servlet.Servlet; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; -import javax.servlet.jsp.JspWriter; -import javax.servlet.jsp.PageContext; +import jakarta.el.ELContext; +import jakarta.servlet.Servlet; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; +import jakarta.servlet.jsp.JspWriter; +import jakarta.servlet.jsp.PageContext; import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** - * Mock implementation of the {@link javax.servlet.jsp.PageContext} interface. + * Mock implementation of the {@link jakarta.servlet.jsp.PageContext} interface. * Only necessary for testing applications when testing custom JSP tags. * *

    Note: Expects initialization via the constructor rather than via the @@ -293,8 +293,9 @@ public class MockPageContext extends PageContext { @Override @Deprecated - public javax.servlet.jsp.el.ExpressionEvaluator getExpressionEvaluator() { - return new MockExpressionEvaluator(this); + @Nullable + public jakarta.servlet.jsp.el.ExpressionEvaluator getExpressionEvaluator() { + return null; } @Override @@ -306,7 +307,7 @@ public class MockPageContext extends PageContext { @Override @Deprecated @Nullable - public javax.servlet.jsp.el.VariableResolver getVariableResolver() { + public jakarta.servlet.jsp.el.VariableResolver getVariableResolver() { return null; } diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockPart.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockPart.java index 4079fd69c72..ac1ce65d0ef 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockPart.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockPart.java @@ -22,7 +22,7 @@ import java.io.InputStream; import java.util.Collection; import java.util.Collections; -import javax.servlet.http.Part; +import jakarta.servlet.http.Part; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; @@ -30,7 +30,7 @@ import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** - * Mock implementation of {@code javax.servlet.http.Part}. + * Mock implementation of {@code jakarta.servlet.http.Part}. * * @author Rossen Stoyanchev * @author Juergen Hoeller diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockRequestDispatcher.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockRequestDispatcher.java index 597f1730fff..38379ac6ede 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockRequestDispatcher.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockRequestDispatcher.java @@ -16,18 +16,17 @@ package org.springframework.web.testfixture.servlet; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletResponseWrapper; - +import jakarta.servlet.RequestDispatcher; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletResponseWrapper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.util.Assert; /** - * Mock implementation of the {@link javax.servlet.RequestDispatcher} interface. + * Mock implementation of the {@link jakarta.servlet.RequestDispatcher} interface. * * @author Rod Johnson * @author Juergen Hoeller diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockServletConfig.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockServletConfig.java index 81fcc2421db..17f4541a138 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockServletConfig.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockServletConfig.java @@ -21,14 +21,14 @@ import java.util.Enumeration; import java.util.LinkedHashMap; import java.util.Map; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletContext; import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** - * Mock implementation of the {@link javax.servlet.ServletConfig} interface. + * Mock implementation of the {@link jakarta.servlet.ServletConfig} interface. * * @author Rod Johnson * @author Juergen Hoeller diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockServletContext.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockServletContext.java index 978bdf09b05..b44a3b13283 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockServletContext.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockServletContext.java @@ -31,17 +31,16 @@ import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; -import javax.servlet.Filter; -import javax.servlet.FilterRegistration; -import javax.servlet.RequestDispatcher; -import javax.servlet.Servlet; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletRegistration; -import javax.servlet.SessionCookieConfig; -import javax.servlet.SessionTrackingMode; -import javax.servlet.descriptor.JspConfigDescriptor; - +import jakarta.servlet.Filter; +import jakarta.servlet.FilterRegistration; +import jakarta.servlet.RequestDispatcher; +import jakarta.servlet.Servlet; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRegistration; +import jakarta.servlet.SessionCookieConfig; +import jakarta.servlet.SessionTrackingMode; +import jakarta.servlet.descriptor.JspConfigDescriptor; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -59,7 +58,7 @@ import org.springframework.util.StringUtils; import org.springframework.web.util.WebUtils; /** - * Mock implementation of the {@link javax.servlet.ServletContext} interface. + * Mock implementation of the {@link jakarta.servlet.ServletContext} interface. * *

    As of Spring 5.0, this set of mocks is designed on a Servlet 4.0 baseline. * @@ -663,7 +662,7 @@ public class MockServletContext implements ServletContext { /** * This method always returns {@code null}. - * @see javax.servlet.ServletContext#getServletRegistration(java.lang.String) + * @see jakarta.servlet.ServletContext#getServletRegistration(java.lang.String) */ @Override @Nullable @@ -673,7 +672,7 @@ public class MockServletContext implements ServletContext { /** * This method always returns an {@linkplain Collections#emptyMap empty map}. - * @see javax.servlet.ServletContext#getServletRegistrations() + * @see jakarta.servlet.ServletContext#getServletRegistrations() */ @Override public Map getServletRegistrations() { @@ -702,7 +701,7 @@ public class MockServletContext implements ServletContext { /** * This method always returns {@code null}. - * @see javax.servlet.ServletContext#getFilterRegistration(java.lang.String) + * @see jakarta.servlet.ServletContext#getFilterRegistration(java.lang.String) */ @Override @Nullable @@ -712,7 +711,7 @@ public class MockServletContext implements ServletContext { /** * This method always returns an {@linkplain Collections#emptyMap empty map}. - * @see javax.servlet.ServletContext#getFilterRegistrations() + * @see jakarta.servlet.ServletContext#getFilterRegistrations() */ @Override public Map getFilterRegistrations() { diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockSessionCookieConfig.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockSessionCookieConfig.java index c7f83450874..04f4a8ceabc 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockSessionCookieConfig.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockSessionCookieConfig.java @@ -16,16 +16,16 @@ package org.springframework.web.testfixture.servlet; -import javax.servlet.SessionCookieConfig; +import jakarta.servlet.SessionCookieConfig; import org.springframework.lang.Nullable; /** - * Mock implementation of the {@link javax.servlet.SessionCookieConfig} interface. + * Mock implementation of the {@link jakarta.servlet.SessionCookieConfig} interface. * * @author Juergen Hoeller * @since 4.0 - * @see javax.servlet.ServletContext#getSessionCookieConfig() + * @see jakarta.servlet.ServletContext#getSessionCookieConfig() */ public class MockSessionCookieConfig implements SessionCookieConfig { diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/PassThroughFilterChain.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/PassThroughFilterChain.java index e3537156ac5..2100b0421b9 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/PassThroughFilterChain.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/PassThroughFilterChain.java @@ -18,26 +18,26 @@ package org.springframework.web.testfixture.servlet; import java.io.IOException; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.Servlet; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.Servlet; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** - * Implementation of the {@link javax.servlet.FilterConfig} interface which + * Implementation of the {@link jakarta.servlet.FilterConfig} interface which * simply passes the call through to a given Filter/FilterChain combination * (indicating the next Filter in the chain along with the FilterChain that it is * supposed to work on) or to a given Servlet (indicating the end of the chain). * * @author Juergen Hoeller * @since 2.0.3 - * @see javax.servlet.Filter - * @see javax.servlet.Servlet + * @see jakarta.servlet.Filter + * @see jakarta.servlet.Servlet * @see MockFilterChain */ public class PassThroughFilterChain implements FilterChain { diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/xml/Pojo.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/xml/Pojo.java index 59accabc9a2..87487adebc7 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/xml/Pojo.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/xml/Pojo.java @@ -16,7 +16,7 @@ package org.springframework.web.testfixture.xml; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlRootElement; /** * @author Sebastien Deleuze diff --git a/spring-webflux/spring-webflux.gradle b/spring-webflux/spring-webflux.gradle index b762e09c5cb..464f3f8902c 100644 --- a/spring-webflux/spring-webflux.gradle +++ b/spring-webflux/spring-webflux.gradle @@ -9,18 +9,19 @@ dependencies { api("io.projectreactor:reactor-core") optional(project(":spring-context")) optional(project(":spring-context-support")) // for FreeMarker support - optional("javax.servlet:javax.servlet-api") - optional("javax.websocket:javax.websocket-api") + optional("jakarta.servlet:jakarta.servlet-api") + optional("jakarta.websocket:jakarta.websocket-api") optional("org.webjars:webjars-locator-core") optional("org.freemarker:freemarker") optional("com.fasterxml.jackson.core:jackson-databind") optional("com.fasterxml.jackson.dataformat:jackson-dataformat-smile") optional("io.projectreactor.netty:reactor-netty-http") optional("org.apache.tomcat:tomcat-websocket") - optional("org.eclipse.jetty.websocket:websocket-server") { - exclude group: "javax.servlet", module: "javax.servlet" + optional("org.eclipse.jetty.websocket:websocket-jetty-server") { + exclude group: "jakarta.servlet", module: "jakarta.servlet-api" } - optional("io.undertow:undertow-websockets-jsr") + optional("org.eclipse.jetty.websocket:websocket-jetty-client") + optional("io.undertow:undertow-websockets-jsr-jakartaee9") optional("org.apache.httpcomponents:httpclient") optional("org.jetbrains.kotlin:kotlin-reflect") optional("org.jetbrains.kotlin:kotlin-stdlib") @@ -29,10 +30,10 @@ dependencies { testImplementation(testFixtures(project(":spring-beans"))) testImplementation(testFixtures(project(":spring-core"))) testImplementation(testFixtures(project(":spring-web"))) - testImplementation("javax.xml.bind:jaxb-api") + testImplementation("jakarta.xml.bind:jakarta.xml.bind-api") testImplementation("com.fasterxml:aalto-xml") testImplementation("org.hibernate:hibernate-validator") - testImplementation("javax.validation:validation-api") + testImplementation("jakarta.validation:jakarta.validation-api") testImplementation("io.reactivex.rxjava3:rxjava") testImplementation("io.projectreactor:reactor-test") testImplementation("io.undertow:undertow-core") @@ -48,12 +49,11 @@ dependencies { testRuntimeOnly("org.jetbrains.kotlin:kotlin-scripting-jsr223") testRuntimeOnly("org.jruby:jruby") testRuntimeOnly("org.python:jython-standalone") - testRuntimeOnly("org.synchronoss.cloud:nio-multipart-parser") testRuntimeOnly("org.webjars:underscorejs") - testRuntimeOnly("org.glassfish:javax.el") + testRuntimeOnly("org.glassfish:jakarta.el") testRuntimeOnly("com.sun.xml.bind:jaxb-core") testRuntimeOnly("com.sun.xml.bind:jaxb-impl") - testRuntimeOnly("com.sun.activation:javax.activation") + testRuntimeOnly("com.sun.activation:jakarta.activation") } test { diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/config/WebFluxConfigurationSupport.java b/spring-webflux/src/main/java/org/springframework/web/reactive/config/WebFluxConfigurationSupport.java index 828ac8aa088..1de7d9428e9 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/config/WebFluxConfigurationSupport.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/config/WebFluxConfigurationSupport.java @@ -383,7 +383,7 @@ public class WebFluxConfigurationSupport implements ApplicationContextAware { public Validator webFluxValidator() { Validator validator = getValidator(); if (validator == null) { - if (ClassUtils.isPresent("javax.validation.Validator", getClass().getClassLoader())) { + if (ClassUtils.isPresent("jakarta.validation.Validator", getClass().getClassLoader())) { Class clazz; try { String name = "org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean"; diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ModelAttributeMethodArgumentResolver.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ModelAttributeMethodArgumentResolver.java index 230ed80958a..b1c37b591dd 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ModelAttributeMethodArgumentResolver.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ModelAttributeMethodArgumentResolver.java @@ -51,7 +51,7 @@ import org.springframework.web.server.ServerWebExchange; * constructor and then added to the model. Once created the attribute is * populated via data binding to the request (form data, query params). * Validation also may be applied if the argument is annotated with - * {@code @javax.validation.Valid} or Spring's own + * {@code @jakarta.validation.Valid} or Spring's own * {@code @org.springframework.validation.annotation.Validated}. * *

    When this handler is created with {@code useDefaultResolution=true} diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/RequestBodyMethodArgumentResolver.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/RequestBodyMethodArgumentResolver.java index c1bce52df99..2ec18252b64 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/RequestBodyMethodArgumentResolver.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/RequestBodyMethodArgumentResolver.java @@ -34,7 +34,7 @@ import org.springframework.web.server.ServerWebInputException; * body of the request through a compatible {@code HttpMessageReader}. * *

    An {@code @RequestBody} method argument is also validated if it is - * annotated with {@code @javax.validation.Valid} or + * annotated with {@code @jakarta.validation.Valid} or * {@link org.springframework.validation.annotation.Validated}. Validation * failure results in an {@link ServerWebInputException}. * diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/RedirectView.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/RedirectView.java index 4ec3f0ecec3..6905132b867 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/RedirectView.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/RedirectView.java @@ -296,7 +296,7 @@ public class RedirectView extends AbstractUrlBasedView { /** * Whether the given targetUrl has a host that is a "foreign" system in which - * case {@link javax.servlet.http.HttpServletResponse#encodeRedirectURL} will not be applied. + * case {@link jakarta.servlet.http.HttpServletResponse#encodeRedirectURL} will not be applied. * This method returns {@code true} if the {@link #setHosts(String[])} * property is configured and the target URL has a host that does not match. * @param targetUrl the target redirect URL diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/Jetty10WebSocketHandlerAdapter.java b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/Jetty10WebSocketHandlerAdapter.java deleted file mode 100644 index 5b88fab7977..00000000000 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/Jetty10WebSocketHandlerAdapter.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright 2002-2021 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.web.reactive.socket.adapter; - -import java.nio.ByteBuffer; -import java.nio.charset.StandardCharsets; -import java.util.function.Function; - -import org.eclipse.jetty.websocket.api.Session; -import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose; -import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect; -import org.eclipse.jetty.websocket.api.annotations.OnWebSocketError; -import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage; -import org.eclipse.jetty.websocket.api.annotations.WebSocket; -import org.eclipse.jetty.websocket.api.extensions.Frame; - -import org.springframework.core.io.buffer.DataBuffer; -import org.springframework.lang.Nullable; -import org.springframework.util.Assert; -import org.springframework.web.reactive.socket.CloseStatus; -import org.springframework.web.reactive.socket.WebSocketHandler; -import org.springframework.web.reactive.socket.WebSocketMessage; -import org.springframework.web.reactive.socket.WebSocketMessage.Type; -import org.springframework.web.reactive.socket.WebSocketSession; - -/** - * Identical to {@link JettyWebSocketHandlerAdapter}, only excluding the - * {@code onWebSocketFrame} method, since the {@link Frame} argument has moved - * to a different package in Jetty 10. - * - * @author Rossen Stoyanchev - * @since 5.3.4 - */ -@WebSocket -public class Jetty10WebSocketHandlerAdapter { - - private final WebSocketHandler delegateHandler; - - private final Function sessionFactory; - - @Nullable - private JettyWebSocketSession delegateSession; - - - public Jetty10WebSocketHandlerAdapter(WebSocketHandler handler, - Function sessionFactory) { - - Assert.notNull(handler, "WebSocketHandler is required"); - Assert.notNull(sessionFactory, "'sessionFactory' is required"); - this.delegateHandler = handler; - this.sessionFactory = sessionFactory; - } - - - @OnWebSocketConnect - public void onWebSocketConnect(Session session) { - this.delegateSession = this.sessionFactory.apply(session); - this.delegateHandler.handle(this.delegateSession) - .checkpoint(session.getUpgradeRequest().getRequestURI() + " [JettyWebSocketHandlerAdapter]") - .subscribe(this.delegateSession); - } - - @OnWebSocketMessage - public void onWebSocketText(String message) { - if (this.delegateSession != null) { - WebSocketMessage webSocketMessage = toMessage(Type.TEXT, message); - this.delegateSession.handleMessage(webSocketMessage.getType(), webSocketMessage); - } - } - - @OnWebSocketMessage - public void onWebSocketBinary(byte[] message, int offset, int length) { - if (this.delegateSession != null) { - ByteBuffer buffer = ByteBuffer.wrap(message, offset, length); - WebSocketMessage webSocketMessage = toMessage(Type.BINARY, buffer); - this.delegateSession.handleMessage(webSocketMessage.getType(), webSocketMessage); - } - } - -// TODO: onWebSocketFrame can't be declared without compiling against Jetty 10 -// Jetty 10: org.eclipse.jetty.websocket.api.Frame -// Jetty 9: org.eclipse.jetty.websocket.api.extensions.Frame -// -// private static final ByteBuffer EMPTY_PAYLOAD = ByteBuffer.wrap(new byte[0]); -// -// @OnWebSocketFrame -// public void onWebSocketFrame(Frame frame) { -// if (this.delegateSession != null) { -// if (OpCode.PONG == frame.getOpCode()) { -// ByteBuffer buffer = (frame.getPayload() != null ? frame.getPayload() : EMPTY_PAYLOAD); -// WebSocketMessage webSocketMessage = toMessage(Type.PONG, buffer); -// this.delegateSession.handleMessage(webSocketMessage.getType(), webSocketMessage); -// } -// } -// } - - private WebSocketMessage toMessage(Type type, T message) { - WebSocketSession session = this.delegateSession; - Assert.state(session != null, "Cannot create message without a session"); - if (Type.TEXT.equals(type)) { - byte[] bytes = ((String) message).getBytes(StandardCharsets.UTF_8); - DataBuffer buffer = session.bufferFactory().wrap(bytes); - return new WebSocketMessage(Type.TEXT, buffer); - } - else if (Type.BINARY.equals(type)) { - DataBuffer buffer = session.bufferFactory().wrap((ByteBuffer) message); - return new WebSocketMessage(Type.BINARY, buffer); - } - else if (Type.PONG.equals(type)) { - DataBuffer buffer = session.bufferFactory().wrap((ByteBuffer) message); - return new WebSocketMessage(Type.PONG, buffer); - } - else { - throw new IllegalArgumentException("Unexpected message type: " + message); - } - } - - @OnWebSocketClose - public void onWebSocketClose(int statusCode, String reason) { - if (this.delegateSession != null) { - this.delegateSession.handleClose(CloseStatus.create(statusCode, reason)); - } - } - - @OnWebSocketError - public void onWebSocketError(Throwable cause) { - if (this.delegateSession != null) { - this.delegateSession.handleError(cause); - } - } - -} diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/JettyWebSocketHandlerAdapter.java b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/JettyWebSocketHandlerAdapter.java index baa8e14537e..79f750abd72 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/JettyWebSocketHandlerAdapter.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/JettyWebSocketHandlerAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2020 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,6 +20,7 @@ import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.util.function.Function; +import org.eclipse.jetty.websocket.api.Frame; import org.eclipse.jetty.websocket.api.Session; import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose; import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect; @@ -27,8 +28,7 @@ import org.eclipse.jetty.websocket.api.annotations.OnWebSocketError; import org.eclipse.jetty.websocket.api.annotations.OnWebSocketFrame; import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage; import org.eclipse.jetty.websocket.api.annotations.WebSocket; -import org.eclipse.jetty.websocket.api.extensions.Frame; -import org.eclipse.jetty.websocket.common.OpCode; +import org.eclipse.jetty.websocket.core.OpCode; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.lang.Nullable; diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/StandardWebSocketHandlerAdapter.java b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/StandardWebSocketHandlerAdapter.java index a503d9d76c5..d4699ca32e0 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/StandardWebSocketHandlerAdapter.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/StandardWebSocketHandlerAdapter.java @@ -20,11 +20,11 @@ import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.util.function.Function; -import javax.websocket.CloseReason; -import javax.websocket.Endpoint; -import javax.websocket.EndpointConfig; -import javax.websocket.PongMessage; -import javax.websocket.Session; +import jakarta.websocket.CloseReason; +import jakarta.websocket.Endpoint; +import jakarta.websocket.EndpointConfig; +import jakarta.websocket.PongMessage; +import jakarta.websocket.Session; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.lang.Nullable; diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/StandardWebSocketSession.java b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/StandardWebSocketSession.java index 3679f36f0eb..b08e4aca2cc 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/StandardWebSocketSession.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/StandardWebSocketSession.java @@ -20,12 +20,11 @@ import java.io.IOException; import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; -import javax.websocket.CloseReason; -import javax.websocket.CloseReason.CloseCodes; -import javax.websocket.SendHandler; -import javax.websocket.SendResult; -import javax.websocket.Session; - +import jakarta.websocket.CloseReason; +import jakarta.websocket.CloseReason.CloseCodes; +import jakarta.websocket.SendHandler; +import jakarta.websocket.SendResult; +import jakarta.websocket.Session; import reactor.core.publisher.Mono; import reactor.core.publisher.Sinks; @@ -38,7 +37,7 @@ import org.springframework.web.reactive.socket.WebSocketSession; /** * Spring {@link WebSocketSession} adapter for a standard Java (JSR 356) - * {@link javax.websocket.Session}. + * {@link jakarta.websocket.Session}. * * @author Violeta Georgieva * @author Rossen Stoyanchev diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/TomcatWebSocketSession.java b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/TomcatWebSocketSession.java index d06f87533ba..f23bcd42d26 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/TomcatWebSocketSession.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/TomcatWebSocketSession.java @@ -18,8 +18,7 @@ package org.springframework.web.reactive.socket.adapter; import java.util.concurrent.atomic.AtomicIntegerFieldUpdater; -import javax.websocket.Session; - +import jakarta.websocket.Session; import org.apache.tomcat.websocket.WsSession; import reactor.core.publisher.Sinks; @@ -29,7 +28,7 @@ import org.springframework.web.reactive.socket.WebSocketSession; /** * Spring {@link WebSocketSession} adapter for Tomcat's - * {@link javax.websocket.Session}. + * {@link jakarta.websocket.Session}. * * @author Violeta Georgieva * @since 5.0 diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/client/JettyWebSocketClient.java b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/client/JettyWebSocketClient.java index 9bbeb08f845..4c98f03937e 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/client/JettyWebSocketClient.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/client/JettyWebSocketClient.java @@ -17,29 +17,22 @@ package org.springframework.web.reactive.socket.client; import java.io.IOException; -import java.lang.reflect.Method; import java.net.URI; import java.util.function.Function; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.eclipse.jetty.websocket.api.Session; -import org.eclipse.jetty.websocket.api.UpgradeRequest; -import org.eclipse.jetty.websocket.api.UpgradeResponse; import org.eclipse.jetty.websocket.client.ClientUpgradeRequest; -import org.eclipse.jetty.websocket.client.io.UpgradeListener; import reactor.core.publisher.Mono; import reactor.core.publisher.Sinks; import org.springframework.context.Lifecycle; import org.springframework.core.io.buffer.DefaultDataBufferFactory; import org.springframework.http.HttpHeaders; -import org.springframework.util.ClassUtils; -import org.springframework.util.ReflectionUtils; import org.springframework.web.reactive.socket.HandshakeInfo; import org.springframework.web.reactive.socket.WebSocketHandler; import org.springframework.web.reactive.socket.adapter.ContextWebSocketHandler; -import org.springframework.web.reactive.socket.adapter.Jetty10WebSocketHandlerAdapter; import org.springframework.web.reactive.socket.adapter.JettyWebSocketHandlerAdapter; import org.springframework.web.reactive.socket.adapter.JettyWebSocketSession; @@ -54,37 +47,23 @@ import org.springframework.web.reactive.socket.adapter.JettyWebSocketSession; * * @author Violeta Georgieva * @author Rossen Stoyanchev + * @author Juergen Hoeller * @since 5.0 */ public class JettyWebSocketClient implements WebSocketClient, Lifecycle { - private static ClassLoader loader = JettyWebSocketClient.class.getClassLoader(); - - private static final boolean jetty10Present; - - static { - jetty10Present = ClassUtils.isPresent( - "org.eclipse.jetty.websocket.client.JettyUpgradeListener", loader); - } - - private static final Log logger = LogFactory.getLog(JettyWebSocketClient.class); - private final org.eclipse.jetty.websocket.client.WebSocketClient jettyClient; private final boolean externallyManaged; - private final UpgradeHelper upgradeHelper = - (jetty10Present ? new Jetty10UpgradeHelper() : new Jetty9UpgradeHelper()); - /** * Default constructor that creates and manages an instance of a Jetty * {@link org.eclipse.jetty.websocket.client.WebSocketClient WebSocketClient}. * The instance can be obtained with {@link #getJettyClient()} for further * configuration. - * *

    Note: When this constructor is used {@link Lifecycle} * methods of this class are delegated to the Jetty {@code WebSocketClient}. */ @@ -96,7 +75,6 @@ public class JettyWebSocketClient implements WebSocketClient, Lifecycle { /** * Constructor that accepts an existing instance of a Jetty * {@link org.eclipse.jetty.websocket.client.WebSocketClient WebSocketClient}. - * *

    Note: Use of this constructor implies the Jetty * {@code WebSocketClient} is externally managed and hence {@link Lifecycle} * methods of this class are not delegated to it. @@ -165,8 +143,13 @@ public class JettyWebSocketClient implements WebSocketClient, Lifecycle { url, ContextWebSocketHandler.decorate(handler, contextView), completionSink); ClientUpgradeRequest request = new ClientUpgradeRequest(); request.setSubProtocols(handler.getSubProtocols()); - return this.upgradeHelper.upgrade( - this.jettyClient, jettyHandler, url, request, headers, completionSink); + try { + this.jettyClient.connect(jettyHandler, url, request); + return completionSink.asMono(); + } + catch (IOException ex) { + return Mono.error(ex); + } }); } @@ -175,9 +158,7 @@ public class JettyWebSocketClient implements WebSocketClient, Lifecycle { HandshakeInfo info = createHandshakeInfo(url, session); return new JettyWebSocketSession(session, info, DefaultDataBufferFactory.sharedInstance, completion); }; - return (jetty10Present ? - new Jetty10WebSocketHandlerAdapter(handler, sessionFactory) : - new JettyWebSocketHandlerAdapter(handler, sessionFactory)); + return new JettyWebSocketHandlerAdapter(handler, sessionFactory); } private HandshakeInfo createHandshakeInfo(URI url, Session jettySession) { @@ -187,80 +168,4 @@ public class JettyWebSocketClient implements WebSocketClient, Lifecycle { return new HandshakeInfo(url, headers, Mono.empty(), protocol); } - - /** - * Encapsulate incompatible changes between Jetty 9.4 and 10. - */ - private interface UpgradeHelper { - - Mono upgrade(org.eclipse.jetty.websocket.client.WebSocketClient jettyClient, - Object jettyHandler, URI url, ClientUpgradeRequest request, HttpHeaders headers, - Sinks.Empty completionSink); - } - - - private static class Jetty9UpgradeHelper implements UpgradeHelper { - - @Override - public Mono upgrade(org.eclipse.jetty.websocket.client.WebSocketClient jettyClient, - Object jettyHandler, URI url, ClientUpgradeRequest request, HttpHeaders headers, - Sinks.Empty completionSink) { - - try { - jettyClient.connect(jettyHandler, url, request, new DefaultUpgradeListener(headers)); - return completionSink.asMono(); - } - catch (IOException ex) { - return Mono.error(ex); - } - } - } - - private static class DefaultUpgradeListener implements UpgradeListener { - - private final HttpHeaders headers; - - - public DefaultUpgradeListener(HttpHeaders headers) { - this.headers = headers; - } - - @Override - public void onHandshakeRequest(UpgradeRequest request) { - this.headers.forEach(request::setHeader); - } - - @Override - public void onHandshakeResponse(UpgradeResponse response) { - } - } - - private static class Jetty10UpgradeHelper implements UpgradeHelper { - - // On Jetty 9 returns Future, on Jetty 10 returns CompletableFuture - private static final Method connectMethod; - - static { - try { - Class type = loader.loadClass("org.eclipse.jetty.websocket.client.WebSocketClient"); - connectMethod = type.getMethod("connect", Object.class, URI.class, ClientUpgradeRequest.class); - } - catch (ClassNotFoundException | NoSuchMethodException ex) { - throw new IllegalStateException("No compatible Jetty version found", ex); - } - } - - @Override - public Mono upgrade(org.eclipse.jetty.websocket.client.WebSocketClient jettyClient, - Object jettyHandler, URI url, ClientUpgradeRequest request, HttpHeaders headers, - Sinks.Empty completionSink) { - - // TODO: pass JettyUpgradeListener argument to set headers from HttpHeaders (like we do for Jetty 9) - // which would require a JDK Proxy since it is new in Jetty 10 - - ReflectionUtils.invokeMethod(connectMethod, jettyClient, jettyHandler, url, request); - return completionSink.asMono(); - } - } - } diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/client/StandardWebSocketClient.java b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/client/StandardWebSocketClient.java index 4bf98585a05..39b61505a19 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/client/StandardWebSocketClient.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/client/StandardWebSocketClient.java @@ -20,14 +20,13 @@ import java.net.URI; import java.util.List; import java.util.Map; -import javax.websocket.ClientEndpointConfig; -import javax.websocket.ClientEndpointConfig.Configurator; -import javax.websocket.ContainerProvider; -import javax.websocket.Endpoint; -import javax.websocket.HandshakeResponse; -import javax.websocket.Session; -import javax.websocket.WebSocketContainer; - +import jakarta.websocket.ClientEndpointConfig; +import jakarta.websocket.ClientEndpointConfig.Configurator; +import jakarta.websocket.ContainerProvider; +import jakarta.websocket.Endpoint; +import jakarta.websocket.HandshakeResponse; +import jakarta.websocket.Session; +import jakarta.websocket.WebSocketContainer; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import reactor.core.publisher.Mono; diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/client/TomcatWebSocketClient.java b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/client/TomcatWebSocketClient.java index 8310268db4a..72c44fc496b 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/client/TomcatWebSocketClient.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/client/TomcatWebSocketClient.java @@ -16,9 +16,8 @@ package org.springframework.web.reactive.socket.client; -import javax.websocket.Session; -import javax.websocket.WebSocketContainer; - +import jakarta.websocket.Session; +import jakarta.websocket.WebSocketContainer; import org.apache.tomcat.websocket.WsWebSocketContainer; import reactor.core.publisher.Sinks; diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/support/HandshakeWebSocketService.java b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/support/HandshakeWebSocketService.java index 9255dd6ea7f..78d6bcb8b60 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/support/HandshakeWebSocketService.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/support/HandshakeWebSocketService.java @@ -70,8 +70,6 @@ public class HandshakeWebSocketService implements WebSocketService, Lifecycle { private static final boolean jettyPresent; - private static final boolean jetty10Present; - private static final boolean undertowPresent; private static final boolean reactorNettyPresent; @@ -79,8 +77,7 @@ public class HandshakeWebSocketService implements WebSocketService, Lifecycle { static { ClassLoader loader = HandshakeWebSocketService.class.getClassLoader(); tomcatPresent = ClassUtils.isPresent("org.apache.tomcat.websocket.server.WsHttpUpgradeHandler", loader); - jettyPresent = ClassUtils.isPresent("org.eclipse.jetty.websocket.server.WebSocketServerFactory", loader); - jetty10Present = ClassUtils.isPresent("org.eclipse.jetty.websocket.server.JettyWebSocketServerContainer", loader); + jettyPresent = ClassUtils.isPresent("org.eclipse.jetty.websocket.server.JettyWebSocketServerContainer", loader); undertowPresent = ClassUtils.isPresent("io.undertow.websockets.WebSocketProtocolHandshakeHandler", loader); reactorNettyPresent = ClassUtils.isPresent("reactor.netty.http.server.HttpServerResponse", loader); } @@ -122,9 +119,6 @@ public class HandshakeWebSocketService implements WebSocketService, Lifecycle { else if (jettyPresent) { className = "JettyRequestUpgradeStrategy"; } - else if (jetty10Present) { - className = "Jetty10RequestUpgradeStrategy"; - } else if (undertowPresent) { className = "UndertowRequestUpgradeStrategy"; } diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/DefaultServerEndpointConfig.java b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/DefaultServerEndpointConfig.java index 421b16d9630..913f65cf76a 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/DefaultServerEndpointConfig.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/DefaultServerEndpointConfig.java @@ -21,16 +21,16 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.websocket.Decoder; -import javax.websocket.Encoder; -import javax.websocket.Endpoint; -import javax.websocket.Extension; -import javax.websocket.server.ServerEndpointConfig; +import jakarta.websocket.Decoder; +import jakarta.websocket.Encoder; +import jakarta.websocket.Endpoint; +import jakarta.websocket.Extension; +import jakarta.websocket.server.ServerEndpointConfig; import org.springframework.util.Assert; /** - * Default implementation of {@link javax.websocket.server.ServerEndpointConfig} + * Default implementation of {@link jakarta.websocket.server.ServerEndpointConfig} * for use in {@code RequestUpgradeStrategy} implementations. * * @author Violeta Georgieva @@ -48,7 +48,7 @@ class DefaultServerEndpointConfig extends ServerEndpointConfig.Configurator /** - * Constructor with a path and an {@code javax.websocket.Endpoint}. + * Constructor with a path and an {@code jakarta.websocket.Endpoint}. * @param path the endpoint path * @param endpoint the endpoint instance */ diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/Jetty10RequestUpgradeStrategy.java b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/Jetty10RequestUpgradeStrategy.java deleted file mode 100644 index cf5ab945817..00000000000 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/Jetty10RequestUpgradeStrategy.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright 2002-2021 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.web.reactive.socket.server.upgrade; - -import java.lang.reflect.Method; -import java.util.function.Supplier; - -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.aopalliance.intercept.MethodInterceptor; -import org.aopalliance.intercept.MethodInvocation; -import reactor.core.publisher.Mono; - -import org.springframework.aop.framework.ProxyFactory; -import org.springframework.aop.target.EmptyTargetSource; -import org.springframework.core.io.buffer.DataBufferFactory; -import org.springframework.http.server.reactive.ServerHttpRequest; -import org.springframework.http.server.reactive.ServerHttpRequestDecorator; -import org.springframework.http.server.reactive.ServerHttpResponse; -import org.springframework.http.server.reactive.ServerHttpResponseDecorator; -import org.springframework.lang.NonNull; -import org.springframework.lang.Nullable; -import org.springframework.util.Assert; -import org.springframework.util.ReflectionUtils; -import org.springframework.web.reactive.socket.HandshakeInfo; -import org.springframework.web.reactive.socket.WebSocketHandler; -import org.springframework.web.reactive.socket.adapter.ContextWebSocketHandler; -import org.springframework.web.reactive.socket.adapter.Jetty10WebSocketHandlerAdapter; -import org.springframework.web.reactive.socket.adapter.JettyWebSocketSession; -import org.springframework.web.reactive.socket.server.RequestUpgradeStrategy; -import org.springframework.web.server.ServerWebExchange; - -/** - * A {@link RequestUpgradeStrategy} for use with Jetty 10. - * - * @author Rossen Stoyanchev - * @since 5.3.4 - */ -public class Jetty10RequestUpgradeStrategy implements RequestUpgradeStrategy { - - private static final Class webSocketCreatorClass; - - private static final Method getContainerMethod; - - private static final Method upgradeMethod; - - private static final Method setAcceptedSubProtocol; - - static { - ClassLoader loader = Jetty10RequestUpgradeStrategy.class.getClassLoader(); - try { - webSocketCreatorClass = loader.loadClass("org.eclipse.jetty.websocket.server.JettyWebSocketCreator"); - - Class type = loader.loadClass("org.eclipse.jetty.websocket.server.JettyWebSocketServerContainer"); - getContainerMethod = type.getMethod("getContainer", ServletContext.class); - Method upgrade = ReflectionUtils.findMethod(type, "upgrade", (Class[]) null); - Assert.state(upgrade != null, "Upgrade method not found"); - upgradeMethod = upgrade; - - type = loader.loadClass("org.eclipse.jetty.websocket.server.JettyServerUpgradeResponse"); - setAcceptedSubProtocol = type.getMethod("setAcceptedSubProtocol", String.class); - } - catch (Exception ex) { - throw new IllegalStateException("No compatible Jetty version found", ex); - } - } - - - @Override - public Mono upgrade( - ServerWebExchange exchange, WebSocketHandler handler, - @Nullable String subProtocol, Supplier handshakeInfoFactory) { - - ServerHttpRequest request = exchange.getRequest(); - ServerHttpResponse response = exchange.getResponse(); - - HttpServletRequest servletRequest = ServerHttpRequestDecorator.getNativeRequest(request); - HttpServletResponse servletResponse = ServerHttpResponseDecorator.getNativeResponse(response); - ServletContext servletContext = servletRequest.getServletContext(); - - HandshakeInfo handshakeInfo = handshakeInfoFactory.get(); - DataBufferFactory factory = response.bufferFactory(); - - // Trigger WebFlux preCommit actions and upgrade - return exchange.getResponse().setComplete() - .then(Mono.deferContextual(contextView -> { - Jetty10WebSocketHandlerAdapter adapter = new Jetty10WebSocketHandlerAdapter( - ContextWebSocketHandler.decorate(handler, contextView), - session -> new JettyWebSocketSession(session, handshakeInfo, factory)); - - try { - Object creator = createJettyWebSocketCreator(adapter, subProtocol); - Object container = ReflectionUtils.invokeMethod(getContainerMethod, null, servletContext); - ReflectionUtils.invokeMethod(upgradeMethod, container, creator, servletRequest, servletResponse); - } - catch (Exception ex) { - return Mono.error(ex); - } - return Mono.empty(); - })); - } - - private static Object createJettyWebSocketCreator( - Jetty10WebSocketHandlerAdapter adapter, @Nullable String protocol) { - - ProxyFactory factory = new ProxyFactory(EmptyTargetSource.INSTANCE); - factory.addInterface(webSocketCreatorClass); - factory.addAdvice(new WebSocketCreatorInterceptor(adapter, protocol)); - return factory.getProxy(); - } - - - /** - * Proxy for a JettyWebSocketCreator to supply the WebSocket handler and set the sub-protocol. - */ - private static class WebSocketCreatorInterceptor implements MethodInterceptor { - - private final Jetty10WebSocketHandlerAdapter adapter; - - @Nullable - private final String protocol; - - - public WebSocketCreatorInterceptor( - Jetty10WebSocketHandlerAdapter adapter, @Nullable String protocol) { - - this.adapter = adapter; - this.protocol = protocol; - } - - @Nullable - @Override - public Object invoke(@NonNull MethodInvocation invocation) { - if (this.protocol != null) { - ReflectionUtils.invokeMethod( - setAcceptedSubProtocol, invocation.getArguments()[2], this.protocol); - } - return this.adapter; - } - } - -} diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/JettyRequestUpgradeStrategy.java b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/JettyRequestUpgradeStrategy.java index cad57bd5911..b230bb587e9 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/JettyRequestUpgradeStrategy.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/JettyRequestUpgradeStrategy.java @@ -16,26 +16,27 @@ package org.springframework.web.reactive.socket.server.upgrade; -import java.io.IOException; +import java.lang.reflect.Method; import java.util.function.Supplier; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.eclipse.jetty.websocket.api.WebSocketPolicy; -import org.eclipse.jetty.websocket.server.WebSocketServerFactory; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.aopalliance.intercept.MethodInterceptor; +import org.aopalliance.intercept.MethodInvocation; import reactor.core.publisher.Mono; -import org.springframework.context.Lifecycle; -import org.springframework.core.NamedThreadLocal; +import org.springframework.aop.framework.ProxyFactory; +import org.springframework.aop.target.EmptyTargetSource; import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpRequestDecorator; import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.http.server.reactive.ServerHttpResponseDecorator; +import org.springframework.lang.NonNull; import org.springframework.lang.Nullable; import org.springframework.util.Assert; +import org.springframework.util.ReflectionUtils; import org.springframework.web.reactive.socket.HandshakeInfo; import org.springframework.web.reactive.socket.WebSocketHandler; import org.springframework.web.reactive.socket.adapter.ContextWebSocketHandler; @@ -45,102 +46,46 @@ import org.springframework.web.reactive.socket.server.RequestUpgradeStrategy; import org.springframework.web.server.ServerWebExchange; /** - * A {@link RequestUpgradeStrategy} for use with Jetty. + * A {@link RequestUpgradeStrategy} for Jetty 11. * - * @author Violeta Georgieva * @author Rossen Stoyanchev - * @since 5.0 + * @since 5.3.4 */ -public class JettyRequestUpgradeStrategy implements RequestUpgradeStrategy, Lifecycle { - - private static final ThreadLocal adapterHolder = - new NamedThreadLocal<>("JettyWebSocketHandlerAdapter"); - - - @Nullable - private WebSocketPolicy webSocketPolicy; - - @Nullable - private WebSocketServerFactory factory; +public class JettyRequestUpgradeStrategy implements RequestUpgradeStrategy { - @Nullable - private volatile ServletContext servletContext; + private static final Class webSocketCreatorClass; - private volatile boolean running; + private static final Method getContainerMethod; - private final Object lifecycleMonitor = new Object(); + private static final Method upgradeMethod; + private static final Method setAcceptedSubProtocol; - /** - * Configure a {@link WebSocketPolicy} to use to initialize - * {@link WebSocketServerFactory}. - * @param webSocketPolicy the WebSocket settings - */ - public void setWebSocketPolicy(WebSocketPolicy webSocketPolicy) { - this.webSocketPolicy = webSocketPolicy; - } + static { + // TODO: can switch to non-reflective implementation now - /** - * Return the configured {@link WebSocketPolicy}, if any. - */ - @Nullable - public WebSocketPolicy getWebSocketPolicy() { - return this.webSocketPolicy; - } + ClassLoader loader = JettyRequestUpgradeStrategy.class.getClassLoader(); + try { + webSocketCreatorClass = loader.loadClass("org.eclipse.jetty.websocket.server.JettyWebSocketCreator"); + Class type = loader.loadClass("org.eclipse.jetty.websocket.server.JettyWebSocketServerContainer"); + getContainerMethod = type.getMethod("getContainer", ServletContext.class); + Method upgrade = ReflectionUtils.findMethod(type, "upgrade", (Class[]) null); + Assert.state(upgrade != null, "Upgrade method not found"); + upgradeMethod = upgrade; - @Override - public void start() { - synchronized (this.lifecycleMonitor) { - ServletContext servletContext = this.servletContext; - if (!isRunning() && servletContext != null) { - try { - this.factory = (this.webSocketPolicy != null ? - new WebSocketServerFactory(servletContext, this.webSocketPolicy) : - new WebSocketServerFactory(servletContext)); - this.factory.setCreator((request, response) -> { - WebSocketHandlerContainer container = adapterHolder.get(); - String protocol = container.getProtocol(); - if (protocol != null) { - response.setAcceptedSubProtocol(protocol); - } - return container.getAdapter(); - }); - this.factory.start(); - this.running = true; - } - catch (Throwable ex) { - throw new IllegalStateException("Unable to start WebSocketServerFactory", ex); - } - } + type = loader.loadClass("org.eclipse.jetty.websocket.server.JettyServerUpgradeResponse"); + setAcceptedSubProtocol = type.getMethod("setAcceptedSubProtocol", String.class); } - } - - @Override - public void stop() { - synchronized (this.lifecycleMonitor) { - if (isRunning()) { - if (this.factory != null) { - try { - this.factory.stop(); - this.running = false; - } - catch (Throwable ex) { - throw new IllegalStateException("Failed to stop WebSocketServerFactory", ex); - } - } - } + catch (Exception ex) { + throw new IllegalStateException("No compatible Jetty version found", ex); } } - @Override - public boolean isRunning() { - return this.running; - } - @Override - public Mono upgrade(ServerWebExchange exchange, WebSocketHandler handler, + public Mono upgrade( + ServerWebExchange exchange, WebSocketHandler handler, @Nullable String subProtocol, Supplier handshakeInfoFactory) { ServerHttpRequest request = exchange.getRequest(); @@ -148,16 +93,11 @@ public class JettyRequestUpgradeStrategy implements RequestUpgradeStrategy, Life HttpServletRequest servletRequest = ServerHttpRequestDecorator.getNativeRequest(request); HttpServletResponse servletResponse = ServerHttpResponseDecorator.getNativeResponse(response); + ServletContext servletContext = servletRequest.getServletContext(); HandshakeInfo handshakeInfo = handshakeInfoFactory.get(); DataBufferFactory factory = response.bufferFactory(); - startLazily(servletRequest); - - Assert.state(this.factory != null, "No WebSocketServerFactory available"); - boolean isUpgrade = this.factory.isUpgradeRequest(servletRequest, servletResponse); - Assert.isTrue(isUpgrade, "Not a WebSocket handshake"); - // Trigger WebFlux preCommit actions and upgrade return exchange.getResponse().setComplete() .then(Mono.deferContextual(contextView -> { @@ -166,51 +106,53 @@ public class JettyRequestUpgradeStrategy implements RequestUpgradeStrategy, Life session -> new JettyWebSocketSession(session, handshakeInfo, factory)); try { - adapterHolder.set(new WebSocketHandlerContainer(adapter, subProtocol)); - this.factory.acceptWebSocket(servletRequest, servletResponse); + Object creator = createJettyWebSocketCreator(adapter, subProtocol); + Object container = ReflectionUtils.invokeMethod(getContainerMethod, null, servletContext); + ReflectionUtils.invokeMethod(upgradeMethod, container, creator, servletRequest, servletResponse); } - catch (IOException ex) { + catch (Exception ex) { return Mono.error(ex); } - finally { - adapterHolder.remove(); - } return Mono.empty(); })); } - private void startLazily(HttpServletRequest request) { - if (isRunning()) { - return; - } - synchronized (this.lifecycleMonitor) { - if (!isRunning()) { - this.servletContext = request.getServletContext(); - start(); - } - } + private static Object createJettyWebSocketCreator( + JettyWebSocketHandlerAdapter adapter, @Nullable String protocol) { + + ProxyFactory factory = new ProxyFactory(EmptyTargetSource.INSTANCE); + factory.addInterface(webSocketCreatorClass); + factory.addAdvice(new WebSocketCreatorInterceptor(adapter, protocol)); + return factory.getProxy(); } - private static class WebSocketHandlerContainer { + /** + * Proxy for a JettyWebSocketCreator to supply the WebSocket handler and set the sub-protocol. + */ + private static class WebSocketCreatorInterceptor implements MethodInterceptor { private final JettyWebSocketHandlerAdapter adapter; @Nullable private final String protocol; - public WebSocketHandlerContainer(JettyWebSocketHandlerAdapter adapter, @Nullable String protocol) { + + public WebSocketCreatorInterceptor( + JettyWebSocketHandlerAdapter adapter, @Nullable String protocol) { + this.adapter = adapter; this.protocol = protocol; } - public JettyWebSocketHandlerAdapter getAdapter() { - return this.adapter; - } - @Nullable - public String getProtocol() { - return this.protocol; + @Override + public Object invoke(@NonNull MethodInvocation invocation) { + if (this.protocol != null) { + ReflectionUtils.invokeMethod( + setAcceptedSubProtocol, invocation.getArguments()[2], this.protocol); + } + return this.adapter; } } diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/TomcatRequestUpgradeStrategy.java b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/TomcatRequestUpgradeStrategy.java index f918410dd5e..001f85cbca3 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/TomcatRequestUpgradeStrategy.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/TomcatRequestUpgradeStrategy.java @@ -19,11 +19,10 @@ package org.springframework.web.reactive.socket.server.upgrade; import java.util.Collections; import java.util.function.Supplier; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.websocket.Endpoint; -import javax.websocket.server.ServerContainer; - +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.websocket.Endpoint; +import jakarta.websocket.server.ServerContainer; import org.apache.tomcat.websocket.server.WsServerContainer; import reactor.core.publisher.Mono; @@ -51,7 +50,7 @@ import org.springframework.web.server.ServerWebExchange; */ public class TomcatRequestUpgradeStrategy implements RequestUpgradeStrategy { - private static final String SERVER_CONTAINER_ATTR = "javax.websocket.server.ServerContainer"; + private static final String SERVER_CONTAINER_ATTR = "jakarta.websocket.server.ServerContainer"; @Nullable @@ -72,7 +71,7 @@ public class TomcatRequestUpgradeStrategy implements RequestUpgradeStrategy { /** * Exposes the underlying config option on - * {@link javax.websocket.server.ServerContainer#setAsyncSendTimeout(long)}. + * {@link jakarta.websocket.server.ServerContainer#setAsyncSendTimeout(long)}. */ public void setAsyncSendTimeout(Long timeoutInMillis) { this.asyncSendTimeout = timeoutInMillis; @@ -85,7 +84,7 @@ public class TomcatRequestUpgradeStrategy implements RequestUpgradeStrategy { /** * Exposes the underlying config option on - * {@link javax.websocket.server.ServerContainer#setDefaultMaxSessionIdleTimeout(long)}. + * {@link jakarta.websocket.server.ServerContainer#setDefaultMaxSessionIdleTimeout(long)}. */ public void setMaxSessionIdleTimeout(Long timeoutInMillis) { this.maxSessionIdleTimeout = timeoutInMillis; @@ -98,7 +97,7 @@ public class TomcatRequestUpgradeStrategy implements RequestUpgradeStrategy { /** * Exposes the underlying config option on - * {@link javax.websocket.server.ServerContainer#setDefaultMaxTextMessageBufferSize(int)}. + * {@link jakarta.websocket.server.ServerContainer#setDefaultMaxTextMessageBufferSize(int)}. */ public void setMaxTextMessageBufferSize(Integer bufferSize) { this.maxTextMessageBufferSize = bufferSize; @@ -111,7 +110,7 @@ public class TomcatRequestUpgradeStrategy implements RequestUpgradeStrategy { /** * Exposes the underlying config option on - * {@link javax.websocket.server.ServerContainer#setDefaultMaxBinaryMessageBufferSize(int)}. + * {@link jakarta.websocket.server.ServerContainer#setDefaultMaxBinaryMessageBufferSize(int)}. */ public void setMaxBinaryMessageBufferSize(Integer bufferSize) { this.maxBinaryMessageBufferSize = bufferSize; @@ -163,7 +162,7 @@ public class TomcatRequestUpgradeStrategy implements RequestUpgradeStrategy { if (this.serverContainer == null) { Object container = request.getServletContext().getAttribute(SERVER_CONTAINER_ATTR); Assert.state(container instanceof WsServerContainer, - "ServletContext attribute 'javax.websocket.server.ServerContainer' not found."); + "ServletContext attribute 'jakarta.websocket.server.ServerContainer' not found."); this.serverContainer = (WsServerContainer) container; initServerContainer(this.serverContainer); } diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/config/WebFluxConfigurationSupportTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/config/WebFluxConfigurationSupportTests.java index 059b7779e74..57105eb973b 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/config/WebFluxConfigurationSupportTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/config/WebFluxConfigurationSupportTests.java @@ -23,9 +23,8 @@ import java.util.Collections; import java.util.List; import java.util.Map; -import javax.xml.bind.annotation.XmlRootElement; - import com.google.protobuf.Message; +import jakarta.xml.bind.annotation.XmlRootElement; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContext; diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/function/BodyExtractorsTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/function/BodyExtractorsTests.java index bf1e58c2e5d..63ab4782fe0 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/function/BodyExtractorsTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/function/BodyExtractorsTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2020 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -51,11 +51,11 @@ import org.springframework.http.codec.DecoderHttpMessageReader; import org.springframework.http.codec.FormHttpMessageReader; import org.springframework.http.codec.HttpMessageReader; import org.springframework.http.codec.json.Jackson2JsonDecoder; +import org.springframework.http.codec.multipart.DefaultPartHttpMessageReader; import org.springframework.http.codec.multipart.FilePart; import org.springframework.http.codec.multipart.FormFieldPart; import org.springframework.http.codec.multipart.MultipartHttpMessageReader; import org.springframework.http.codec.multipart.Part; -import org.springframework.http.codec.multipart.SynchronossPartHttpMessageReader; import org.springframework.http.codec.xml.Jaxb2XmlDecoder; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpResponse; @@ -89,7 +89,7 @@ public class BodyExtractorsTests { messageReaders.add(new DecoderHttpMessageReader<>(new Jaxb2XmlDecoder())); messageReaders.add(new DecoderHttpMessageReader<>(new Jackson2JsonDecoder())); messageReaders.add(new FormHttpMessageReader()); - SynchronossPartHttpMessageReader partReader = new SynchronossPartHttpMessageReader(); + DefaultPartHttpMessageReader partReader = new DefaultPartHttpMessageReader(); messageReaders.add(partReader); messageReaders.add(new MultipartHttpMessageReader(partReader)); diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/MessageReaderArgumentResolverTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/MessageReaderArgumentResolverTests.java index 7d06e637b6b..9a5f7302166 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/MessageReaderArgumentResolverTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/MessageReaderArgumentResolverTests.java @@ -27,12 +27,11 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.CompletableFuture; -import javax.xml.bind.annotation.XmlRootElement; - import io.reactivex.rxjava3.core.Flowable; import io.reactivex.rxjava3.core.Maybe; import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.Single; +import jakarta.xml.bind.annotation.XmlRootElement; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import reactor.core.publisher.Flux; diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ModelAttributeMethodArgumentResolverTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ModelAttributeMethodArgumentResolverTests.java index 514dd48d955..0d6f7719426 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ModelAttributeMethodArgumentResolverTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ModelAttributeMethodArgumentResolverTests.java @@ -21,9 +21,8 @@ import java.time.Duration; import java.util.Map; import java.util.function.Function; -import javax.validation.constraints.NotEmpty; - import io.reactivex.rxjava3.core.Single; +import jakarta.validation.constraints.NotEmpty; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import reactor.core.publisher.Mono; diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestMappingMessageConversionIntegrationTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestMappingMessageConversionIntegrationTests.java index 5472eca8f6b..e97d9b03b43 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestMappingMessageConversionIntegrationTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestMappingMessageConversionIntegrationTests.java @@ -23,14 +23,13 @@ import java.util.Collections; import java.util.List; import java.util.concurrent.CompletableFuture; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - import io.reactivex.rxjava3.core.Completable; import io.reactivex.rxjava3.core.Flowable; import io.reactivex.rxjava3.core.Maybe; import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.Single; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import org.reactivestreams.Publisher; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; diff --git a/spring-webmvc/spring-webmvc.gradle b/spring-webmvc/spring-webmvc.gradle index 99e70f68f62..cb8bd88e583 100644 --- a/spring-webmvc/spring-webmvc.gradle +++ b/spring-webmvc/spring-webmvc.gradle @@ -9,14 +9,14 @@ dependencies { api(project(":spring-core")) api(project(":spring-expression")) api(project(":spring-web")) - compileOnly("javax.servlet:javax.servlet-api") + compileOnly("jakarta.servlet:jakarta.servlet-api") compileOnly("com.google.code.findbugs:findbugs") // for groovy-templates optional(project(":spring-context-support")) // for FreeMarker support optional(project(":spring-oxm")) - optional("javax.servlet.jsp:javax.servlet.jsp-api") - optional("javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api") - optional("javax.el:javax.el-api") - optional("javax.xml.bind:jaxb-api") + optional("jakarta.servlet.jsp:jakarta.servlet.jsp-api") + optional("jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api") + optional("jakarta.el:jakarta.el-api") + optional("jakarta.xml.bind:jakarta.xml.bind-api") optional("org.webjars:webjars-locator-core") optional("com.rometools:rome") optional("com.github.librepdf:openpdf") @@ -26,12 +26,6 @@ dependencies { optional("com.fasterxml.jackson.dataformat:jackson-dataformat-xml") optional("com.fasterxml.jackson.dataformat:jackson-dataformat-smile") optional("com.fasterxml.jackson.dataformat:jackson-dataformat-cbor") - optional("org.apache.tiles:tiles-api") - optional("org.apache.tiles:tiles-core") - optional("org.apache.tiles:tiles-servlet") - optional("org.apache.tiles:tiles-jsp") - optional("org.apache.tiles:tiles-el") - optional("org.apache.tiles:tiles-extras") optional("org.codehaus.groovy:groovy-templates") optional("org.jetbrains.kotlin:kotlin-reflect") optional("org.jetbrains.kotlin:kotlin-stdlib") @@ -41,24 +35,22 @@ dependencies { testImplementation(testFixtures(project(":spring-core"))) testImplementation(testFixtures(project(":spring-context"))) testImplementation(testFixtures(project(":spring-web"))) - testImplementation("javax.servlet:javax.servlet-api") + testImplementation("jakarta.servlet:jakarta.servlet-api") testImplementation("org.eclipse.jetty:jetty-servlet") { - exclude group: "javax.servlet", module: "javax.servlet" + exclude group: "jakarta.servlet", module: "jakarta.servlet-api" } testImplementation("org.eclipse.jetty:jetty-server") { - exclude group: "javax.servlet", module: "javax.servlet" + exclude group: "jakarta.servlet", module: "jakarta.servlet-api" } testImplementation("org.apache.httpcomponents:httpclient") - testImplementation("commons-fileupload:commons-fileupload") testImplementation("commons-io:commons-io") - testImplementation("joda-time:joda-time") testImplementation("org.mozilla:rhino") testImplementation("org.dom4j:dom4j") testImplementation("jaxen:jaxen") testImplementation("org.xmlunit:xmlunit-assertj") testImplementation("org.xmlunit:xmlunit-matchers") testImplementation("org.hibernate:hibernate-validator") - testImplementation("javax.validation:validation-api") + testImplementation("jakarta.validation:jakarta.validation-api") testImplementation("io.projectreactor:reactor-core") testImplementation("io.reactivex.rxjava3:rxjava") testImplementation("org.jetbrains.kotlin:kotlin-script-runtime") @@ -66,8 +58,8 @@ dependencies { testRuntimeOnly("org.jruby:jruby") testRuntimeOnly("org.python:jython-standalone") testRuntimeOnly("org.webjars:underscorejs") - testRuntimeOnly("org.glassfish:javax.el") + testRuntimeOnly("org.glassfish:jakarta.el") testRuntimeOnly("com.sun.xml.bind:jaxb-core") testRuntimeOnly("com.sun.xml.bind:jaxb-impl") - testRuntimeOnly("com.sun.activation:javax.activation") + testRuntimeOnly("com.sun.activation:jakarta.activation") } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/AsyncHandlerInterceptor.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/AsyncHandlerInterceptor.java index c3e1828e9f1..054a727baf2 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/AsyncHandlerInterceptor.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/AsyncHandlerInterceptor.java @@ -16,8 +16,8 @@ package org.springframework.web.servlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.web.method.HandlerMethod; @@ -38,7 +38,7 @@ import org.springframework.web.method.HandlerMethod; * invokes {@code preHandle}, {@code postHandle}, and {@code afterCompletion}. * To distinguish between the initial request and the subsequent dispatch * after asynchronous handling completes, interceptors can check whether the - * {@code javax.servlet.DispatcherType} of {@link javax.servlet.ServletRequest} + * {@code jakarta.servlet.DispatcherType} of {@link jakarta.servlet.ServletRequest} * is {@code "REQUEST"} or {@code "ASYNC"}. * *

    Note that {@code HandlerInterceptor} implementations may need to do work diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/DispatcherServlet.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/DispatcherServlet.java index 5be28f3e13e..45ee3a9bc51 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/DispatcherServlet.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/DispatcherServlet.java @@ -30,12 +30,11 @@ import java.util.Properties; import java.util.Set; import java.util.stream.Collectors; -import javax.servlet.DispatcherType; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.DispatcherType; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -1220,7 +1219,7 @@ public class DispatcherServlet extends FrameworkServlet { } /** - * Check "javax.servlet.error.exception" attribute for a multipart exception. + * Check "jakarta.servlet.error.exception" attribute for a multipart exception. */ private boolean hasMultipartException(HttpServletRequest request) { Throwable error = (Throwable) request.getAttribute(WebUtils.ERROR_EXCEPTION_ATTRIBUTE); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/FlashMapManager.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/FlashMapManager.java index 2632d6710be..921e1d8e7b0 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/FlashMapManager.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/FlashMapManager.java @@ -16,8 +16,8 @@ package org.springframework.web.servlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/FrameworkServlet.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/FrameworkServlet.java index 40e1d1030e9..ea0f3043185 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/FrameworkServlet.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/FrameworkServlet.java @@ -24,12 +24,12 @@ import java.util.List; import java.util.concurrent.Callable; import java.util.stream.Collectors; -import javax.servlet.DispatcherType; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpServletResponseWrapper; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponseWrapper; import org.springframework.beans.BeanUtils; import org.springframework.context.ApplicationContext; @@ -443,7 +443,7 @@ public abstract class FrameworkServlet extends HttpServletBean implements Applic * Set whether this servlet should dispatch an HTTP OPTIONS request to * the {@link #doService} method. *

    Default in the {@code FrameworkServlet} is "false", applying - * {@link javax.servlet.http.HttpServlet}'s default behavior (i.e.enumerating + * {@link jakarta.servlet.http.HttpServlet}'s default behavior (i.e.enumerating * all standard HTTP request methods as a response to the OPTIONS request). * Note however that as of 4.3 the {@code DispatcherServlet} sets this * property to "true" by default due to its built-in support for OPTIONS. @@ -462,7 +462,7 @@ public abstract class FrameworkServlet extends HttpServletBean implements Applic /** * Set whether this servlet should dispatch an HTTP TRACE request to * the {@link #doService} method. - *

    Default is "false", applying {@link javax.servlet.http.HttpServlet}'s + *

    Default is "false", applying {@link jakarta.servlet.http.HttpServlet}'s * default behavior (i.e. reflecting the message received back to the client). *

    Turn this flag on if you prefer TRACE requests to go through the * regular dispatching chain, just like other HTTP requests. This usually @@ -1153,7 +1153,7 @@ public abstract class FrameworkServlet extends HttpServletBean implements Applic * Can be overridden in subclasses. * @param request current HTTP request * @return the username, or {@code null} if none found - * @see javax.servlet.http.HttpServletRequest#getUserPrincipal() + * @see jakarta.servlet.http.HttpServletRequest#getUserPrincipal() */ @Nullable protected String getUsernameForRequest(HttpServletRequest request) { @@ -1172,8 +1172,8 @@ public abstract class FrameworkServlet extends HttpServletBean implements Applic * @param request current HTTP request * @param response current HTTP response * @throws Exception in case of any kind of processing failure - * @see javax.servlet.http.HttpServlet#doGet - * @see javax.servlet.http.HttpServlet#doPost + * @see jakarta.servlet.http.HttpServlet#doGet + * @see jakarta.servlet.http.HttpServlet#doPost */ protected abstract void doService(HttpServletRequest request, HttpServletResponse response) throws Exception; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/HandlerAdapter.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/HandlerAdapter.java index cd43bdce5b1..a29e8bf0a14 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/HandlerAdapter.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/HandlerAdapter.java @@ -16,8 +16,8 @@ package org.springframework.web.servlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/HandlerExceptionResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/HandlerExceptionResolver.java index 3fef242dea1..e6f446bb7cd 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/HandlerExceptionResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/HandlerExceptionResolver.java @@ -16,8 +16,8 @@ package org.springframework.web.servlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/HandlerExecutionChain.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/HandlerExecutionChain.java index be69a0bf936..76f5cb35771 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/HandlerExecutionChain.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/HandlerExecutionChain.java @@ -21,9 +21,8 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/HandlerInterceptor.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/HandlerInterceptor.java index 09f126c747e..d904cb6d254 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/HandlerInterceptor.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/HandlerInterceptor.java @@ -16,8 +16,8 @@ package org.springframework.web.servlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.lang.Nullable; import org.springframework.web.method.HandlerMethod; @@ -70,7 +70,7 @@ import org.springframework.web.method.HandlerMethod; * @see org.springframework.web.servlet.handler.UserRoleAuthorizationInterceptor * @see org.springframework.web.servlet.i18n.LocaleChangeInterceptor * @see org.springframework.web.servlet.theme.ThemeChangeInterceptor - * @see javax.servlet.Filter + * @see jakarta.servlet.Filter */ public interface HandlerInterceptor { diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/HandlerMapping.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/HandlerMapping.java index 10525089372..0a64002f018 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/HandlerMapping.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/HandlerMapping.java @@ -16,8 +16,8 @@ package org.springframework.web.servlet; -import javax.servlet.ServletRequest; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/HttpServletBean.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/HttpServletBean.java index ccd87dba220..1d4766cab34 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/HttpServletBean.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/HttpServletBean.java @@ -20,10 +20,9 @@ import java.util.Enumeration; import java.util.HashSet; import java.util.Set; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; - +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -48,7 +47,7 @@ import org.springframework.web.context.support.ServletContextResourceLoader; import org.springframework.web.context.support.StandardServletEnvironment; /** - * Simple extension of {@link javax.servlet.http.HttpServlet} which treats + * Simple extension of {@link jakarta.servlet.http.HttpServlet} which treats * its config parameters ({@code init-param} entries within the * {@code servlet} tag in {@code web.xml}) as bean properties. * diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/LocaleContextResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/LocaleContextResolver.java index a51e6f4255f..0140cf192ba 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/LocaleContextResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/LocaleContextResolver.java @@ -18,8 +18,8 @@ package org.springframework.web.servlet; import java.util.Locale; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.context.i18n.LocaleContext; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/LocaleResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/LocaleResolver.java index fd0c651f84a..0a6e99c8ff9 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/LocaleResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/LocaleResolver.java @@ -18,8 +18,8 @@ package org.springframework.web.servlet; import java.util.Locale; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/ModelAndViewDefiningException.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/ModelAndViewDefiningException.java index 63e337c61c2..73f4ee3a9c0 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/ModelAndViewDefiningException.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/ModelAndViewDefiningException.java @@ -16,7 +16,7 @@ package org.springframework.web.servlet; -import javax.servlet.ServletException; +import jakarta.servlet.ServletException; import org.springframework.util.Assert; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/NoHandlerFoundException.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/NoHandlerFoundException.java index e33c262f2c6..64413cd4096 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/NoHandlerFoundException.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/NoHandlerFoundException.java @@ -16,9 +16,9 @@ package org.springframework.web.servlet; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.http.HttpHeaders; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/RequestToViewNameTranslator.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/RequestToViewNameTranslator.java index 5206cc5c8cf..df95379987c 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/RequestToViewNameTranslator.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/RequestToViewNameTranslator.java @@ -16,13 +16,13 @@ package org.springframework.web.servlet; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.lang.Nullable; /** * Strategy interface for translating an incoming - * {@link javax.servlet.http.HttpServletRequest} into a + * {@link jakarta.servlet.http.HttpServletRequest} into a * logical view name when no view name is explicitly supplied. * * @author Rob Harrop diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/ThemeResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/ThemeResolver.java index 61bcfd83cdc..f38dd8081ce 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/ThemeResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/ThemeResolver.java @@ -16,8 +16,8 @@ package org.springframework.web.servlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/View.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/View.java index f59cd054d36..3d8bb3c3697 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/View.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/View.java @@ -18,8 +18,8 @@ package org.springframework.web.servlet; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java index 21d15bd8953..2684d24e5ea 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java @@ -178,9 +178,9 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { static { ClassLoader classLoader = AnnotationDrivenBeanDefinitionParser.class.getClassLoader(); - javaxValidationPresent = ClassUtils.isPresent("javax.validation.Validator", classLoader); + javaxValidationPresent = ClassUtils.isPresent("jakarta.validation.Validator", classLoader); romePresent = ClassUtils.isPresent("com.rometools.rome.feed.WireFeed", classLoader); - jaxb2Present = ClassUtils.isPresent("javax.xml.bind.Binder", classLoader); + jaxb2Present = ClassUtils.isPresent("jakarta.xml.bind.Binder", classLoader); jackson2Present = ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", classLoader) && ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", classLoader); jackson2XmlPresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.xml.XmlMapper", classLoader); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/MvcNamespaceHandler.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/MvcNamespaceHandler.java index fd7660f58c7..8f08e691c8b 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/MvcNamespaceHandler.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/MvcNamespaceHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -39,7 +39,6 @@ public class MvcNamespaceHandler extends NamespaceHandlerSupport { registerBeanDefinitionParser("redirect-view-controller", new ViewControllerBeanDefinitionParser()); registerBeanDefinitionParser("status-controller", new ViewControllerBeanDefinitionParser()); registerBeanDefinitionParser("view-resolvers", new ViewResolversBeanDefinitionParser()); - registerBeanDefinitionParser("tiles-configurer", new TilesConfigurerBeanDefinitionParser()); registerBeanDefinitionParser("freemarker-configurer", new FreeMarkerConfigurerBeanDefinitionParser()); registerBeanDefinitionParser("groovy-configurer", new GroovyMarkupConfigurerBeanDefinitionParser()); registerBeanDefinitionParser("script-template-configurer", new ScriptTemplateConfigurerBeanDefinitionParser()); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/TilesConfigurerBeanDefinitionParser.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/TilesConfigurerBeanDefinitionParser.java deleted file mode 100644 index 3c5aa27645b..00000000000 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/TilesConfigurerBeanDefinitionParser.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright 2002-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.web.servlet.config; - -import java.util.ArrayList; -import java.util.List; - -import org.w3c.dom.Element; - -import org.springframework.beans.factory.support.AbstractBeanDefinition; -import org.springframework.beans.factory.support.BeanDefinitionBuilder; -import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser; -import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.util.StringUtils; -import org.springframework.util.xml.DomUtils; - -/** - * Parse the <mvc:tiles-configurer> MVC namespace element and register - * a corresponding {@code TilesConfigurer} bean. - * - * @author Rossen Stoyanchev - * @author Juergen Hoeller - * @since 4.1 - */ -public class TilesConfigurerBeanDefinitionParser extends AbstractSingleBeanDefinitionParser { - - /** - * The bean name used for the {@code TilesConfigurer}. - */ - public static final String BEAN_NAME = "mvcTilesConfigurer"; - - - @Override - protected String getBeanClassName(Element element) { - return "org.springframework.web.servlet.view.tiles3.TilesConfigurer"; - } - - @Override - protected String resolveId(Element element, AbstractBeanDefinition definition, ParserContext parserContext) { - return BEAN_NAME; - } - - @Override - protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { - List childElements = DomUtils.getChildElementsByTagName(element, "definitions"); - if (!childElements.isEmpty()) { - List locations = new ArrayList<>(childElements.size()); - for (Element childElement : childElements) { - locations.add(childElement.getAttribute("location")); - } - builder.addPropertyValue("definitions", StringUtils.toStringArray(locations)); - } - if (element.hasAttribute("check-refresh")) { - builder.addPropertyValue("checkRefresh", element.getAttribute("check-refresh")); - } - if (element.hasAttribute("validate-definitions")) { - builder.addPropertyValue("validateDefinitions", element.getAttribute("validate-definitions")); - } - if (element.hasAttribute("definitions-factory")) { - builder.addPropertyValue("definitionsFactoryClass", element.getAttribute("definitions-factory")); - } - if (element.hasAttribute("preparer-factory")) { - builder.addPropertyValue("preparerFactoryClass", element.getAttribute("preparer-factory")); - } - } - -} diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/ViewResolversBeanDefinitionParser.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/ViewResolversBeanDefinitionParser.java index d9693b2f3e0..421d7c182c6 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/ViewResolversBeanDefinitionParser.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/ViewResolversBeanDefinitionParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -37,7 +37,6 @@ import org.springframework.web.servlet.view.ViewResolverComposite; import org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver; import org.springframework.web.servlet.view.groovy.GroovyMarkupViewResolver; import org.springframework.web.servlet.view.script.ScriptTemplateViewResolver; -import org.springframework.web.servlet.view.tiles3.TilesViewResolver; /** * Parse the {@code view-resolvers} MVC namespace element and register @@ -92,10 +91,6 @@ public class ViewResolversBeanDefinitionParser implements BeanDefinitionParser { resolverBeanDef.getPropertyValues().add("suffix", ".jsp"); addUrlBasedViewResolverProperties(resolverElement, resolverBeanDef); } - else if ("tiles".equals(name)) { - resolverBeanDef = new RootBeanDefinition(TilesViewResolver.class); - addUrlBasedViewResolverProperties(resolverElement, resolverBeanDef); - } else if ("freemarker".equals(name)) { resolverBeanDef = new RootBeanDefinition(FreeMarkerViewResolver.class); resolverBeanDef.getPropertyValues().add("suffix", ".ftl"); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/ContentNegotiationConfigurer.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/ContentNegotiationConfigurer.java index 6f5d1d3b310..7e4d475aa8c 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/ContentNegotiationConfigurer.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/ContentNegotiationConfigurer.java @@ -21,7 +21,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import org.springframework.http.MediaType; import org.springframework.http.MediaTypeFactory; @@ -102,7 +102,7 @@ public class ContentNegotiationConfigurer { /** - * Class constructor with {@link javax.servlet.ServletContext}. + * Class constructor with {@link jakarta.servlet.ServletContext}. */ public ContentNegotiationConfigurer(@Nullable ServletContext servletContext) { if (servletContext != null) { diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/DefaultServletHandlerConfigurer.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/DefaultServletHandlerConfigurer.java index fff78a82c71..752febb4082 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/DefaultServletHandlerConfigurer.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/DefaultServletHandlerConfigurer.java @@ -18,7 +18,7 @@ package org.springframework.web.servlet.config.annotation; import java.util.Collections; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import org.springframework.core.Ordered; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/ResourceHandlerRegistry.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/ResourceHandlerRegistry.java index ba710151595..54ff13fc562 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/ResourceHandlerRegistry.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/ResourceHandlerRegistry.java @@ -22,7 +22,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import org.springframework.beans.factory.BeanInitializationException; import org.springframework.context.ApplicationContext; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/ViewResolverRegistry.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/ViewResolverRegistry.java index cf740c31690..87c414d2779 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/ViewResolverRegistry.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/ViewResolverRegistry.java @@ -40,8 +40,6 @@ import org.springframework.web.servlet.view.groovy.GroovyMarkupConfigurer; import org.springframework.web.servlet.view.groovy.GroovyMarkupViewResolver; import org.springframework.web.servlet.view.script.ScriptTemplateConfigurer; import org.springframework.web.servlet.view.script.ScriptTemplateViewResolver; -import org.springframework.web.servlet.view.tiles3.TilesConfigurer; -import org.springframework.web.servlet.view.tiles3.TilesViewResolver; /** * Assist with the configuration of a chain of @@ -165,22 +163,6 @@ public class ViewResolverRegistry { return new UrlBasedViewResolverRegistration(resolver); } - /** - * Register Tiles 3.x view resolver. - *

    Note that you must also configure Tiles by adding a - * {@link org.springframework.web.servlet.view.tiles3.TilesConfigurer} bean. - */ - public UrlBasedViewResolverRegistration tiles() { - if (!checkBeanOfType(TilesConfigurer.class)) { - throw new BeanInitializationException("In addition to a Tiles view resolver " + - "there must also be a single TilesConfigurer bean in this web application context " + - "(or its parent)."); - } - TilesRegistration registration = new TilesRegistration(); - this.viewResolvers.add(registration.getViewResolver()); - return registration; - } - /** * Register a FreeMarker view resolver with an empty default view name * prefix and a default suffix of ".ftl". @@ -292,13 +274,6 @@ public class ViewResolverRegistry { } - private static class TilesRegistration extends UrlBasedViewResolverRegistration { - - public TilesRegistration() { - super(new TilesViewResolver()); - } - } - private static class FreeMarkerRegistration extends UrlBasedViewResolverRegistration { public FreeMarkerRegistration() { diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java index e0e91bf8d32..7afe6a07a9b 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java @@ -23,7 +23,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.BeanFactoryUtils; @@ -218,14 +218,14 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv static { ClassLoader classLoader = WebMvcConfigurationSupport.class.getClassLoader(); romePresent = ClassUtils.isPresent("com.rometools.rome.feed.WireFeed", classLoader); - jaxb2Present = ClassUtils.isPresent("javax.xml.bind.Binder", classLoader); + jaxb2Present = ClassUtils.isPresent("jakarta.xml.bind.Binder", classLoader); jackson2Present = ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", classLoader) && ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", classLoader); jackson2XmlPresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.xml.XmlMapper", classLoader); jackson2SmilePresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.smile.SmileFactory", classLoader); jackson2CborPresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.cbor.CBORFactory", classLoader); gsonPresent = ClassUtils.isPresent("com.google.gson.Gson", classLoader); - jsonbPresent = ClassUtils.isPresent("javax.json.bind.Jsonb", classLoader); + jsonbPresent = ClassUtils.isPresent("jakarta.json.bind.Jsonb", classLoader); kotlinSerializationJsonPresent = ClassUtils.isPresent("kotlinx.serialization.json.Json", classLoader); } @@ -279,7 +279,7 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv } /** - * Set the {@link javax.servlet.ServletContext}, e.g. for resource handling, + * Set the {@link jakarta.servlet.ServletContext}, e.g. for resource handling, * looking up file extensions, etc. */ @Override @@ -288,7 +288,7 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv } /** - * Return the associated {@link javax.servlet.ServletContext}. + * Return the associated {@link jakarta.servlet.ServletContext}. * @since 4.2 */ @Nullable @@ -774,7 +774,7 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv public Validator mvcValidator() { Validator validator = getValidator(); if (validator == null) { - if (ClassUtils.isPresent("javax.validation.Validator", getClass().getClassLoader())) { + if (ClassUtils.isPresent("jakarta.validation.Validator", getClass().getClassLoader())) { Class clazz; try { String className = "org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean"; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/AbstractServerResponse.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/AbstractServerResponse.java index d191c05c298..a35571fdf22 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/AbstractServerResponse.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/AbstractServerResponse.java @@ -21,10 +21,10 @@ import java.util.Collection; import java.util.EnumSet; import java.util.Set; -import javax.servlet.ServletException; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultAsyncServerResponse.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultAsyncServerResponse.java index e720174b37e..73e91e507ba 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultAsyncServerResponse.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultAsyncServerResponse.java @@ -25,11 +25,10 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.function.Function; -import javax.servlet.ServletException; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.ServletException; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.reactivestreams.Publisher; import org.springframework.core.ReactiveAdapter; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultEntityResponseBuilder.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultEntityResponseBuilder.java index fedfe2d4a40..cf674214be4 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultEntityResponseBuilder.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultEntityResponseBuilder.java @@ -30,12 +30,11 @@ import java.util.concurrent.CompletionStage; import java.util.function.Consumer; import java.util.stream.Collectors; -import javax.servlet.ServletException; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpServletResponseWrapper; - +import jakarta.servlet.ServletException; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponseWrapper; import org.reactivestreams.Publisher; import org.reactivestreams.Subscriber; import org.reactivestreams.Subscription; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultRenderingResponseBuilder.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultRenderingResponseBuilder.java index 8b6a4faa140..db34f733cf5 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultRenderingResponseBuilder.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultRenderingResponseBuilder.java @@ -23,9 +23,9 @@ import java.util.LinkedHashMap; import java.util.Map; import java.util.function.Consumer; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.core.Conventions; import org.springframework.http.HttpHeaders; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerRequest.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerRequest.java index 26f76e7ca0a..5d6b5ef0248 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerRequest.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerRequest.java @@ -37,13 +37,13 @@ import java.util.OptionalLong; import java.util.Set; import java.util.stream.Collectors; -import javax.servlet.ServletException; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; -import javax.servlet.http.Part; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; +import jakarta.servlet.http.Part; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpHeaders; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerRequestBuilder.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerRequestBuilder.java index 9598c018004..7dbca4417cb 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerRequestBuilder.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerRequestBuilder.java @@ -33,13 +33,13 @@ import java.util.Optional; import java.util.function.Consumer; import java.util.stream.Collectors; -import javax.servlet.ReadListener; -import javax.servlet.ServletException; -import javax.servlet.ServletInputStream; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; -import javax.servlet.http.Part; +import jakarta.servlet.ReadListener; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletInputStream; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; +import jakarta.servlet.http.Part; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpHeaders; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerResponseBuilder.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerResponseBuilder.java index 8f9dbcde88c..7cbb36ff99d 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerResponseBuilder.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerResponseBuilder.java @@ -26,9 +26,9 @@ import java.util.Set; import java.util.function.BiFunction; import java.util.function.Consumer; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.CacheControl; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/EntityResponse.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/EntityResponse.java index e2bb1c543b2..56e033e747c 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/EntityResponse.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/EntityResponse.java @@ -22,7 +22,7 @@ import java.time.ZonedDateTime; import java.util.Set; import java.util.function.Consumer; -import javax.servlet.http.Cookie; +import jakarta.servlet.http.Cookie; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.CacheControl; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/ErrorHandlingServerResponse.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/ErrorHandlingServerResponse.java index 9ae67ec1023..bce77dbe4c7 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/ErrorHandlingServerResponse.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/ErrorHandlingServerResponse.java @@ -22,10 +22,9 @@ import java.util.List; import java.util.function.BiFunction; import java.util.function.Predicate; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/RenderingResponse.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/RenderingResponse.java index 569ede13e66..83e727067e1 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/RenderingResponse.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/RenderingResponse.java @@ -20,7 +20,7 @@ import java.util.Collection; import java.util.Map; import java.util.function.Consumer; -import javax.servlet.http.Cookie; +import jakarta.servlet.http.Cookie; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/RequestPredicates.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/RequestPredicates.java index 664d6a851dc..b359806396b 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/RequestPredicates.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/RequestPredicates.java @@ -35,12 +35,11 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; import java.util.function.Predicate; -import javax.servlet.ServletException; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; -import javax.servlet.http.Part; - +import jakarta.servlet.ServletException; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; +import jakarta.servlet.http.Part; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/ServerRequest.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/ServerRequest.java index 6bbb3a43391..ec006e193ad 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/ServerRequest.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/ServerRequest.java @@ -29,11 +29,11 @@ import java.util.Optional; import java.util.OptionalLong; import java.util.function.Consumer; -import javax.servlet.ServletException; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; -import javax.servlet.http.Part; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; +import jakarta.servlet.http.Part; import org.springframework.core.ParameterizedTypeReference; import org.springframework.core.io.buffer.DataBuffer; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/ServerResponse.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/ServerResponse.java index 11efe5b0223..7e9fb25c0bc 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/ServerResponse.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/ServerResponse.java @@ -30,11 +30,10 @@ import java.util.concurrent.CompletionStage; import java.util.function.BiFunction; import java.util.function.Consumer; -import javax.servlet.ServletException; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.ServletException; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.reactivestreams.Publisher; import org.springframework.core.ParameterizedTypeReference; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/SseServerResponse.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/SseServerResponse.java index e078a66d110..a3965a0a1cf 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/SseServerResponse.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/SseServerResponse.java @@ -24,10 +24,10 @@ import java.util.Collections; import java.util.List; import java.util.function.Consumer; -import javax.servlet.ServletException; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.http.CacheControl; import org.springframework.http.HttpHeaders; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/support/HandlerFunctionAdapter.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/support/HandlerFunctionAdapter.java index 67fac910b78..819c7e9e210 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/support/HandlerFunctionAdapter.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/support/HandlerFunctionAdapter.java @@ -18,10 +18,9 @@ package org.springframework.web.servlet.function.support; import java.util.List; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/support/RouterFunctionMapping.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/support/RouterFunctionMapping.java index 7597f0af686..d0b96a7fb03 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/support/RouterFunctionMapping.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/support/RouterFunctionMapping.java @@ -21,7 +21,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.beans.factory.BeanFactoryUtils; import org.springframework.beans.factory.InitializingBean; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerExceptionResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerExceptionResolver.java index e5e2db0b6a1..6af3b3cb2d5 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerExceptionResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerExceptionResolver.java @@ -18,9 +18,8 @@ package org.springframework.web.servlet.handler; import java.util.Set; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMapping.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMapping.java index d3336710f0c..f100a8ad33a 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMapping.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMapping.java @@ -22,10 +22,9 @@ import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.servlet.DispatcherType; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.DispatcherType; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.springframework.beans.BeansException; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMethodExceptionResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMethodExceptionResolver.java index 9f4ceb43a1f..47acaf4bc52 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMethodExceptionResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMethodExceptionResolver.java @@ -16,8 +16,8 @@ package org.springframework.web.servlet.handler; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.lang.Nullable; import org.springframework.web.method.HandlerMethod; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMethodMapping.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMethodMapping.java index 46f1707d1cf..2073087a150 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMethodMapping.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMethodMapping.java @@ -32,8 +32,8 @@ import java.util.concurrent.locks.ReentrantReadWriteLock; import java.util.function.Function; import java.util.stream.Collectors; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.aop.support.AopUtils; import org.springframework.beans.factory.BeanFactoryUtils; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractUrlHandlerMapping.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractUrlHandlerMapping.java index 2f7be313ca9..f244dfdada2 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractUrlHandlerMapping.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractUrlHandlerMapping.java @@ -23,8 +23,8 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/ConversionServiceExposingInterceptor.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/ConversionServiceExposingInterceptor.java index a8e3b0ae338..c5c25d69446 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/ConversionServiceExposingInterceptor.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/ConversionServiceExposingInterceptor.java @@ -18,9 +18,9 @@ package org.springframework.web.servlet.handler; import java.io.IOException; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.core.convert.ConversionService; import org.springframework.util.Assert; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/DispatcherServletWebRequest.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/DispatcherServletWebRequest.java index 6ea1536297d..cace2a64151 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/DispatcherServletWebRequest.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/DispatcherServletWebRequest.java @@ -18,8 +18,8 @@ package org.springframework.web.servlet.handler; import java.util.Locale; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.web.context.request.ServletWebRequest; import org.springframework.web.servlet.support.RequestContextUtils; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/HandlerExceptionResolverComposite.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/HandlerExceptionResolverComposite.java index 9732169bfd8..fbc49d5edbd 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/HandlerExceptionResolverComposite.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/HandlerExceptionResolverComposite.java @@ -19,8 +19,8 @@ package org.springframework.web.servlet.handler; import java.util.Collections; import java.util.List; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.core.Ordered; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/HandlerMappingIntrospector.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/HandlerMappingIntrospector.java index 81d38fb3b8c..76d90f320bb 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/HandlerMappingIntrospector.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/HandlerMappingIntrospector.java @@ -27,8 +27,8 @@ import java.util.Properties; import java.util.function.BiFunction; import java.util.stream.Collectors; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; import org.springframework.beans.factory.BeanFactoryUtils; import org.springframework.beans.factory.InitializingBean; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/MappedInterceptor.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/MappedInterceptor.java index 01e0961984e..46977483ada 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/MappedInterceptor.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/MappedInterceptor.java @@ -18,8 +18,8 @@ package org.springframework.web.servlet.handler; import java.util.Arrays; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.http.server.PathContainer; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/MatchableHandlerMapping.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/MatchableHandlerMapping.java index 85ef3ec17da..27ce57380c8 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/MatchableHandlerMapping.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/MatchableHandlerMapping.java @@ -16,7 +16,7 @@ package org.springframework.web.servlet.handler; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.lang.Nullable; import org.springframework.web.servlet.HandlerMapping; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/PathPatternMatchableHandlerMapping.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/PathPatternMatchableHandlerMapping.java index 4b7a906732b..42028a91234 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/PathPatternMatchableHandlerMapping.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/PathPatternMatchableHandlerMapping.java @@ -18,7 +18,7 @@ package org.springframework.web.servlet.handler; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.http.server.PathContainer; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/SimpleMappingExceptionResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/SimpleMappingExceptionResolver.java index 99d8027638e..61645c5c8de 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/SimpleMappingExceptionResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/SimpleMappingExceptionResolver.java @@ -22,8 +22,8 @@ import java.util.HashMap; import java.util.Map; import java.util.Properties; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.lang.Nullable; import org.springframework.web.servlet.ModelAndView; @@ -70,7 +70,7 @@ public class SimpleMappingExceptionResolver extends AbstractHandlerExceptionReso /** * Set the mappings between exception class names and error view names. * The exception class name can be a substring, with no wildcard support at present. - * A value of "ServletException" would match {@code javax.servlet.ServletException} + * A value of "ServletException" would match {@code jakarta.servlet.ServletException} * and subclasses, for example. *

    NB: Consider carefully how * specific the pattern is, and whether to include package information (which isn't mandatory). diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/SimpleServletHandlerAdapter.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/SimpleServletHandlerAdapter.java index 7cc9fcf9f0d..16568884442 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/SimpleServletHandlerAdapter.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/SimpleServletHandlerAdapter.java @@ -16,9 +16,9 @@ package org.springframework.web.servlet.handler; -import javax.servlet.Servlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.Servlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.lang.Nullable; import org.springframework.web.servlet.HandlerAdapter; @@ -47,8 +47,8 @@ import org.springframework.web.servlet.ModelAndView; * * @author Juergen Hoeller * @since 1.1.5 - * @see javax.servlet.Servlet - * @see javax.servlet.http.HttpServlet + * @see jakarta.servlet.Servlet + * @see jakarta.servlet.http.HttpServlet * @see SimpleServletPostProcessor * @see org.springframework.web.servlet.mvc.ServletWrappingController */ diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/SimpleServletPostProcessor.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/SimpleServletPostProcessor.java index 589d8cf5f31..bfab08397d3 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/SimpleServletPostProcessor.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/SimpleServletPostProcessor.java @@ -19,10 +19,10 @@ package org.springframework.web.servlet.handler; import java.util.Collections; import java.util.Enumeration; -import javax.servlet.Servlet; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; +import jakarta.servlet.Servlet; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanInitializationException; @@ -34,7 +34,7 @@ import org.springframework.web.context.ServletContextAware; /** * {@link org.springframework.beans.factory.config.BeanPostProcessor} * that applies initialization and destruction callbacks to beans that - * implement the {@link javax.servlet.Servlet} interface. + * implement the {@link jakarta.servlet.Servlet} interface. * *

    After initialization of the bean instance, the Servlet {@code init} * method will be called with a ServletConfig that contains the bean name @@ -61,8 +61,8 @@ import org.springframework.web.context.ServletContextAware; * * @author Juergen Hoeller * @since 1.1.5 - * @see javax.servlet.Servlet#init(javax.servlet.ServletConfig) - * @see javax.servlet.Servlet#destroy() + * @see jakarta.servlet.Servlet#init(jakarta.servlet.ServletConfig) + * @see jakarta.servlet.Servlet#destroy() * @see SimpleServletHandlerAdapter */ public class SimpleServletPostProcessor implements diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/UserRoleAuthorizationInterceptor.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/UserRoleAuthorizationInterceptor.java index a4a49ed09e5..90d1209c9ba 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/UserRoleAuthorizationInterceptor.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/UserRoleAuthorizationInterceptor.java @@ -18,9 +18,9 @@ package org.springframework.web.servlet.handler; import java.io.IOException; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.lang.Nullable; import org.springframework.web.servlet.HandlerInterceptor; @@ -31,7 +31,7 @@ import org.springframework.web.servlet.HandlerInterceptor; * * @author Juergen Hoeller * @since 20.06.2003 - * @see javax.servlet.http.HttpServletRequest#isUserInRole + * @see jakarta.servlet.http.HttpServletRequest#isUserInRole */ public class UserRoleAuthorizationInterceptor implements HandlerInterceptor { @@ -71,7 +71,7 @@ public class UserRoleAuthorizationInterceptor implements HandlerInterceptor { * @param request current HTTP request * @param response current HTTP response * @param handler chosen handler to execute, for type and/or instance evaluation - * @throws javax.servlet.ServletException if there is an internal error + * @throws jakarta.servlet.ServletException if there is an internal error * @throws java.io.IOException in case of an I/O error when writing the response */ protected void handleNotAuthorized(HttpServletRequest request, HttpServletResponse response, Object handler) diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/WebRequestHandlerInterceptorAdapter.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/WebRequestHandlerInterceptorAdapter.java index e669344f086..a3028dcb27d 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/WebRequestHandlerInterceptorAdapter.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/WebRequestHandlerInterceptorAdapter.java @@ -16,8 +16,8 @@ package org.springframework.web.servlet.handler; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.lang.Nullable; import org.springframework.util.Assert; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/AbstractLocaleContextResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/AbstractLocaleContextResolver.java index 786628f91ac..98162f6fecb 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/AbstractLocaleContextResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/AbstractLocaleContextResolver.java @@ -19,8 +19,8 @@ package org.springframework.web.servlet.i18n; import java.util.Locale; import java.util.TimeZone; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.context.i18n.SimpleLocaleContext; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/AcceptHeaderLocaleResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/AcceptHeaderLocaleResolver.java index e5c027e9683..8df4c6c51df 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/AcceptHeaderLocaleResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/AcceptHeaderLocaleResolver.java @@ -21,8 +21,8 @@ import java.util.Enumeration; import java.util.List; import java.util.Locale; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.lang.Nullable; import org.springframework.util.StringUtils; @@ -39,7 +39,7 @@ import org.springframework.web.servlet.LocaleResolver; * @author Juergen Hoeller * @author Rossen Stoyanchev * @since 27.02.2003 - * @see javax.servlet.http.HttpServletRequest#getLocale() + * @see jakarta.servlet.http.HttpServletRequest#getLocale() */ public class AcceptHeaderLocaleResolver implements LocaleResolver { diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/CookieLocaleResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/CookieLocaleResolver.java index 557bf7801e8..bf30ea4bc53 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/CookieLocaleResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/CookieLocaleResolver.java @@ -19,9 +19,9 @@ package org.springframework.web.servlet.i18n; import java.util.Locale; import java.util.TimeZone; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.context.i18n.LocaleContext; import org.springframework.context.i18n.SimpleLocaleContext; @@ -333,7 +333,7 @@ public class CookieLocaleResolver extends CookieGenerator implements LocaleConte * @param request the request to resolve the locale for * @return the default locale (never {@code null}) * @see #setDefaultLocale - * @see javax.servlet.http.HttpServletRequest#getLocale() + * @see jakarta.servlet.http.HttpServletRequest#getLocale() */ protected Locale determineDefaultLocale(HttpServletRequest request) { Locale defaultLocale = getDefaultLocale(); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/FixedLocaleResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/FixedLocaleResolver.java index 60252cf4a04..ada77bdcd36 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/FixedLocaleResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/FixedLocaleResolver.java @@ -19,8 +19,8 @@ package org.springframework.web.servlet.i18n; import java.util.Locale; import java.util.TimeZone; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.context.i18n.LocaleContext; import org.springframework.context.i18n.TimeZoneAwareLocaleContext; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/LocaleChangeInterceptor.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/LocaleChangeInterceptor.java index 8e64ea6ed93..6f118374a27 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/LocaleChangeInterceptor.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/LocaleChangeInterceptor.java @@ -18,10 +18,9 @@ package org.springframework.web.servlet.i18n; import java.util.Locale; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/SessionLocaleResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/SessionLocaleResolver.java index 18572a08135..7ae9042a09d 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/SessionLocaleResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/SessionLocaleResolver.java @@ -19,8 +19,8 @@ package org.springframework.web.servlet.i18n; import java.util.Locale; import java.util.TimeZone; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.context.i18n.LocaleContext; import org.springframework.context.i18n.TimeZoneAwareLocaleContext; @@ -164,7 +164,7 @@ public class SessionLocaleResolver extends AbstractLocaleContextResolver { * @param request the request to resolve the locale for * @return the default locale (never {@code null}) * @see #setDefaultLocale - * @see javax.servlet.http.HttpServletRequest#getLocale() + * @see jakarta.servlet.http.HttpServletRequest#getLocale() */ protected Locale determineDefaultLocale(HttpServletRequest request) { Locale defaultLocale = getDefaultLocale(); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/AbstractController.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/AbstractController.java index 8c40056b8ea..12a42a7a491 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/AbstractController.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/AbstractController.java @@ -16,9 +16,9 @@ package org.springframework.web.servlet.mvc; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; import org.springframework.http.HttpMethod; import org.springframework.lang.Nullable; @@ -135,7 +135,7 @@ public abstract class AbstractController extends WebContentGenerator implements * different servlet containers; the only 100% safe way is a session mutex. * @see AbstractController#handleRequestInternal * @see org.springframework.web.util.HttpSessionMutexListener - * @see org.springframework.web.util.WebUtils#getSessionMutex(javax.servlet.http.HttpSession) + * @see org.springframework.web.util.WebUtils#getSessionMutex(jakarta.servlet.http.HttpSession) */ public final void setSynchronizeOnSession(boolean synchronizeOnSession) { this.synchronizeOnSession = synchronizeOnSession; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/AbstractUrlViewController.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/AbstractUrlViewController.java index ef8c3498968..768b8ad3f7c 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/AbstractUrlViewController.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/AbstractUrlViewController.java @@ -16,8 +16,8 @@ package org.springframework.web.servlet.mvc; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.util.Assert; import org.springframework.web.servlet.ModelAndView; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/Controller.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/Controller.java index 4f59c52ca1b..cc37288772d 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/Controller.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/Controller.java @@ -16,8 +16,8 @@ package org.springframework.web.servlet.mvc; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.lang.Nullable; import org.springframework.web.servlet.ModelAndView; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/HttpRequestHandlerAdapter.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/HttpRequestHandlerAdapter.java index 161750bc55d..8fef024bce1 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/HttpRequestHandlerAdapter.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/HttpRequestHandlerAdapter.java @@ -16,8 +16,8 @@ package org.springframework.web.servlet.mvc; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.lang.Nullable; import org.springframework.web.HttpRequestHandler; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/LastModified.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/LastModified.java index a6cfdcf86a6..a35c825f2eb 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/LastModified.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/LastModified.java @@ -16,7 +16,7 @@ package org.springframework.web.servlet.mvc; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; /** * Supports last-modified HTTP requests to facilitate content caching. @@ -39,7 +39,7 @@ import javax.servlet.http.HttpServletRequest; * annotated controller method, returning a * {@link org.springframework.http.ResponseEntity} with an "ETag" and/or * "Last-Modified" headers set. - * @see javax.servlet.http.HttpServlet#getLastModified + * @see jakarta.servlet.http.HttpServlet#getLastModified * @see Controller * @see SimpleControllerHandlerAdapter * @see org.springframework.web.HttpRequestHandler @@ -58,7 +58,7 @@ public interface LastModified { * @return the time the underlying resource was last modified, or -1 * meaning that the content must always be regenerated * @see org.springframework.web.servlet.HandlerAdapter#getLastModified - * @see javax.servlet.http.HttpServlet#getLastModified + * @see jakarta.servlet.http.HttpServlet#getLastModified */ long getLastModified(HttpServletRequest request); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/ParameterizableViewController.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/ParameterizableViewController.java index c447a70c164..6cf029898ce 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/ParameterizableViewController.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/ParameterizableViewController.java @@ -16,8 +16,8 @@ package org.springframework.web.servlet.mvc; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/ServletForwardingController.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/ServletForwardingController.java index 8e4f3dccc13..fe1d2fb81d1 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/ServletForwardingController.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/ServletForwardingController.java @@ -16,11 +16,11 @@ package org.springframework.web.servlet.mvc; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.RequestDispatcher; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.beans.factory.BeanNameAware; import org.springframework.lang.Nullable; @@ -157,9 +157,9 @@ public class ServletForwardingController extends AbstractController implements B * @param request current HTTP request * @param response current HTTP response * @return {@code true} for include, {@code false} for forward - * @see javax.servlet.RequestDispatcher#forward - * @see javax.servlet.RequestDispatcher#include - * @see javax.servlet.ServletResponse#isCommitted + * @see jakarta.servlet.RequestDispatcher#forward + * @see jakarta.servlet.RequestDispatcher#include + * @see jakarta.servlet.ServletResponse#isCommitted * @see org.springframework.web.util.WebUtils#isIncludeRequest */ protected boolean useInclude(HttpServletRequest request, HttpServletResponse response) { diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/ServletWrappingController.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/ServletWrappingController.java index bcac67c11cb..673c110da12 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/ServletWrappingController.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/ServletWrappingController.java @@ -19,11 +19,11 @@ package org.springframework.web.servlet.mvc; import java.util.Enumeration; import java.util.Properties; -import javax.servlet.Servlet; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.Servlet; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.beans.factory.BeanNameAware; import org.springframework.beans.factory.DisposableBean; @@ -108,8 +108,8 @@ public class ServletWrappingController extends AbstractController /** * Set the class of the servlet to wrap. - * Needs to implement {@code javax.servlet.Servlet}. - * @see javax.servlet.Servlet + * Needs to implement {@code jakarta.servlet.Servlet}. + * @see jakarta.servlet.Servlet */ public void setServletClass(Class servletClass) { this.servletClass = servletClass; @@ -139,7 +139,7 @@ public class ServletWrappingController extends AbstractController /** * Initialize the wrapped Servlet instance. - * @see javax.servlet.Servlet#init(javax.servlet.ServletConfig) + * @see jakarta.servlet.Servlet#init(jakarta.servlet.ServletConfig) */ @Override public void afterPropertiesSet() throws Exception { @@ -156,7 +156,7 @@ public class ServletWrappingController extends AbstractController /** * Invoke the wrapped Servlet instance. - * @see javax.servlet.Servlet#service(javax.servlet.ServletRequest, javax.servlet.ServletResponse) + * @see jakarta.servlet.Servlet#service(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse) */ @Override protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) @@ -170,7 +170,7 @@ public class ServletWrappingController extends AbstractController /** * Destroy the wrapped Servlet instance. - * @see javax.servlet.Servlet#destroy() + * @see jakarta.servlet.Servlet#destroy() */ @Override public void destroy() { diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/SimpleControllerHandlerAdapter.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/SimpleControllerHandlerAdapter.java index 64372c665c6..a8acd760ec0 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/SimpleControllerHandlerAdapter.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/SimpleControllerHandlerAdapter.java @@ -16,8 +16,8 @@ package org.springframework.web.servlet.mvc; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.lang.Nullable; import org.springframework.web.servlet.HandlerAdapter; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/UrlFilenameViewController.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/UrlFilenameViewController.java index 4e2397d51d3..fc026104af0 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/UrlFilenameViewController.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/UrlFilenameViewController.java @@ -19,7 +19,7 @@ package org.springframework.web.servlet.mvc; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.lang.Nullable; import org.springframework.util.StringUtils; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/WebContentInterceptor.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/WebContentInterceptor.java index 696be902b75..450ec25c9a8 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/WebContentInterceptor.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/WebContentInterceptor.java @@ -21,10 +21,10 @@ import java.util.HashMap; import java.util.Map; import java.util.Properties; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.http.CacheControl; import org.springframework.http.server.PathContainer; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/annotation/ResponseStatusExceptionResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/annotation/ResponseStatusExceptionResolver.java index 6fd143c76d2..b2ae8bb1bf9 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/annotation/ResponseStatusExceptionResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/annotation/ResponseStatusExceptionResolver.java @@ -18,8 +18,8 @@ package org.springframework.web.servlet.mvc.annotation; import java.io.IOException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.context.MessageSource; import org.springframework.context.MessageSourceAware; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/AbstractNameValueExpression.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/AbstractNameValueExpression.java index 5acc07c3dc4..91e5c16cb32 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/AbstractNameValueExpression.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/AbstractNameValueExpression.java @@ -16,7 +16,7 @@ package org.springframework.web.servlet.mvc.condition; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.lang.Nullable; import org.springframework.util.ObjectUtils; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/CompositeRequestCondition.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/CompositeRequestCondition.java index 5857fdc5eb5..07b91753cff 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/CompositeRequestCondition.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/CompositeRequestCondition.java @@ -21,7 +21,7 @@ import java.util.Collection; import java.util.Collections; import java.util.List; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.lang.Nullable; import org.springframework.util.Assert; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/ConsumesRequestCondition.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/ConsumesRequestCondition.java index 0efe0c849b3..430fe9fbd4c 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/ConsumesRequestCondition.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/ConsumesRequestCondition.java @@ -23,7 +23,7 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Set; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.http.HttpHeaders; import org.springframework.http.InvalidMediaTypeException; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/HeadersRequestCondition.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/HeadersRequestCondition.java index e3f1773318e..e2f78cac600 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/HeadersRequestCondition.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/HeadersRequestCondition.java @@ -21,7 +21,7 @@ import java.util.Collections; import java.util.LinkedHashSet; import java.util.Set; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.lang.Nullable; import org.springframework.util.ObjectUtils; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/ParamsRequestCondition.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/ParamsRequestCondition.java index f06f363aa2c..074ce921978 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/ParamsRequestCondition.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/ParamsRequestCondition.java @@ -22,7 +22,7 @@ import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Set; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.lang.Nullable; import org.springframework.util.ObjectUtils; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/PathPatternsRequestCondition.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/PathPatternsRequestCondition.java index a89b4ed3cb6..e7f4923065d 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/PathPatternsRequestCondition.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/PathPatternsRequestCondition.java @@ -25,7 +25,7 @@ import java.util.SortedSet; import java.util.TreeSet; import java.util.stream.Collectors; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.http.server.PathContainer; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/PatternsRequestCondition.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/PatternsRequestCondition.java index 9539415ae38..6bd5676e2b0 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/PatternsRequestCondition.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/PatternsRequestCondition.java @@ -26,7 +26,7 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Set; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.lang.Nullable; import org.springframework.util.AntPathMatcher; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/ProducesRequestCondition.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/ProducesRequestCondition.java index 7a6af227259..b7e3aa4fed6 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/ProducesRequestCondition.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/ProducesRequestCondition.java @@ -22,7 +22,7 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Set; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.http.MediaType; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/RequestCondition.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/RequestCondition.java index d2eb27d2fa9..cf399dcd127 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/RequestCondition.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/RequestCondition.java @@ -16,7 +16,7 @@ package org.springframework.web.servlet.mvc.condition; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/RequestConditionHolder.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/RequestConditionHolder.java index 5ea41adce50..ebed0908cb8 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/RequestConditionHolder.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/RequestConditionHolder.java @@ -19,7 +19,7 @@ package org.springframework.web.servlet.mvc.condition; import java.util.Collection; import java.util.Collections; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/RequestMethodsRequestCondition.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/RequestMethodsRequestCondition.java index 4184239e488..f00f2414a73 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/RequestMethodsRequestCondition.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/RequestMethodsRequestCondition.java @@ -23,8 +23,8 @@ import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; -import javax.servlet.DispatcherType; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/AbstractHandlerMethodAdapter.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/AbstractHandlerMethodAdapter.java index 24ef3cb6573..d12f14d02d8 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/AbstractHandlerMethodAdapter.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/AbstractHandlerMethodAdapter.java @@ -16,8 +16,8 @@ package org.springframework.web.servlet.mvc.method; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.core.Ordered; import org.springframework.lang.Nullable; @@ -111,7 +111,7 @@ public abstract class AbstractHandlerMethodAdapter extends WebContentGenerator i } /** - * Same contract as for {@link javax.servlet.http.HttpServlet#getLastModified(HttpServletRequest)}. + * Same contract as for {@link jakarta.servlet.http.HttpServlet#getLastModified(HttpServletRequest)}. * @param request current HTTP request * @param handlerMethod handler method to use * @return the lastModified value for the given handler diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/RequestMappingInfo.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/RequestMappingInfo.java index 79622c38616..99cd5fe89d0 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/RequestMappingInfo.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/RequestMappingInfo.java @@ -19,8 +19,8 @@ package org.springframework.web.servlet.mvc.method; import java.util.List; import java.util.Set; -import javax.servlet.ServletRequest; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.http.HttpMethod; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/RequestMappingInfoHandlerMapping.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/RequestMappingInfoHandlerMapping.java index 8758e7cc76a..d321a36ead1 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/RequestMappingInfoHandlerMapping.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/RequestMappingInfoHandlerMapping.java @@ -26,8 +26,8 @@ import java.util.List; import java.util.Map; import java.util.Set; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/AbstractMessageConverterMethodArgumentResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/AbstractMessageConverterMethodArgumentResolver.java index 1dbc559e2cc..b9bf4a176b1 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/AbstractMessageConverterMethodArgumentResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/AbstractMessageConverterMethodArgumentResolver.java @@ -29,8 +29,7 @@ import java.util.List; import java.util.Optional; import java.util.Set; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -229,7 +228,7 @@ public abstract class AbstractMessageConverterMethodArgumentResolver implements /** * Validate the binding target if applicable. - *

    The default implementation checks for {@code @javax.validation.Valid}, + *

    The default implementation checks for {@code @jakarta.validation.Valid}, * Spring's {@link org.springframework.validation.annotation.Validated}, * and custom annotations whose name starts with "Valid". * @param binder the DataBinder to be used diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/AbstractMessageConverterMethodProcessor.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/AbstractMessageConverterMethodProcessor.java index 158a33b9c91..bd18540925b 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/AbstractMessageConverterMethodProcessor.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/AbstractMessageConverterMethodProcessor.java @@ -26,9 +26,9 @@ import java.util.List; import java.util.Locale; import java.util.Set; -import javax.servlet.ServletRequest; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.core.GenericTypeResolver; import org.springframework.core.MethodParameter; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ExceptionHandlerExceptionResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ExceptionHandlerExceptionResolver.java index 7be174e7a68..83ae13af4ee 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ExceptionHandlerExceptionResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ExceptionHandlerExceptionResolver.java @@ -25,8 +25,8 @@ import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.aop.support.AopUtils; import org.springframework.beans.factory.InitializingBean; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ExtendedServletRequestDataBinder.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ExtendedServletRequestDataBinder.java index a0db1cac45a..2708af1108f 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ExtendedServletRequestDataBinder.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ExtendedServletRequestDataBinder.java @@ -18,7 +18,7 @@ package org.springframework.web.servlet.mvc.method.annotation; import java.util.Map; -import javax.servlet.ServletRequest; +import jakarta.servlet.ServletRequest; import org.springframework.beans.MutablePropertyValues; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/HttpEntityMethodProcessor.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/HttpEntityMethodProcessor.java index 6b9f0af7072..f498494a3a2 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/HttpEntityMethodProcessor.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/HttpEntityMethodProcessor.java @@ -24,8 +24,8 @@ import java.util.Collections; import java.util.List; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.core.MethodParameter; import org.springframework.core.ResolvableType; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/HttpHeadersReturnValueHandler.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/HttpHeadersReturnValueHandler.java index 9678ac2fe78..224d3a17a01 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/HttpHeadersReturnValueHandler.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/HttpHeadersReturnValueHandler.java @@ -16,7 +16,7 @@ package org.springframework.web.servlet.mvc.method.annotation; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.core.MethodParameter; import org.springframework.http.HttpHeaders; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/MvcUriComponentsBuilder.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/MvcUriComponentsBuilder.java index 7c60bee6675..a78fb6011a1 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/MvcUriComponentsBuilder.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/MvcUriComponentsBuilder.java @@ -23,8 +23,7 @@ import java.util.List; import java.util.Map; import java.util.Set; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.http.HttpServletRequest; import org.aopalliance.intercept.MethodInterceptor; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/PrincipalMethodArgumentResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/PrincipalMethodArgumentResolver.java index dff70178eac..23ebbd3f0d4 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/PrincipalMethodArgumentResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/PrincipalMethodArgumentResolver.java @@ -18,7 +18,7 @@ package org.springframework.web.servlet.mvc.method.annotation; import java.security.Principal; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.core.MethodParameter; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestAttributeMethodArgumentResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestAttributeMethodArgumentResolver.java index 5845ee5cdcb..9156c86f727 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestAttributeMethodArgumentResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestAttributeMethodArgumentResolver.java @@ -16,7 +16,7 @@ package org.springframework.web.servlet.mvc.method.annotation; -import javax.servlet.ServletException; +import jakarta.servlet.ServletException; import org.springframework.core.MethodParameter; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapter.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapter.java index 6005b22e247..59b056b4738 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapter.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapter.java @@ -25,9 +25,9 @@ import java.util.Set; import java.util.concurrent.Callable; import java.util.concurrent.ConcurrentHashMap; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; @@ -528,7 +528,7 @@ public class RequestMappingHandlerAdapter extends AbstractHandlerMethodAdapter * same active logical session. However, this is not guaranteed across * different servlet containers; the only 100% safe way is a session mutex. * @see org.springframework.web.util.HttpSessionMutexListener - * @see org.springframework.web.util.WebUtils#getSessionMutex(javax.servlet.http.HttpSession) + * @see org.springframework.web.util.WebUtils#getSessionMutex(jakarta.servlet.http.HttpSession) */ public void setSynchronizeOnSession(boolean synchronizeOnSession) { this.synchronizeOnSession = synchronizeOnSession; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerMapping.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerMapping.java index 1da7ca1ed8b..a5061118a97 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerMapping.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerMapping.java @@ -25,7 +25,7 @@ import java.util.List; import java.util.Map; import java.util.function.Predicate; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.context.EmbeddedValueResolverAware; import org.springframework.core.annotation.AnnotatedElementUtils; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestPartMethodArgumentResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestPartMethodArgumentResolver.java index e828239d710..d32a396c4cf 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestPartMethodArgumentResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestPartMethodArgumentResolver.java @@ -18,7 +18,7 @@ package org.springframework.web.servlet.mvc.method.annotation; import java.util.List; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.core.MethodParameter; import org.springframework.http.HttpInputMessage; @@ -46,7 +46,7 @@ import org.springframework.web.multipart.support.RequestPartServletServerHttpReq *

      *
    • Annotated with @{@link RequestPart} *
    • Of type {@link MultipartFile} in conjunction with Spring's {@link MultipartResolver} abstraction - *
    • Of type {@code javax.servlet.http.Part} in conjunction with Servlet 3.0 multipart requests + *
    • Of type {@code jakarta.servlet.http.Part} in conjunction with Servlet 3.0 multipart requests *
    * *

    When a parameter is annotated with {@code @RequestPart}, the content of the part is @@ -96,7 +96,7 @@ public class RequestPartMethodArgumentResolver extends AbstractMessageConverterM *

      *
    • annotated with {@code @RequestPart} *
    • of type {@link MultipartFile} unless annotated with {@code @RequestParam} - *
    • of type {@code javax.servlet.http.Part} unless annotated with + *
    • of type {@code jakarta.servlet.http.Part} unless annotated with * {@code @RequestParam} *
    */ diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessor.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessor.java index 50e4fd56413..0d8907f7c60 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessor.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessor.java @@ -20,7 +20,7 @@ import java.io.IOException; import java.lang.reflect.Type; import java.util.List; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.core.Conventions; import org.springframework.core.MethodParameter; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitterReturnValueHandler.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitterReturnValueHandler.java index 6688fe5b5af..f6550aed27c 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitterReturnValueHandler.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitterReturnValueHandler.java @@ -22,8 +22,8 @@ import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; -import javax.servlet.ServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.core.MethodParameter; import org.springframework.core.ReactiveAdapterRegistry; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseEntityExceptionHandler.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseEntityExceptionHandler.java index f706afe2d4c..2c96722b14e 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseEntityExceptionHandler.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseEntityExceptionHandler.java @@ -19,8 +19,7 @@ package org.springframework.web.servlet.mvc.method.annotation; import java.util.List; import java.util.Set; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletCookieValueMethodArgumentResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletCookieValueMethodArgumentResolver.java index 97c66a581a3..e41c49ce0bf 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletCookieValueMethodArgumentResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletCookieValueMethodArgumentResolver.java @@ -16,8 +16,8 @@ package org.springframework.web.servlet.mvc.method.annotation; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.core.MethodParameter; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletInvocableHandlerMethod.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletInvocableHandlerMethod.java index ae3473873de..db5d7556cc1 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletInvocableHandlerMethod.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletInvocableHandlerMethod.java @@ -22,8 +22,8 @@ import java.lang.reflect.Method; import java.lang.reflect.Type; import java.util.concurrent.Callable; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.context.MessageSource; import org.springframework.core.KotlinDetector; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletModelAttributeMethodProcessor.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletModelAttributeMethodProcessor.java index 38cf420e141..b7e7418e771 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletModelAttributeMethodProcessor.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletModelAttributeMethodProcessor.java @@ -19,7 +19,7 @@ package org.springframework.web.servlet.mvc.method.annotation; import java.util.Collections; import java.util.Map; -import javax.servlet.ServletRequest; +import jakarta.servlet.ServletRequest; import org.springframework.core.MethodParameter; import org.springframework.core.convert.ConversionService; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletRequestMethodArgumentResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletRequestMethodArgumentResolver.java index 45ca54595ef..db80a70dfd1 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletRequestMethodArgumentResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletRequestMethodArgumentResolver.java @@ -24,10 +24,10 @@ import java.time.ZoneId; import java.util.Locale; import java.util.TimeZone; -import javax.servlet.ServletRequest; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; -import javax.servlet.http.PushBuilder; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; +import jakarta.servlet.http.PushBuilder; import org.springframework.core.MethodParameter; import org.springframework.http.HttpMethod; @@ -73,7 +73,7 @@ public class ServletRequestMethodArgumentResolver implements HandlerMethodArgume static { try { - pushBuilder = ClassUtils.forName("javax.servlet.http.PushBuilder", + pushBuilder = ClassUtils.forName("jakarta.servlet.http.PushBuilder", ServletRequestMethodArgumentResolver.class.getClassLoader()); } catch (ClassNotFoundException ex) { diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletResponseMethodArgumentResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletResponseMethodArgumentResolver.java index 3ee6d5b0274..45e71a9081b 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletResponseMethodArgumentResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletResponseMethodArgumentResolver.java @@ -20,7 +20,7 @@ import java.io.IOException; import java.io.OutputStream; import java.io.Writer; -import javax.servlet.ServletResponse; +import jakarta.servlet.ServletResponse; import org.springframework.core.MethodParameter; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/SessionAttributeMethodArgumentResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/SessionAttributeMethodArgumentResolver.java index 3f68273d965..c5cce648c07 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/SessionAttributeMethodArgumentResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/SessionAttributeMethodArgumentResolver.java @@ -16,7 +16,7 @@ package org.springframework.web.servlet.mvc.method.annotation; -import javax.servlet.ServletException; +import jakarta.servlet.ServletException; import org.springframework.core.MethodParameter; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/StreamingResponseBodyReturnValueHandler.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/StreamingResponseBodyReturnValueHandler.java index 43472293e92..4cecd34e8af 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/StreamingResponseBodyReturnValueHandler.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/StreamingResponseBodyReturnValueHandler.java @@ -19,8 +19,8 @@ package org.springframework.web.servlet.mvc.method.annotation; import java.io.OutputStream; import java.util.concurrent.Callable; -import javax.servlet.ServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.core.MethodParameter; import org.springframework.core.ResolvableType; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/UriComponentsBuilderMethodArgumentResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/UriComponentsBuilderMethodArgumentResolver.java index 928af577e70..34fdfce6570 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/UriComponentsBuilderMethodArgumentResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/UriComponentsBuilderMethodArgumentResolver.java @@ -16,7 +16,7 @@ package org.springframework.web.servlet.mvc.method.annotation; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.core.MethodParameter; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/support/DefaultHandlerExceptionResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/support/DefaultHandlerExceptionResolver.java index 542f0ae8f87..ce787c69cf4 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/support/DefaultHandlerExceptionResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/support/DefaultHandlerExceptionResolver.java @@ -19,9 +19,8 @@ package org.springframework.web.servlet.mvc.support; import java.io.IOException; import java.util.List; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -463,7 +462,7 @@ public class DefaultHandlerExceptionResolver extends AbstractHandlerExceptionRes /** * Handle the case where an {@linkplain RequestPart @RequestPart}, a {@link MultipartFile}, - * or a {@code javax.servlet.http.Part} argument is required but is missing. + * or a {@code jakarta.servlet.http.Part} argument is required but is missing. *

    By default, an HTTP 400 error is sent back to the client. * @param request current HTTP request * @param response current HTTP response @@ -544,12 +543,12 @@ public class DefaultHandlerExceptionResolver extends AbstractHandlerExceptionRes /** * Invoked to send a server error. Sets the status to 500 and also sets the - * request attribute "javax.servlet.error.exception" to the Exception. + * request attribute "jakarta.servlet.error.exception" to the Exception. */ protected void sendServerError(Exception ex, HttpServletRequest request, HttpServletResponse response) throws IOException { - request.setAttribute("javax.servlet.error.exception", ex); + request.setAttribute("jakarta.servlet.error.exception", ex); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/AbstractResourceResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/AbstractResourceResolver.java index 9f507232d19..c4228ce0ed6 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/AbstractResourceResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/AbstractResourceResolver.java @@ -18,8 +18,7 @@ package org.springframework.web.servlet.resource; import java.util.List; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/AppCacheManifestTransformer.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/AppCacheManifestTransformer.java index 5f8facffd39..4c0d9b4d3bb 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/AppCacheManifestTransformer.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/AppCacheManifestTransformer.java @@ -26,8 +26,7 @@ import java.util.Collection; import java.util.Collections; import java.util.Scanner; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/CachingResourceResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/CachingResourceResolver.java index 762c8488415..882504fad0f 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/CachingResourceResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/CachingResourceResolver.java @@ -22,7 +22,7 @@ import java.util.Collections; import java.util.List; import java.util.stream.Collectors; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.cache.Cache; import org.springframework.cache.CacheManager; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/CachingResourceTransformer.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/CachingResourceTransformer.java index bea1c5fd9f2..2c220f04a8a 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/CachingResourceTransformer.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/CachingResourceTransformer.java @@ -18,8 +18,7 @@ package org.springframework.web.servlet.resource; import java.io.IOException; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/CssLinkResourceTransformer.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/CssLinkResourceTransformer.java index a590d61f687..e27e2ac1dab 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/CssLinkResourceTransformer.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/CssLinkResourceTransformer.java @@ -25,8 +25,7 @@ import java.util.List; import java.util.SortedSet; import java.util.TreeSet; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/DefaultResourceResolverChain.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/DefaultResourceResolverChain.java index e2aeb9b2512..d01e9c33441 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/DefaultResourceResolverChain.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/DefaultResourceResolverChain.java @@ -21,7 +21,7 @@ import java.util.Collections; import java.util.List; import java.util.ListIterator; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.core.io.Resource; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/DefaultResourceTransformerChain.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/DefaultResourceTransformerChain.java index 6ea4c4aaf71..340fbc550ec 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/DefaultResourceTransformerChain.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/DefaultResourceTransformerChain.java @@ -22,7 +22,7 @@ import java.util.Collections; import java.util.List; import java.util.ListIterator; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.core.io.Resource; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/DefaultServletHttpRequestHandler.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/DefaultServletHttpRequestHandler.java index f1b59d09076..ab68bbe6c53 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/DefaultServletHttpRequestHandler.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/DefaultServletHttpRequestHandler.java @@ -18,11 +18,11 @@ package org.springframework.web.servlet.resource; import java.io.IOException; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.RequestDispatcher; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.lang.Nullable; import org.springframework.util.Assert; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/EncodedResourceResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/EncodedResourceResolver.java index 846938eea34..4d0a6af7338 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/EncodedResourceResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/EncodedResourceResolver.java @@ -28,7 +28,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.core.io.AbstractResource; import org.springframework.core.io.Resource; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/GzipResourceResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/GzipResourceResolver.java index f7b8542befa..e38cea0bf29 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/GzipResourceResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/GzipResourceResolver.java @@ -23,7 +23,7 @@ import java.net.URI; import java.net.URL; import java.util.List; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.core.io.AbstractResource; import org.springframework.core.io.Resource; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/PathResourceResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/PathResourceResolver.java index 2b97ac60895..34c782c5299 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/PathResourceResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/PathResourceResolver.java @@ -28,7 +28,7 @@ import java.util.List; import java.util.Map; import java.util.StringTokenizer; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandler.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandler.java index ed49cf3cd20..ace74e2dfb8 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandler.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandler.java @@ -26,10 +26,9 @@ import java.util.List; import java.util.Locale; import java.util.Map; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -303,7 +302,7 @@ public class ResourceHttpRequestHandler extends WebContentGenerator * response. *

    Use of this method is typically not necessary since mappings are * otherwise determined via - * {@link javax.servlet.ServletContext#getMimeType(String)} or via + * {@link jakarta.servlet.ServletContext#getMimeType(String)} or via * {@link MediaTypeFactory#getMediaType(Resource)}. * @param mediaTypes media type mappings * @since 5.2.4 @@ -728,7 +727,7 @@ public class ResourceHttpRequestHandler extends WebContentGenerator * the following lookups based on the resource filename and its path * extension: *

      - *
    1. {@link javax.servlet.ServletContext#getMimeType(String)} + *
    2. {@link jakarta.servlet.ServletContext#getMimeType(String)} *
    3. {@link #getMediaTypes()} *
    4. {@link MediaTypeFactory#getMediaType(String)} *
    diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceResolver.java index 4d75d61be73..f4417b9287c 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceResolver.java @@ -18,7 +18,7 @@ package org.springframework.web.servlet.resource; import java.util.List; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.core.io.Resource; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceResolverChain.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceResolverChain.java index c7672a7d5ea..678164977e0 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceResolverChain.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceResolverChain.java @@ -18,7 +18,7 @@ package org.springframework.web.servlet.resource; import java.util.List; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.core.io.Resource; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceTransformer.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceTransformer.java index 31059fef795..7decb81b528 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceTransformer.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceTransformer.java @@ -18,7 +18,7 @@ package org.springframework.web.servlet.resource; import java.io.IOException; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.core.io.Resource; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceTransformerChain.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceTransformerChain.java index a1db0440023..a92e84260d9 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceTransformerChain.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceTransformerChain.java @@ -18,7 +18,7 @@ package org.springframework.web.servlet.resource; import java.io.IOException; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.core.io.Resource; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceTransformerSupport.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceTransformerSupport.java index 3050727042a..888cd74a08b 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceTransformerSupport.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceTransformerSupport.java @@ -18,7 +18,7 @@ package org.springframework.web.servlet.resource; import java.util.Collections; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.core.io.Resource; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceUrlEncodingFilter.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceUrlEncodingFilter.java index c193ad5794b..da2e86a879b 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceUrlEncodingFilter.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceUrlEncodingFilter.java @@ -18,15 +18,14 @@ package org.springframework.web.servlet.resource; import java.io.IOException; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpServletResponseWrapper; - +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponseWrapper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceUrlProvider.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceUrlProvider.java index c1f926cd86d..7a2a6e2a67c 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceUrlProvider.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceUrlProvider.java @@ -22,8 +22,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -75,7 +74,7 @@ public class ResourceUrlProvider implements ApplicationListenerThis context will detect a JSTL locale attribute in page/request/session/application * scope, in addition to the fallback locale strategy provided by the base class. diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/support/JstlUtils.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/support/JstlUtils.java index 6ad2612b017..84c7d1a3d39 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/support/JstlUtils.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/support/JstlUtils.java @@ -20,11 +20,11 @@ import java.util.Locale; import java.util.ResourceBundle; import java.util.TimeZone; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; -import javax.servlet.jsp.jstl.core.Config; -import javax.servlet.jsp.jstl.fmt.LocalizationContext; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; +import jakarta.servlet.jsp.jstl.core.Config; +import jakarta.servlet.jsp.jstl.fmt.LocalizationContext; import org.springframework.context.MessageSource; import org.springframework.context.support.MessageSourceResourceBundle; @@ -41,7 +41,7 @@ import org.springframework.lang.Nullable; public abstract class JstlUtils { /** - * Checks JSTL's "javax.servlet.jsp.jstl.fmt.localizationContext" + * Checks JSTL's "jakarta.servlet.jsp.jstl.fmt.localizationContext" * context-param and creates a corresponding child message source, * with the provided Spring-defined MessageSource as parent. * @param servletContext the ServletContext we're running in diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/support/RequestContext.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/support/RequestContext.java index 9907bce5a8f..db97efc2bae 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/support/RequestContext.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/support/RequestContext.java @@ -22,11 +22,11 @@ import java.util.Locale; import java.util.Map; import java.util.TimeZone; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; -import javax.servlet.jsp.jstl.core.Config; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; +import jakarta.servlet.jsp.jstl.core.Config; import org.springframework.context.MessageSource; import org.springframework.context.MessageSourceResolvable; @@ -93,7 +93,7 @@ public class RequestContext { protected static final boolean jstlPresent = ClassUtils.isPresent( - "javax.servlet.jsp.jstl.core.Config", RequestContext.class.getClassLoader()); + "jakarta.servlet.jsp.jstl.core.Config", RequestContext.class.getClassLoader()); private HttpServletRequest request; @@ -137,7 +137,7 @@ public class RequestContext { * Pass in a ServletContext to be able to fallback to the root WebApplicationContext. * @param request current HTTP request * @see org.springframework.web.servlet.DispatcherServlet - * @see #RequestContext(javax.servlet.http.HttpServletRequest, javax.servlet.ServletContext) + * @see #RequestContext(jakarta.servlet.http.HttpServletRequest, jakarta.servlet.ServletContext) */ public RequestContext(HttpServletRequest request) { this(request, null, null, null); @@ -152,7 +152,7 @@ public class RequestContext { * @param request current HTTP request * @param response current HTTP response * @see org.springframework.web.servlet.DispatcherServlet - * @see #RequestContext(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, javax.servlet.ServletContext, Map) + * @see #RequestContext(jakarta.servlet.http.HttpServletRequest, jakarta.servlet.http.HttpServletResponse, jakarta.servlet.ServletContext, Map) */ public RequestContext(HttpServletRequest request, HttpServletResponse response) { this(request, response, null, null); @@ -183,7 +183,7 @@ public class RequestContext { * @param model the model attributes for the current view (can be {@code null}, * using the request attributes for Errors retrieval) * @see org.springframework.web.servlet.DispatcherServlet - * @see #RequestContext(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, javax.servlet.ServletContext, Map) + * @see #RequestContext(jakarta.servlet.http.HttpServletRequest, jakarta.servlet.http.HttpServletResponse, jakarta.servlet.ServletContext, Map) */ public RequestContext(HttpServletRequest request, @Nullable Map model) { this(request, null, null, model); @@ -324,7 +324,7 @@ public class RequestContext { *

    The default implementation checks for a JSTL locale attribute in request, session * or application scope; if not found, returns the {@code HttpServletRequest.getLocale()}. * @return the fallback locale (never {@code null}) - * @see javax.servlet.http.HttpServletRequest#getLocale() + * @see jakarta.servlet.http.HttpServletRequest#getLocale() */ protected Locale getFallbackLocale() { if (jstlPresent) { @@ -533,7 +533,7 @@ public class RequestContext { * indicates the current web application. This is useful for building links * to other resources within the application. *

    Delegates to the UrlPathHelper for decoding. - * @see javax.servlet.http.HttpServletRequest#getContextPath + * @see jakarta.servlet.http.HttpServletRequest#getContextPath * @see #getUrlPathHelper */ public String getContextPath() { diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/support/RequestContextUtils.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/support/RequestContextUtils.java index 05f3e78f2ee..8f7e97acb1e 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/support/RequestContextUtils.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/support/RequestContextUtils.java @@ -20,10 +20,10 @@ import java.util.Locale; import java.util.Map; import java.util.TimeZone; -import javax.servlet.ServletContext; -import javax.servlet.ServletRequest; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.context.i18n.LocaleContext; import org.springframework.context.i18n.TimeZoneAwareLocaleContext; @@ -136,7 +136,7 @@ public abstract class RequestContextUtils { * LocaleResolver bound to the request by the DispatcherServlet * (if available), falling back to the request's accept-header Locale. *

    This method serves as a straightforward alternative to the standard - * Servlet {@link javax.servlet.http.HttpServletRequest#getLocale()} method, + * Servlet {@link jakarta.servlet.http.HttpServletRequest#getLocale()} method, * falling back to the latter if no more specific locale has been found. *

    Consider using {@link org.springframework.context.i18n.LocaleContextHolder#getLocale()} * which will normally be populated with the same Locale. diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/support/RequestDataValueProcessor.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/support/RequestDataValueProcessor.java index 654d5996fcf..dba32744553 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/support/RequestDataValueProcessor.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/support/RequestDataValueProcessor.java @@ -18,7 +18,7 @@ package org.springframework.web.servlet.support; import java.util.Map; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/support/ServletUriComponentsBuilder.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/support/ServletUriComponentsBuilder.java index 900e224f195..3c04f0be273 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/support/ServletUriComponentsBuilder.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/support/ServletUriComponentsBuilder.java @@ -16,7 +16,7 @@ package org.springframework.web.servlet.support; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.lang.Nullable; import org.springframework.util.Assert; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/support/SessionFlashMapManager.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/support/SessionFlashMapManager.java index d201b25b6e0..faf981da872 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/support/SessionFlashMapManager.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/support/SessionFlashMapManager.java @@ -18,9 +18,9 @@ package org.springframework.web.servlet.support; import java.util.List; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; import org.springframework.lang.Nullable; import org.springframework.web.servlet.FlashMap; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/support/WebContentGenerator.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/support/WebContentGenerator.java index e6bb3a73a59..6da820e822e 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/support/WebContentGenerator.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/support/WebContentGenerator.java @@ -24,9 +24,9 @@ import java.util.LinkedHashSet; import java.util.Set; import java.util.concurrent.TimeUnit; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.http.CacheControl; import org.springframework.http.HttpHeaders; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/ArgumentAware.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/ArgumentAware.java index 1d4401556fe..6e00296c1b2 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/ArgumentAware.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/ArgumentAware.java @@ -16,7 +16,7 @@ package org.springframework.web.servlet.tags; -import javax.servlet.jsp.JspTagException; +import jakarta.servlet.jsp.JspTagException; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/ArgumentTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/ArgumentTag.java index 68216591672..84ba71c1f7b 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/ArgumentTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/ArgumentTag.java @@ -16,8 +16,8 @@ package org.springframework.web.servlet.tags; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.BodyTagSupport; +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.tagext.BodyTagSupport; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/BindErrorsTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/BindErrorsTag.java index 5cc8a765912..75042ea5105 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/BindErrorsTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/BindErrorsTag.java @@ -16,9 +16,9 @@ package org.springframework.web.servlet.tags; -import javax.servlet.ServletException; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.PageContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.PageContext; import org.springframework.lang.Nullable; import org.springframework.validation.Errors; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/BindTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/BindTag.java index dafdbd52b9d..5268a3a9ce0 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/BindTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/BindTag.java @@ -18,8 +18,8 @@ package org.springframework.web.servlet.tags; import java.beans.PropertyEditor; -import javax.servlet.jsp.JspTagException; -import javax.servlet.jsp.PageContext; +import jakarta.servlet.jsp.JspTagException; +import jakarta.servlet.jsp.PageContext; import org.springframework.lang.Nullable; import org.springframework.util.Assert; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/EditorAwareTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/EditorAwareTag.java index 499619e8d96..d6c9e2e773d 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/EditorAwareTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/EditorAwareTag.java @@ -18,7 +18,7 @@ package org.springframework.web.servlet.tags; import java.beans.PropertyEditor; -import javax.servlet.jsp.JspException; +import jakarta.servlet.jsp.JspException; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/EscapeBodyTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/EscapeBodyTag.java index 63daac01ffe..d759c7fcfa1 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/EscapeBodyTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/EscapeBodyTag.java @@ -18,9 +18,9 @@ package org.springframework.web.servlet.tags; import java.io.IOException; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.BodyContent; -import javax.servlet.jsp.tagext.BodyTag; +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.tagext.BodyContent; +import jakarta.servlet.jsp.tagext.BodyTag; import org.springframework.lang.Nullable; import org.springframework.util.Assert; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/EvalTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/EvalTag.java index 165a9141f51..ea079a8be8a 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/EvalTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/EvalTag.java @@ -18,8 +18,8 @@ package org.springframework.web.servlet.tags; import java.io.IOException; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.PageContext; +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.PageContext; import org.springframework.context.expression.BeanFactoryResolver; import org.springframework.context.expression.EnvironmentAccessor; @@ -102,7 +102,7 @@ import org.springframework.web.util.TagUtils; public class EvalTag extends HtmlEscapingAwareTag { /** - * {@link javax.servlet.jsp.PageContext} attribute for the + * {@link jakarta.servlet.jsp.PageContext} attribute for the * page-level {@link EvaluationContext} instance. */ private static final String EVALUATION_CONTEXT_PAGE_ATTRIBUTE = @@ -212,7 +212,7 @@ public class EvalTag extends HtmlEscapingAwareTag { private final PageContext pageContext; @Nullable - private final javax.servlet.jsp.el.VariableResolver variableResolver; + private final jakarta.servlet.jsp.el.VariableResolver variableResolver; public JspPropertyAccessor(PageContext pageContext) { this.pageContext = pageContext; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/HtmlEscapeTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/HtmlEscapeTag.java index 04d080538be..0d4ba42e51f 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/HtmlEscapeTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/HtmlEscapeTag.java @@ -16,7 +16,7 @@ package org.springframework.web.servlet.tags; -import javax.servlet.jsp.JspException; +import jakarta.servlet.jsp.JspException; /** * The {@code } tag sets default HTML escape value for the current diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/HtmlEscapingAwareTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/HtmlEscapingAwareTag.java index 09612a03e7e..65a5e7275c8 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/HtmlEscapingAwareTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/HtmlEscapingAwareTag.java @@ -16,7 +16,7 @@ package org.springframework.web.servlet.tags; -import javax.servlet.jsp.JspException; +import jakarta.servlet.jsp.JspException; import org.springframework.lang.Nullable; import org.springframework.web.util.HtmlUtils; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/MessageTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/MessageTag.java index ed240284af1..3c794e0f93a 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/MessageTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/MessageTag.java @@ -22,8 +22,8 @@ import java.util.Collection; import java.util.Collections; import java.util.List; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.JspTagException; +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.JspTagException; import org.springframework.context.MessageSource; import org.springframework.context.MessageSourceResolvable; @@ -227,7 +227,7 @@ public class MessageTag extends HtmlEscapingAwareTag implements ArgumentAware { * Set PageContext attribute name under which to expose * a variable that contains the resolved message. * @see #setScope - * @see javax.servlet.jsp.PageContext#setAttribute + * @see jakarta.servlet.jsp.PageContext#setAttribute */ public void setVar(String var) { this.var = var; @@ -238,7 +238,7 @@ public class MessageTag extends HtmlEscapingAwareTag implements ArgumentAware { * Default is SCOPE_PAGE ("page"). * @see #setVar * @see org.springframework.web.util.TagUtils#SCOPE_PAGE - * @see javax.servlet.jsp.PageContext#setAttribute + * @see jakarta.servlet.jsp.PageContext#setAttribute */ public void setScope(String scope) { this.scope = scope; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/NestedPathTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/NestedPathTag.java index c010c7bb8c0..c8fe794798d 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/NestedPathTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/NestedPathTag.java @@ -16,10 +16,10 @@ package org.springframework.web.servlet.tags; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.PageContext; -import javax.servlet.jsp.tagext.TagSupport; -import javax.servlet.jsp.tagext.TryCatchFinally; +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.PageContext; +import jakarta.servlet.jsp.tagext.TagSupport; +import jakarta.servlet.jsp.tagext.TryCatchFinally; import org.springframework.beans.PropertyAccessor; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/ParamTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/ParamTag.java index b0ca15a947e..513ea6bae21 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/ParamTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/ParamTag.java @@ -16,8 +16,8 @@ package org.springframework.web.servlet.tags; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.BodyTagSupport; +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.tagext.BodyTagSupport; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/RequestContextAwareTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/RequestContextAwareTag.java index ee730b82bab..af503346e07 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/RequestContextAwareTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/RequestContextAwareTag.java @@ -16,11 +16,10 @@ package org.springframework.web.servlet.tags; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.JspTagException; -import javax.servlet.jsp.tagext.TagSupport; -import javax.servlet.jsp.tagext.TryCatchFinally; - +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.JspTagException; +import jakarta.servlet.jsp.tagext.TagSupport; +import jakarta.servlet.jsp.tagext.TryCatchFinally; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -51,7 +50,7 @@ import org.springframework.web.servlet.support.RequestContext; public abstract class RequestContextAwareTag extends TagSupport implements TryCatchFinally { /** - * {@link javax.servlet.jsp.PageContext} attribute for the + * {@link jakarta.servlet.jsp.PageContext} attribute for the * page-level {@link RequestContext} instance. */ public static final String REQUEST_CONTEXT_PAGE_ATTRIBUTE = @@ -105,7 +104,7 @@ public abstract class RequestContextAwareTag extends TagSupport implements TryCa * @return same as TagSupport.doStartTag * @throws Exception any exception, any checked one other than * a JspException gets wrapped in a JspException by doStartTag - * @see javax.servlet.jsp.tagext.TagSupport#doStartTag + * @see jakarta.servlet.jsp.tagext.TagSupport#doStartTag */ protected abstract int doStartTagInternal() throws Exception; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/TransformTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/TransformTag.java index 3957d3bfd3d..00083c87946 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/TransformTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/TransformTag.java @@ -19,8 +19,8 @@ package org.springframework.web.servlet.tags; import java.beans.PropertyEditor; import java.io.IOException; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.TagSupport; +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.tagext.TagSupport; import org.springframework.lang.Nullable; import org.springframework.web.util.TagUtils; @@ -114,7 +114,7 @@ public class TransformTag extends HtmlEscapingAwareTag { * Set PageContext attribute name under which to expose * a variable that contains the result of the transformation. * @see #setScope - * @see javax.servlet.jsp.PageContext#setAttribute + * @see jakarta.servlet.jsp.PageContext#setAttribute */ public void setVar(String var) { this.var = var; @@ -125,7 +125,7 @@ public class TransformTag extends HtmlEscapingAwareTag { * Default is SCOPE_PAGE ("page"). * @see #setVar * @see org.springframework.web.util.TagUtils#SCOPE_PAGE - * @see javax.servlet.jsp.PageContext#setAttribute + * @see jakarta.servlet.jsp.PageContext#setAttribute */ public void setScope(String scope) { this.scope = scope; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/UrlTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/UrlTag.java index 079b3214846..8e30154bb0f 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/UrlTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/UrlTag.java @@ -24,11 +24,11 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import javax.servlet.ServletRequest; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.PageContext; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.PageContext; import org.springframework.lang.Nullable; import org.springframework.util.Assert; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractCheckedElementTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractCheckedElementTag.java index 5e40396a7c7..0c83f0d6625 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractCheckedElementTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractCheckedElementTag.java @@ -16,7 +16,7 @@ package org.springframework.web.servlet.tags.form; -import javax.servlet.jsp.JspException; +import jakarta.servlet.jsp.JspException; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractDataBoundFormElementTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractDataBoundFormElementTag.java index bfcb2c3fba8..00dcf90a610 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractDataBoundFormElementTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractDataBoundFormElementTag.java @@ -18,10 +18,10 @@ package org.springframework.web.servlet.tags.form; import java.beans.PropertyEditor; -import javax.servlet.ServletRequest; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.PageContext; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.PageContext; import org.springframework.beans.PropertyAccessor; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractFormTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractFormTag.java index fb48d00cac4..f766ccf54d1 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractFormTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractFormTag.java @@ -18,7 +18,7 @@ package org.springframework.web.servlet.tags.form; import java.beans.PropertyEditor; -import javax.servlet.jsp.JspException; +import jakarta.servlet.jsp.JspException; import org.springframework.lang.Nullable; import org.springframework.util.ObjectUtils; @@ -32,8 +32,8 @@ import org.springframework.web.servlet.tags.HtmlEscapingAwareTag; * actual tag rendering. * *

    Subclasses (or test classes) can override the {@link #createTagWriter()} method to - * redirect output to a {@link java.io.Writer} other than the {@link javax.servlet.jsp.JspWriter} - * associated with the current {@link javax.servlet.jsp.PageContext}. + * redirect output to a {@link java.io.Writer} other than the {@link jakarta.servlet.jsp.JspWriter} + * associated with the current {@link jakarta.servlet.jsp.PageContext}. * * @author Rob Harrop * @author Juergen Hoeller @@ -69,8 +69,8 @@ public abstract class AbstractFormTag extends HtmlEscapingAwareTag { /** * Create the {@link TagWriter} which all output will be written to. By default, - * the {@link TagWriter} writes its output to the {@link javax.servlet.jsp.JspWriter} - * for the current {@link javax.servlet.jsp.PageContext}. Subclasses may choose to + * the {@link TagWriter} writes its output to the {@link jakarta.servlet.jsp.JspWriter} + * for the current {@link jakarta.servlet.jsp.PageContext}. Subclasses may choose to * change the {@link java.io.Writer} to which output is actually written. */ protected TagWriter createTagWriter() { @@ -117,7 +117,7 @@ public abstract class AbstractFormTag extends HtmlEscapingAwareTag { /** * Subclasses should implement this method to perform tag content rendering. - * @return valid tag render instruction as per {@link javax.servlet.jsp.tagext.Tag#doStartTag()}. + * @return valid tag render instruction as per {@link jakarta.servlet.jsp.tagext.Tag#doStartTag()}. */ protected abstract int writeTagContent(TagWriter tagWriter) throws JspException; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractHtmlElementBodyTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractHtmlElementBodyTag.java index 0212d7a1de9..92528dcabf4 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractHtmlElementBodyTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractHtmlElementBodyTag.java @@ -18,9 +18,9 @@ package org.springframework.web.servlet.tags.form; import java.io.IOException; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.BodyContent; -import javax.servlet.jsp.tagext.BodyTag; +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.tagext.BodyContent; +import jakarta.servlet.jsp.tagext.BodyTag; import org.springframework.lang.Nullable; import org.springframework.util.Assert; @@ -62,7 +62,7 @@ public abstract class AbstractHtmlElementBodyTag extends AbstractHtmlElementTag * If {@link #shouldRender rendering}, flush any buffered * {@link BodyContent} or, if no {@link BodyContent} is supplied, * {@link #renderDefaultContent render the default content}. - * @return a {@link javax.servlet.jsp.tagext.Tag#EVAL_PAGE} result + * @return a {@link jakarta.servlet.jsp.tagext.Tag#EVAL_PAGE} result */ @Override public int doEndTag() throws JspException { @@ -122,21 +122,21 @@ public abstract class AbstractHtmlElementBodyTag extends AbstractHtmlElementTag /** * Called during {@link #writeTagContent} allowing subclasses to add any attributes to the - * {@link javax.servlet.jsp.PageContext} as needed. + * {@link jakarta.servlet.jsp.PageContext} as needed. */ protected void exposeAttributes() throws JspException { } /** * Called by {@link #doFinally} allowing subclasses to remove any attributes from the - * {@link javax.servlet.jsp.PageContext} as needed. + * {@link jakarta.servlet.jsp.PageContext} as needed. */ protected void removeAttributes() { } /** * The user customised the output of the error messages - flush the - * buffered content into the main {@link javax.servlet.jsp.JspWriter}. + * buffered content into the main {@link jakarta.servlet.jsp.JspWriter}. */ protected void flushBufferedBodyContent(BodyContent bodyContent) throws JspException { try { diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractHtmlElementTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractHtmlElementTag.java index 1599694fd80..11fd195246d 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractHtmlElementTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractHtmlElementTag.java @@ -19,8 +19,8 @@ package org.springframework.web.servlet.tags.form; import java.util.HashMap; import java.util.Map; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.DynamicAttributes; +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.tagext.DynamicAttributes; import org.springframework.lang.Nullable; import org.springframework.util.CollectionUtils; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractHtmlInputElementTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractHtmlInputElementTag.java index 8549bea401e..ce6a786bab1 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractHtmlInputElementTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractHtmlInputElementTag.java @@ -16,7 +16,7 @@ package org.springframework.web.servlet.tags.form; -import javax.servlet.jsp.JspException; +import jakarta.servlet.jsp.JspException; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractMultiCheckedElementTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractMultiCheckedElementTag.java index 8a02ecacb64..340fe962f85 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractMultiCheckedElementTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractMultiCheckedElementTag.java @@ -20,7 +20,7 @@ import java.util.Collection; import java.util.Iterator; import java.util.Map; -import javax.servlet.jsp.JspException; +import jakarta.servlet.jsp.JspException; import org.springframework.beans.BeanWrapper; import org.springframework.beans.PropertyAccessorFactory; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractSingleCheckedElementTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractSingleCheckedElementTag.java index 84f2505bd83..e0683cc64eb 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractSingleCheckedElementTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/AbstractSingleCheckedElementTag.java @@ -16,7 +16,7 @@ package org.springframework.web.servlet.tags.form; -import javax.servlet.jsp.JspException; +import jakarta.servlet.jsp.JspException; import org.springframework.lang.Nullable; import org.springframework.util.Assert; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/ButtonTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/ButtonTag.java index 53ece7b3c71..805adeefb16 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/ButtonTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/ButtonTag.java @@ -16,7 +16,7 @@ package org.springframework.web.servlet.tags.form; -import javax.servlet.jsp.JspException; +import jakarta.servlet.jsp.JspException; import org.springframework.lang.Nullable; import org.springframework.util.Assert; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/CheckboxTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/CheckboxTag.java index f3b1d2a8485..7f5518a6578 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/CheckboxTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/CheckboxTag.java @@ -18,7 +18,7 @@ package org.springframework.web.servlet.tags.form; import java.util.Collection; -import javax.servlet.jsp.JspException; +import jakarta.servlet.jsp.JspException; import org.springframework.web.bind.WebDataBinder; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/CheckboxesTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/CheckboxesTag.java index a9693fd6baf..ab7207a73a7 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/CheckboxesTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/CheckboxesTag.java @@ -16,7 +16,7 @@ package org.springframework.web.servlet.tags.form; -import javax.servlet.jsp.JspException; +import jakarta.servlet.jsp.JspException; import org.springframework.web.bind.WebDataBinder; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/ErrorsTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/ErrorsTag.java index 106f359f987..a1c1c978d66 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/ErrorsTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/ErrorsTag.java @@ -20,9 +20,9 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.PageContext; -import javax.servlet.jsp.tagext.BodyTag; +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.PageContext; +import jakarta.servlet.jsp.tagext.BodyTag; import org.springframework.lang.Nullable; import org.springframework.util.Assert; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/FormTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/FormTag.java index 54d0c869f6f..d4028073a18 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/FormTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/FormTag.java @@ -19,12 +19,12 @@ package org.springframework.web.servlet.tags.form; import java.nio.charset.UnsupportedCharsetException; import java.util.Map; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.PageContext; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.PageContext; import org.springframework.beans.PropertyAccessor; import org.springframework.core.Conventions; @@ -255,7 +255,7 @@ public class FormTag extends AbstractHtmlElementTag { private static final String MODEL_ATTRIBUTE = "modelAttribute"; /** - * The name of the {@link javax.servlet.jsp.PageContext} attribute under which the + * The name of the {@link jakarta.servlet.jsp.PageContext} attribute under which the * form object name is exposed. */ public static final String MODEL_ATTRIBUTE_VARIABLE_NAME = @@ -537,9 +537,9 @@ public class FormTag extends AbstractHtmlElementTag { /** * Writes the opening part of the block '{@code form}' tag and exposes - * the form object name in the {@link javax.servlet.jsp.PageContext}. + * the form object name in the {@link jakarta.servlet.jsp.PageContext}. * @param tagWriter the {@link TagWriter} to which the form content is to be written - * @return {@link javax.servlet.jsp.tagext.Tag#EVAL_BODY_INCLUDE} + * @return {@link jakarta.servlet.jsp.tagext.Tag#EVAL_BODY_INCLUDE} */ @Override protected int writeTagContent(TagWriter tagWriter) throws JspException { @@ -684,7 +684,7 @@ public class FormTag extends AbstractHtmlElementTag { /** * Closes the '{@code form}' block tag and removes the form object name - * from the {@link javax.servlet.jsp.PageContext}. + * from the {@link jakarta.servlet.jsp.PageContext}. */ @Override public int doEndTag() throws JspException { diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/HiddenInputTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/HiddenInputTag.java index 48704bff853..9e1de82fb95 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/HiddenInputTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/HiddenInputTag.java @@ -16,7 +16,7 @@ package org.springframework.web.servlet.tags.form; -import javax.servlet.jsp.JspException; +import jakarta.servlet.jsp.JspException; /** * The {@code } tag renders an HTML 'input' tag with type 'hidden' using diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/InputTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/InputTag.java index 0605bb10868..91834aea14e 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/InputTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/InputTag.java @@ -18,7 +18,7 @@ package org.springframework.web.servlet.tags.form; import java.util.Map; -import javax.servlet.jsp.JspException; +import jakarta.servlet.jsp.JspException; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/LabelTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/LabelTag.java index 6f8a91f1ec4..018c098473b 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/LabelTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/LabelTag.java @@ -16,7 +16,7 @@ package org.springframework.web.servlet.tags.form; -import javax.servlet.jsp.JspException; +import jakarta.servlet.jsp.JspException; import org.springframework.lang.Nullable; import org.springframework.util.Assert; @@ -222,7 +222,7 @@ public class LabelTag extends AbstractHtmlElementTag { /** * Writes the opening '{@code label}' tag and forces a block tag so * that body content is written correctly. - * @return {@link javax.servlet.jsp.tagext.Tag#EVAL_BODY_INCLUDE} + * @return {@link jakarta.servlet.jsp.tagext.Tag#EVAL_BODY_INCLUDE} */ @Override protected int writeTagContent(TagWriter tagWriter) throws JspException { diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/OptionTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/OptionTag.java index b9eaa89b666..3197706bc13 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/OptionTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/OptionTag.java @@ -16,9 +16,9 @@ package org.springframework.web.servlet.tags.form; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.BodyContent; -import javax.servlet.jsp.tagext.BodyTag; +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.tagext.BodyContent; +import jakarta.servlet.jsp.tagext.BodyTag; import org.springframework.lang.Nullable; import org.springframework.web.servlet.support.BindStatus; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/OptionWriter.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/OptionWriter.java index 3e75186c2e3..433ac220ede 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/OptionWriter.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/OptionWriter.java @@ -20,7 +20,7 @@ import java.beans.PropertyEditor; import java.util.Collection; import java.util.Map; -import javax.servlet.jsp.JspException; +import jakarta.servlet.jsp.JspException; import org.springframework.beans.BeanWrapper; import org.springframework.beans.PropertyAccessorFactory; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/OptionsTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/OptionsTag.java index 6e00a19d398..6a8c8ca7560 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/OptionsTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/OptionsTag.java @@ -16,7 +16,7 @@ package org.springframework.web.servlet.tags.form; -import javax.servlet.jsp.JspException; +import jakarta.servlet.jsp.JspException; import org.springframework.lang.Nullable; import org.springframework.util.Assert; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/PasswordInputTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/PasswordInputTag.java index 5eb69eedfae..ff958a4d2ed 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/PasswordInputTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/PasswordInputTag.java @@ -16,7 +16,7 @@ package org.springframework.web.servlet.tags.form; -import javax.servlet.jsp.JspException; +import jakarta.servlet.jsp.JspException; /** * The {@code } tag renders an HTML 'input' tag with type 'password' diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/RadioButtonTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/RadioButtonTag.java index cb11d8dc014..13f7b5dc4c3 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/RadioButtonTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/RadioButtonTag.java @@ -16,7 +16,7 @@ package org.springframework.web.servlet.tags.form; -import javax.servlet.jsp.JspException; +import jakarta.servlet.jsp.JspException; /** * The {@code } tag renders an HTML 'input' tag with type 'radio'. diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/SelectTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/SelectTag.java index 96bb041c46e..8c7d92b5e50 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/SelectTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/SelectTag.java @@ -19,7 +19,7 @@ package org.springframework.web.servlet.tags.form; import java.util.Collection; import java.util.Map; -import javax.servlet.jsp.JspException; +import jakarta.servlet.jsp.JspException; import org.springframework.lang.Nullable; import org.springframework.util.ObjectUtils; @@ -243,7 +243,7 @@ import org.springframework.web.servlet.support.BindStatus; public class SelectTag extends AbstractHtmlInputElementTag { /** - * The {@link javax.servlet.jsp.PageContext} attribute under + * The {@link jakarta.servlet.jsp.PageContext} attribute under * which the bound value is exposed to inner {@link OptionTag OptionTags}. */ public static final String LIST_VALUE_PAGE_ATTRIBUTE = diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/TagIdGenerator.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/TagIdGenerator.java index 24685e9826b..ff51344d1a1 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/TagIdGenerator.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/TagIdGenerator.java @@ -16,7 +16,7 @@ package org.springframework.web.servlet.tags.form; -import javax.servlet.jsp.PageContext; +import jakarta.servlet.jsp.PageContext; /** * Utility class for generating '{@code id}' attributes values for JSP tags. Given the diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/TagWriter.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/TagWriter.java index 87cedb54022..5c147ea258d 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/TagWriter.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/TagWriter.java @@ -21,8 +21,8 @@ import java.io.Writer; import java.util.ArrayDeque; import java.util.Deque; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.PageContext; +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.PageContext; import org.springframework.lang.Nullable; import org.springframework.util.Assert; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/TextareaTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/TextareaTag.java index ce6f700a723..b8d5ae2501d 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/TextareaTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/TextareaTag.java @@ -16,7 +16,7 @@ package org.springframework.web.servlet.tags.form; -import javax.servlet.jsp.JspException; +import jakarta.servlet.jsp.JspException; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/theme/CookieThemeResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/theme/CookieThemeResolver.java index a9ca3fc75fa..19e5c26a89f 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/theme/CookieThemeResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/theme/CookieThemeResolver.java @@ -16,9 +16,9 @@ package org.springframework.web.servlet.theme; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.lang.Nullable; import org.springframework.util.Assert; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/theme/FixedThemeResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/theme/FixedThemeResolver.java index 986d3972299..02a588d9a06 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/theme/FixedThemeResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/theme/FixedThemeResolver.java @@ -16,8 +16,8 @@ package org.springframework.web.servlet.theme; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/theme/SessionThemeResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/theme/SessionThemeResolver.java index 8a8faa76a76..d6270d12330 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/theme/SessionThemeResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/theme/SessionThemeResolver.java @@ -16,8 +16,8 @@ package org.springframework.web.servlet.theme; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.lang.Nullable; import org.springframework.util.StringUtils; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/theme/ThemeChangeInterceptor.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/theme/ThemeChangeInterceptor.java index 152e9b19362..81bb05a3698 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/theme/ThemeChangeInterceptor.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/theme/ThemeChangeInterceptor.java @@ -16,9 +16,9 @@ package org.springframework.web.servlet.theme; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ThemeResolver; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/AbstractCachingViewResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/AbstractCachingViewResolver.java index b7f0ebfbcc2..d7bf2fa3376 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/AbstractCachingViewResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/AbstractCachingViewResolver.java @@ -21,8 +21,8 @@ import java.util.Locale; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.lang.Nullable; import org.springframework.util.Assert; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/AbstractTemplateView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/AbstractTemplateView.java index 7a1a24cd756..3d028668df1 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/AbstractTemplateView.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/AbstractTemplateView.java @@ -20,10 +20,10 @@ import java.util.Enumeration; import java.util.LinkedHashMap; import java.util.Map; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; import org.springframework.web.servlet.support.RequestContext; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/AbstractView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/AbstractView.java index 5df004609b7..5f47cb303c6 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/AbstractView.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/AbstractView.java @@ -27,9 +27,9 @@ import java.util.Properties; import java.util.Set; import java.util.StringTokenizer; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.beans.factory.BeanNameAware; import org.springframework.http.MediaType; @@ -388,7 +388,7 @@ public abstract class AbstractView extends WebApplicationObjectSupport implement * generating download content that requires temporary caching on the * client side, typically via the response OutputStream. * @see #prepareResponse - * @see javax.servlet.http.HttpServletResponse#getOutputStream() + * @see jakarta.servlet.http.HttpServletResponse#getOutputStream() */ protected boolean generatesDownloadContent() { return false; @@ -432,7 +432,7 @@ public abstract class AbstractView extends WebApplicationObjectSupport implement /** * Expose the model objects in the given map as request attributes. * Names will be taken from the model Map. - * This method is suitable for all resources reachable by {@link javax.servlet.RequestDispatcher}. + * This method is suitable for all resources reachable by {@link jakarta.servlet.RequestDispatcher}. * @param model a Map of model objects to expose * @param request current HTTP request */ diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/ContentNegotiatingViewResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/ContentNegotiatingViewResolver.java index 2d61e8a1910..3c1699a5abd 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/ContentNegotiatingViewResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/ContentNegotiatingViewResolver.java @@ -25,9 +25,9 @@ import java.util.Locale; import java.util.Map; import java.util.Set; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.beans.factory.BeanFactoryUtils; import org.springframework.beans.factory.InitializingBean; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/DefaultRequestToViewNameTranslator.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/DefaultRequestToViewNameTranslator.java index 9d9bc6811cc..7f3bec996ec 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/DefaultRequestToViewNameTranslator.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/DefaultRequestToViewNameTranslator.java @@ -16,8 +16,8 @@ package org.springframework.web.servlet.view; -import javax.servlet.ServletRequest; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.lang.Nullable; import org.springframework.util.StringUtils; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/InternalResourceView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/InternalResourceView.java index 6deab1ca3b4..f1d050135a6 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/InternalResourceView.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/InternalResourceView.java @@ -18,10 +18,10 @@ package org.springframework.web.servlet.view; import java.util.Map; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.RequestDispatcher; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.lang.Nullable; import org.springframework.util.Assert; @@ -31,7 +31,7 @@ import org.springframework.web.util.WebUtils; /** * Wrapper for a JSP or other resource within the same web application. * Exposes model objects as request attributes and forwards the request to - * the specified resource URL using a {@link javax.servlet.RequestDispatcher}. + * the specified resource URL using a {@link jakarta.servlet.RequestDispatcher}. * *

    A URL for this view is supposed to specify a resource within the web * application, suitable for RequestDispatcher's {@code forward} or @@ -57,9 +57,9 @@ import org.springframework.web.util.WebUtils; * @author Rod Johnson * @author Juergen Hoeller * @author Rob Harrop - * @see javax.servlet.RequestDispatcher#forward - * @see javax.servlet.RequestDispatcher#include - * @see javax.servlet.ServletResponse#flushBuffer + * @see jakarta.servlet.RequestDispatcher#forward + * @see jakarta.servlet.RequestDispatcher#include + * @see jakarta.servlet.ServletResponse#flushBuffer * @see InternalResourceViewResolver * @see JstlView */ @@ -102,9 +102,9 @@ public class InternalResourceView extends AbstractUrlBasedView { * Specify whether to always include the view rather than forward to it. *

    Default is "false". Switch this flag on to enforce the use of a * Servlet include, even if a forward would be possible. - * @see javax.servlet.RequestDispatcher#forward - * @see javax.servlet.RequestDispatcher#include - * @see #useInclude(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) + * @see jakarta.servlet.RequestDispatcher#forward + * @see jakarta.servlet.RequestDispatcher#include + * @see #useInclude(jakarta.servlet.http.HttpServletRequest, jakarta.servlet.http.HttpServletResponse) */ public void setAlwaysInclude(boolean alwaysInclude) { this.alwaysInclude = alwaysInclude; @@ -238,9 +238,9 @@ public class InternalResourceView extends AbstractUrlBasedView { * @param request current HTTP request * @param response current HTTP response * @return {@code true} for include, {@code false} for forward - * @see javax.servlet.RequestDispatcher#forward - * @see javax.servlet.RequestDispatcher#include - * @see javax.servlet.ServletResponse#isCommitted + * @see jakarta.servlet.RequestDispatcher#forward + * @see jakarta.servlet.RequestDispatcher#include + * @see jakarta.servlet.ServletResponse#isCommitted * @see org.springframework.web.util.WebUtils#isIncludeRequest */ protected boolean useInclude(HttpServletRequest request, HttpServletResponse response) { diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/InternalResourceViewResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/InternalResourceViewResolver.java index e89ba2dcff7..4404be51854 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/InternalResourceViewResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/InternalResourceViewResolver.java @@ -49,7 +49,7 @@ import org.springframework.util.ClassUtils; public class InternalResourceViewResolver extends UrlBasedViewResolver { private static final boolean jstlPresent = ClassUtils.isPresent( - "javax.servlet.jsp.jstl.core.Config", InternalResourceViewResolver.class.getClassLoader()); + "jakarta.servlet.jsp.jstl.core.Config", InternalResourceViewResolver.class.getClassLoader()); @Nullable private Boolean alwaysInclude; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/JstlView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/JstlView.java index c11eb4e6c94..780f6f2b923 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/JstlView.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/JstlView.java @@ -16,8 +16,8 @@ package org.springframework.web.servlet.view; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.context.MessageSource; import org.springframework.lang.Nullable; @@ -101,7 +101,7 @@ public class JstlView extends InternalResourceView { * @param url the URL to forward to * @param messageSource the MessageSource to expose to JSTL tags * (will be wrapped with a JSTL-aware MessageSource that is aware of JSTL's - * {@code javax.servlet.jsp.jstl.fmt.localizationContext} context-param) + * {@code jakarta.servlet.jsp.jstl.fmt.localizationContext} context-param) * @see JstlUtils#getJstlAwareMessageSource */ public JstlView(String url, MessageSource messageSource) { @@ -112,7 +112,7 @@ public class JstlView extends InternalResourceView { /** * Wraps the MessageSource with a JSTL-aware MessageSource that is aware - * of JSTL's {@code javax.servlet.jsp.jstl.fmt.localizationContext} + * of JSTL's {@code jakarta.servlet.jsp.jstl.fmt.localizationContext} * context-param. * @see JstlUtils#getJstlAwareMessageSource */ diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/RedirectView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/RedirectView.java index 6ecaffcf965..a88401e65a9 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/RedirectView.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/RedirectView.java @@ -27,8 +27,8 @@ import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.beans.BeanUtils; import org.springframework.http.HttpStatus; @@ -81,7 +81,7 @@ import org.springframework.web.util.WebUtils; * @see #setContextRelative * @see #setHttp10Compatible * @see #setExposeModelAttributes - * @see javax.servlet.http.HttpServletResponse#sendRedirect + * @see jakarta.servlet.http.HttpServletResponse#sendRedirect */ public class RedirectView extends AbstractUrlBasedView implements SmartView { @@ -178,7 +178,7 @@ public class RedirectView extends AbstractUrlBasedView implements SmartView { *

    Default is "false": A URL that starts with a slash will be interpreted * as absolute, i.e. taken as-is. If "true", the context path will be * prepended to the URL in such a case. - * @see javax.servlet.http.HttpServletRequest#getContextPath + * @see jakarta.servlet.http.HttpServletRequest#getContextPath */ public void setContextRelative(boolean contextRelative) { this.contextRelative = contextRelative; @@ -193,7 +193,7 @@ public class RedirectView extends AbstractUrlBasedView implements SmartView { *

    Many HTTP 1.1 clients treat 302 just like 303, not making any * difference. However, some clients depend on 303 when redirecting * after a POST request; turn this flag off in such a scenario. - * @see javax.servlet.http.HttpServletResponse#sendRedirect + * @see jakarta.servlet.http.HttpServletResponse#sendRedirect */ public void setHttp10Compatible(boolean http10Compatible) { this.http10Compatible = http10Compatible; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/UrlBasedViewResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/UrlBasedViewResolver.java index d25f426d9e4..d25a6ac05fa 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/UrlBasedViewResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/UrlBasedViewResolver.java @@ -21,7 +21,7 @@ import java.util.Locale; import java.util.Map; import java.util.Properties; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.beans.BeanUtils; import org.springframework.context.ApplicationContext; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/ViewResolverComposite.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/ViewResolverComposite.java index 7b2441564f1..5421c4b9002 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/ViewResolverComposite.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/ViewResolverComposite.java @@ -21,7 +21,7 @@ import java.util.Collections; import java.util.List; import java.util.Locale; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import org.springframework.beans.BeansException; import org.springframework.beans.factory.InitializingBean; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractPdfStamperView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractPdfStamperView.java index c21e03560e8..356af133ef1 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractPdfStamperView.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractPdfStamperView.java @@ -20,11 +20,10 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import com.lowagie.text.pdf.PdfReader; import com.lowagie.text.pdf.PdfStamper; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.util.Assert; import org.springframework.web.servlet.view.AbstractUrlBasedView; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractPdfView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractPdfView.java index 4a26d2ecdad..8cac515a6e4 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractPdfView.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractPdfView.java @@ -20,13 +20,12 @@ import java.io.ByteArrayOutputStream; import java.io.OutputStream; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import com.lowagie.text.Document; import com.lowagie.text.DocumentException; import com.lowagie.text.PageSize; import com.lowagie.text.pdf.PdfWriter; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.web.servlet.view.AbstractView; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractXlsView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractXlsView.java index ab9ba67be3c..9727fd3a352 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractXlsView.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractXlsView.java @@ -19,10 +19,9 @@ package org.springframework.web.servlet.view.document; import java.io.IOException; import java.util.Map; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Workbook; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractXlsxStreamingView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractXlsxStreamingView.java index 1f6dccb1d5e..9b120a1b6f1 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractXlsxStreamingView.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractXlsxStreamingView.java @@ -19,9 +19,8 @@ package org.springframework.web.servlet.view.document; import java.io.IOException; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.streaming.SXSSFWorkbook; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractXlsxView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractXlsxView.java index 78d8360bbe9..888a00d1be1 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractXlsxView.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/document/AbstractXlsxView.java @@ -18,8 +18,7 @@ package org.springframework.web.servlet.view.document; import java.util.Map; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.http.HttpServletRequest; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/feed/AbstractAtomFeedView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/feed/AbstractAtomFeedView.java index 58e0893cd27..95a54eb0b4a 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/feed/AbstractAtomFeedView.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/feed/AbstractAtomFeedView.java @@ -19,11 +19,10 @@ package org.springframework.web.servlet.view.feed; import java.util.List; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import com.rometools.rome.feed.atom.Entry; import com.rometools.rome.feed.atom.Feed; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; /** * Abstract superclass for Atom Feed views, using the diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/feed/AbstractFeedView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/feed/AbstractFeedView.java index 6ea75664581..f976446a1b6 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/feed/AbstractFeedView.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/feed/AbstractFeedView.java @@ -19,12 +19,11 @@ package org.springframework.web.servlet.view.feed; import java.io.OutputStreamWriter; import java.util.Map; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import com.rometools.rome.feed.WireFeed; import com.rometools.rome.io.WireFeedOutput; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.util.StringUtils; import org.springframework.web.servlet.view.AbstractView; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/feed/AbstractRssFeedView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/feed/AbstractRssFeedView.java index aef278f791b..aa22a876892 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/feed/AbstractRssFeedView.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/feed/AbstractRssFeedView.java @@ -19,11 +19,10 @@ package org.springframework.web.servlet.view.feed; import java.util.List; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import com.rometools.rome.feed.rss.Channel; import com.rometools.rome.feed.rss.Item; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.http.MediaType; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/freemarker/FreeMarkerConfig.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/freemarker/FreeMarkerConfig.java index 42b04cfa84f..22c43eaed91 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/freemarker/FreeMarkerConfig.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/freemarker/FreeMarkerConfig.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2017 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,7 +16,6 @@ package org.springframework.web.servlet.view.freemarker; -import freemarker.ext.jsp.TaglibFactory; import freemarker.template.Configuration; /** @@ -41,10 +40,4 @@ public interface FreeMarkerConfig { */ Configuration getConfiguration(); - /** - * Return the {@link TaglibFactory} used to enable JSP tags to be - * accessed from FreeMarker templates. - */ - TaglibFactory getTaglibFactory(); - } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/freemarker/FreeMarkerConfigurer.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/freemarker/FreeMarkerConfigurer.java index 0eb2e30f3bc..9caac97a339 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/freemarker/FreeMarkerConfigurer.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/freemarker/FreeMarkerConfigurer.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,11 +19,8 @@ package org.springframework.web.servlet.view.freemarker; import java.io.IOException; import java.util.List; -import javax.servlet.ServletContext; - import freemarker.cache.ClassTemplateLoader; import freemarker.cache.TemplateLoader; -import freemarker.ext.jsp.TaglibFactory; import freemarker.template.Configuration; import freemarker.template.TemplateException; @@ -32,7 +29,6 @@ import org.springframework.context.ResourceLoaderAware; import org.springframework.lang.Nullable; import org.springframework.ui.freemarker.FreeMarkerConfigurationFactory; import org.springframework.util.Assert; -import org.springframework.web.context.ServletContextAware; /** * JavaBean to configure FreeMarker for web usage, via the "configLocation" @@ -78,14 +74,11 @@ import org.springframework.web.context.ServletContextAware; * @see FreeMarkerView */ public class FreeMarkerConfigurer extends FreeMarkerConfigurationFactory - implements FreeMarkerConfig, InitializingBean, ResourceLoaderAware, ServletContextAware { + implements FreeMarkerConfig, InitializingBean, ResourceLoaderAware { @Nullable private Configuration configuration; - @Nullable - private TaglibFactory taglibFactory; - /** * Set a preconfigured Configuration to use for the FreeMarker web config, e.g. a @@ -98,14 +91,6 @@ public class FreeMarkerConfigurer extends FreeMarkerConfigurationFactory this.configuration = configuration; } - /** - * Initialize the {@link TaglibFactory} for the given ServletContext. - */ - @Override - public void setServletContext(ServletContext servletContext) { - this.taglibFactory = new TaglibFactory(servletContext); - } - /** * Initialize FreeMarkerConfigurationFactory's Configuration @@ -140,13 +125,4 @@ public class FreeMarkerConfigurer extends FreeMarkerConfigurationFactory return this.configuration; } - /** - * Return the TaglibFactory object wrapped by this bean. - */ - @Override - public TaglibFactory getTaglibFactory() { - Assert.state(this.taglibFactory != null, "No TaglibFactory available"); - return this.taglibFactory; - } - } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/freemarker/FreeMarkerView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/freemarker/FreeMarkerView.java index faa25110ea3..7d22d659eaa 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/freemarker/FreeMarkerView.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/freemarker/FreeMarkerView.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,39 +18,22 @@ package org.springframework.web.servlet.view.freemarker; import java.io.FileNotFoundException; import java.io.IOException; -import java.util.Collections; -import java.util.Enumeration; import java.util.Locale; import java.util.Map; -import javax.servlet.GenericServlet; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - import freemarker.core.ParseException; -import freemarker.ext.jsp.TaglibFactory; -import freemarker.ext.servlet.AllHttpScopesHashModel; -import freemarker.ext.servlet.FreemarkerServlet; -import freemarker.ext.servlet.HttpRequestHashModel; -import freemarker.ext.servlet.HttpRequestParametersHashModel; -import freemarker.ext.servlet.HttpSessionHashModel; -import freemarker.ext.servlet.ServletContextHashModel; import freemarker.template.Configuration; import freemarker.template.DefaultObjectWrapperBuilder; import freemarker.template.ObjectWrapper; import freemarker.template.SimpleHash; import freemarker.template.Template; import freemarker.template.TemplateException; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactoryUtils; -import org.springframework.beans.factory.BeanInitializationException; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.context.ApplicationContextException; import org.springframework.lang.Nullable; @@ -95,12 +78,6 @@ public class FreeMarkerView extends AbstractTemplateView { @Nullable private Configuration configuration; - @Nullable - private TaglibFactory taglibFactory; - - @Nullable - private ServletContextHashModel servletContextHashModel; - /** * Set the encoding of the FreeMarker template file. Default is determined @@ -124,10 +101,6 @@ public class FreeMarkerView extends AbstractTemplateView { * Set the FreeMarker Configuration to be used by this view. *

    If this is not set, the default lookup will occur: a single {@link FreeMarkerConfig} * is expected in the current web application context, with any bean name. - * Note: using this method will cause a new instance of {@link TaglibFactory} - * to created for every single {@link FreeMarkerView} instance. This can be quite expensive - * in terms of memory and initial CPU usage. In production it is recommended that you use - * a {@link FreeMarkerConfig} which exposes a single shared {@link TaglibFactory}. */ public void setConfiguration(@Nullable Configuration configuration) { this.configuration = configuration; @@ -164,23 +137,10 @@ public class FreeMarkerView extends AbstractTemplateView { */ @Override protected void initServletContext(ServletContext servletContext) throws BeansException { - if (getConfiguration() != null) { - this.taglibFactory = new TaglibFactory(servletContext); - } - else { + if (getConfiguration() == null) { FreeMarkerConfig config = autodetectConfiguration(); setConfiguration(config.getConfiguration()); - this.taglibFactory = config.getTaglibFactory(); - } - - GenericServlet servlet = new GenericServletAdapter(); - try { - servlet.init(new DelegatingServletConfig()); - } - catch (ServletException ex) { - throw new BeanInitializationException("Initialization of GenericServlet adapter failed", ex); } - this.servletContextHashModel = new ServletContextHashModel(servlet, getObjectWrapper()); } /** @@ -306,7 +266,7 @@ public class FreeMarkerView extends AbstractTemplateView { /** * Build a FreeMarker template model for the given model Map. - *

    The default implementation builds a {@link AllHttpScopesHashModel}. + *

    The default implementation builds a {@link SimpleHash}. * @param model the model to use for rendering * @param request current HTTP request * @param response current servlet response @@ -315,33 +275,11 @@ public class FreeMarkerView extends AbstractTemplateView { protected SimpleHash buildTemplateModel(Map model, HttpServletRequest request, HttpServletResponse response) { - AllHttpScopesHashModel fmModel = new AllHttpScopesHashModel(getObjectWrapper(), getServletContext(), request); - fmModel.put(FreemarkerServlet.KEY_JSP_TAGLIBS, this.taglibFactory); - fmModel.put(FreemarkerServlet.KEY_APPLICATION, this.servletContextHashModel); - fmModel.put(FreemarkerServlet.KEY_SESSION, buildSessionModel(request, response)); - fmModel.put(FreemarkerServlet.KEY_REQUEST, new HttpRequestHashModel(request, response, getObjectWrapper())); - fmModel.put(FreemarkerServlet.KEY_REQUEST_PARAMETERS, new HttpRequestParametersHashModel(request)); + SimpleHash fmModel = new SimpleHash(getObjectWrapper()); fmModel.putAll(model); return fmModel; } - /** - * Build a FreeMarker {@link HttpSessionHashModel} for the given request, - * detecting whether a session already exists and reacting accordingly. - * @param request current HTTP request - * @param response current servlet response - * @return the FreeMarker HttpSessionHashModel - */ - private HttpSessionHashModel buildSessionModel(HttpServletRequest request, HttpServletResponse response) { - HttpSession session = request.getSession(false); - if (session != null) { - return new HttpSessionHashModel(session, getObjectWrapper()); - } - else { - return new HttpSessionHashModel(null, request, response, getObjectWrapper()); - } - } - /** * Retrieve the FreeMarker template for the given locale, * to be rendering by this view. @@ -391,49 +329,4 @@ public class FreeMarkerView extends AbstractTemplateView { template.process(model, response.getWriter()); } - - /** - * Simple adapter class that extends {@link GenericServlet}. - * Needed for JSP access in FreeMarker. - */ - @SuppressWarnings("serial") - private static class GenericServletAdapter extends GenericServlet { - - @Override - public void service(ServletRequest servletRequest, ServletResponse servletResponse) { - // no-op - } - } - - - /** - * Internal implementation of the {@link ServletConfig} interface, - * to be passed to the servlet adapter. - */ - private class DelegatingServletConfig implements ServletConfig { - - @Override - @Nullable - public String getServletName() { - return FreeMarkerView.this.getBeanName(); - } - - @Override - @Nullable - public ServletContext getServletContext() { - return FreeMarkerView.this.getServletContext(); - } - - @Override - @Nullable - public String getInitParameter(String paramName) { - return null; - } - - @Override - public Enumeration getInitParameterNames() { - return Collections.enumeration(Collections.emptySet()); - } - } - } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/groovy/GroovyMarkupView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/groovy/GroovyMarkupView.java index 8db7d12d53d..e91c0f82203 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/groovy/GroovyMarkupView.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/groovy/GroovyMarkupView.java @@ -21,11 +21,10 @@ import java.io.IOException; import java.util.Locale; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import groovy.text.Template; import groovy.text.markup.MarkupTemplateEngine; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactoryUtils; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/json/AbstractJackson2View.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/json/AbstractJackson2View.java index 9d116dc8ca0..e85cea4415e 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/json/AbstractJackson2View.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/json/AbstractJackson2View.java @@ -21,9 +21,6 @@ import java.io.IOException; import java.io.OutputStream; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import com.fasterxml.jackson.annotation.JsonView; import com.fasterxml.jackson.core.JsonEncoding; import com.fasterxml.jackson.core.JsonGenerator; @@ -31,6 +28,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.ser.FilterProvider; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.http.converter.json.MappingJacksonValue; import org.springframework.lang.Nullable; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/script/ScriptTemplateView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/script/ScriptTemplateView.java index 1593a88ae41..57e627e89cb 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/script/ScriptTemplateView.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/script/ScriptTemplateView.java @@ -32,9 +32,10 @@ import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; import javax.script.SimpleBindings; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; + +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactoryUtils; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/AbstractSpringPreparerFactory.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/AbstractSpringPreparerFactory.java deleted file mode 100644 index f6fdb90aea6..00000000000 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/AbstractSpringPreparerFactory.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.web.servlet.view.tiles3; - -import org.apache.tiles.TilesException; -import org.apache.tiles.preparer.ViewPreparer; -import org.apache.tiles.preparer.factory.PreparerFactory; -import org.apache.tiles.request.Request; - -import org.springframework.web.context.WebApplicationContext; -import org.springframework.web.servlet.DispatcherServlet; - -/** - * Abstract implementation of the Tiles {@link org.apache.tiles.preparer.factory.PreparerFactory} - * interface, obtaining the current Spring WebApplicationContext and delegating to - * {@link #getPreparer(String, org.springframework.web.context.WebApplicationContext)}. - * - * @author Juergen Hoeller - * @since 3.2 - * @see #getPreparer(String, org.springframework.web.context.WebApplicationContext) - * @see SimpleSpringPreparerFactory - * @see SpringBeanPreparerFactory - */ -public abstract class AbstractSpringPreparerFactory implements PreparerFactory { - - @Override - public ViewPreparer getPreparer(String name, Request context) { - WebApplicationContext webApplicationContext = (WebApplicationContext) context.getContext("request").get( - DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE); - if (webApplicationContext == null) { - webApplicationContext = (WebApplicationContext) context.getContext("application").get( - WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE); - if (webApplicationContext == null) { - throw new IllegalStateException("No WebApplicationContext found: no ContextLoaderListener registered?"); - } - } - return getPreparer(name, webApplicationContext); - } - - /** - * Obtain a preparer instance for the given preparer name, - * based on the given Spring WebApplicationContext. - * @param name the name of the preparer - * @param context the current Spring WebApplicationContext - * @return the preparer instance - * @throws TilesException in case of failure - */ - protected abstract ViewPreparer getPreparer(String name, WebApplicationContext context) throws TilesException; - -} diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/SimpleSpringPreparerFactory.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/SimpleSpringPreparerFactory.java deleted file mode 100644 index 0ef018d5125..00000000000 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/SimpleSpringPreparerFactory.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright 2002-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.web.servlet.view.tiles3; - -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import org.apache.tiles.TilesException; -import org.apache.tiles.preparer.PreparerException; -import org.apache.tiles.preparer.ViewPreparer; -import org.apache.tiles.preparer.factory.NoSuchPreparerException; - -import org.springframework.util.ClassUtils; -import org.springframework.web.context.WebApplicationContext; - -/** - * Tiles {@link org.apache.tiles.preparer.factory.PreparerFactory} implementation - * that expects preparer class names and builds preparer instances for those, - * creating them through the Spring ApplicationContext in order to apply - * Spring container callbacks and configured Spring BeanPostProcessors. - * - * @author Juergen Hoeller - * @since 3.2 - * @see SpringBeanPreparerFactory - */ -public class SimpleSpringPreparerFactory extends AbstractSpringPreparerFactory { - - /** Cache of shared ViewPreparer instances: bean name -> bean instance. */ - private final Map sharedPreparers = new ConcurrentHashMap<>(16); - - - @Override - protected ViewPreparer getPreparer(String name, WebApplicationContext context) throws TilesException { - // Quick check on the concurrent map first, with minimal locking. - ViewPreparer preparer = this.sharedPreparers.get(name); - if (preparer == null) { - synchronized (this.sharedPreparers) { - preparer = this.sharedPreparers.get(name); - if (preparer == null) { - try { - Class beanClass = ClassUtils.forName(name, context.getClassLoader()); - if (!ViewPreparer.class.isAssignableFrom(beanClass)) { - throw new PreparerException( - "Invalid preparer class [" + name + "]: does not implement ViewPreparer interface"); - } - preparer = (ViewPreparer) context.getAutowireCapableBeanFactory().createBean(beanClass); - this.sharedPreparers.put(name, preparer); - } - catch (ClassNotFoundException ex) { - throw new NoSuchPreparerException("Preparer class [" + name + "] not found", ex); - } - } - } - } - return preparer; - } - -} diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/SpringBeanPreparerFactory.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/SpringBeanPreparerFactory.java deleted file mode 100644 index 19e6cfec1ff..00000000000 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/SpringBeanPreparerFactory.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.web.servlet.view.tiles3; - -import org.apache.tiles.TilesException; -import org.apache.tiles.preparer.ViewPreparer; - -import org.springframework.web.context.WebApplicationContext; - -/** - * Tiles {@link org.apache.tiles.preparer.factory.PreparerFactory} implementation - * that expects preparer bean names and obtains preparer beans from the - * Spring ApplicationContext. The full bean creation process will be in - * the control of the Spring application context in this case, allowing - * for the use of scoped beans etc. - * - * @author Juergen Hoeller - * @since 3.2 - * @see SimpleSpringPreparerFactory - */ -public class SpringBeanPreparerFactory extends AbstractSpringPreparerFactory { - - @Override - protected ViewPreparer getPreparer(String name, WebApplicationContext context) throws TilesException { - return context.getBean(name, ViewPreparer.class); - } - -} diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/SpringLocaleResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/SpringLocaleResolver.java deleted file mode 100644 index 038d1ac71d6..00000000000 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/SpringLocaleResolver.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2002-2016 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.web.servlet.view.tiles3; - -import java.util.Locale; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.tiles.locale.impl.DefaultLocaleResolver; -import org.apache.tiles.request.Request; -import org.apache.tiles.request.servlet.NotAServletEnvironmentException; -import org.apache.tiles.request.servlet.ServletUtil; - -import org.springframework.web.servlet.support.RequestContextUtils; - -/** - * Tiles LocaleResolver adapter that delegates to a Spring - * {@link org.springframework.web.servlet.LocaleResolver}, exposing the - * DispatcherServlet-managed locale. - * - *

    This adapter gets automatically registered by {@link TilesConfigurer}. - * - * @author Nicolas Le Bas - * @since 3.2 - * @see org.apache.tiles.definition.UrlDefinitionsFactory#LOCALE_RESOLVER_IMPL_PROPERTY - */ -public class SpringLocaleResolver extends DefaultLocaleResolver { - - @Override - public Locale resolveLocale(Request request) { - try { - HttpServletRequest servletRequest = ServletUtil.getServletRequest(request).getRequest(); - if (servletRequest != null) { - return RequestContextUtils.getLocale(servletRequest); - } - } - catch (NotAServletEnvironmentException ex) { - // ignore - } - return super.resolveLocale(request); - } - -} diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/SpringWildcardServletTilesApplicationContext.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/SpringWildcardServletTilesApplicationContext.java deleted file mode 100644 index ee23c042cd6..00000000000 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/SpringWildcardServletTilesApplicationContext.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright 2002-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.web.servlet.view.tiles3; - -import java.io.IOException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Locale; - -import javax.servlet.ServletContext; - -import org.apache.tiles.request.ApplicationResource; -import org.apache.tiles.request.locale.URLApplicationResource; -import org.apache.tiles.request.servlet.ServletApplicationContext; - -import org.springframework.core.io.Resource; -import org.springframework.core.io.support.ResourcePatternResolver; -import org.springframework.lang.Nullable; -import org.springframework.util.CollectionUtils; -import org.springframework.util.ObjectUtils; -import org.springframework.web.context.support.ServletContextResourcePatternResolver; - -/** - * Spring-specific subclass of the Tiles ServletApplicationContext. - * - * @author Rossen Stoyanchev - * @author Juergen Hoeller - * @since 3.2 - */ -public class SpringWildcardServletTilesApplicationContext extends ServletApplicationContext { - - private final ResourcePatternResolver resolver; - - - public SpringWildcardServletTilesApplicationContext(ServletContext servletContext) { - super(servletContext); - this.resolver = new ServletContextResourcePatternResolver(servletContext); - } - - - @Override - @Nullable - public ApplicationResource getResource(String localePath) { - Collection urlSet = getResources(localePath); - if (!CollectionUtils.isEmpty(urlSet)) { - return urlSet.iterator().next(); - } - return null; - } - - @Override - @Nullable - public ApplicationResource getResource(ApplicationResource base, Locale locale) { - Collection urlSet = getResources(base.getLocalePath(locale)); - if (!CollectionUtils.isEmpty(urlSet)) { - return urlSet.iterator().next(); - } - return null; - } - - @Override - public Collection getResources(String path) { - Resource[] resources; - try { - resources = this.resolver.getResources(path); - } - catch (IOException ex) { - ((ServletContext) getContext()).log("Resource retrieval failed for path: " + path, ex); - return Collections.emptyList(); - } - if (ObjectUtils.isEmpty(resources)) { - ((ServletContext) getContext()).log("No resources found for path pattern: " + path); - return Collections.emptyList(); - } - - Collection resourceList = new ArrayList<>(resources.length); - for (Resource resource : resources) { - try { - URL url = resource.getURL(); - resourceList.add(new URLApplicationResource(url.toExternalForm(), url)); - } - catch (IOException ex) { - // Shouldn't happen with the kind of resources we're using - throw new IllegalArgumentException("No URL for " + resource, ex); - } - } - return resourceList; - } - -} diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/TilesConfigurer.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/TilesConfigurer.java deleted file mode 100644 index dbbdf0f22e9..00000000000 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/TilesConfigurer.java +++ /dev/null @@ -1,442 +0,0 @@ -/* - * Copyright 2002-2020 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.web.servlet.view.tiles3; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -import javax.el.ArrayELResolver; -import javax.el.BeanELResolver; -import javax.el.CompositeELResolver; -import javax.el.ListELResolver; -import javax.el.MapELResolver; -import javax.el.ResourceBundleELResolver; -import javax.servlet.ServletContext; -import javax.servlet.jsp.JspFactory; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.tiles.TilesContainer; -import org.apache.tiles.TilesException; -import org.apache.tiles.definition.DefinitionsFactory; -import org.apache.tiles.definition.DefinitionsReader; -import org.apache.tiles.definition.dao.BaseLocaleUrlDefinitionDAO; -import org.apache.tiles.definition.dao.CachingLocaleUrlDefinitionDAO; -import org.apache.tiles.definition.digester.DigesterDefinitionsReader; -import org.apache.tiles.el.ELAttributeEvaluator; -import org.apache.tiles.el.ScopeELResolver; -import org.apache.tiles.el.TilesContextBeanELResolver; -import org.apache.tiles.el.TilesContextELResolver; -import org.apache.tiles.evaluator.AttributeEvaluator; -import org.apache.tiles.evaluator.AttributeEvaluatorFactory; -import org.apache.tiles.evaluator.BasicAttributeEvaluatorFactory; -import org.apache.tiles.evaluator.impl.DirectAttributeEvaluator; -import org.apache.tiles.extras.complete.CompleteAutoloadTilesContainerFactory; -import org.apache.tiles.extras.complete.CompleteAutoloadTilesInitializer; -import org.apache.tiles.factory.AbstractTilesContainerFactory; -import org.apache.tiles.factory.BasicTilesContainerFactory; -import org.apache.tiles.impl.mgmt.CachingTilesContainer; -import org.apache.tiles.locale.LocaleResolver; -import org.apache.tiles.preparer.factory.PreparerFactory; -import org.apache.tiles.request.ApplicationContext; -import org.apache.tiles.request.ApplicationContextAware; -import org.apache.tiles.request.ApplicationResource; -import org.apache.tiles.startup.DefaultTilesInitializer; -import org.apache.tiles.startup.TilesInitializer; - -import org.springframework.beans.BeanUtils; -import org.springframework.beans.BeanWrapper; -import org.springframework.beans.PropertyAccessorFactory; -import org.springframework.beans.factory.DisposableBean; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.lang.Nullable; -import org.springframework.util.Assert; -import org.springframework.util.ClassUtils; -import org.springframework.web.context.ServletContextAware; - -/** - * Helper class to configure Tiles 3.x for the Spring Framework. See - * https://tiles.apache.org - * for more information about Tiles, which basically is a templating mechanism - * for web applications using JSPs and other template engines. - * - *

    The TilesConfigurer simply configures a TilesContainer using a set of files - * containing definitions, to be accessed by {@link TilesView} instances. This is a - * Spring-based alternative (for usage in Spring configuration) to the Tiles-provided - * {@code ServletContextListener} - * (e.g. {@link org.apache.tiles.extras.complete.CompleteAutoloadTilesListener} - * for usage in {@code web.xml}. - * - *

    TilesViews can be managed by any {@link org.springframework.web.servlet.ViewResolver}. - * For simple convention-based view resolution, consider using {@link TilesViewResolver}. - * - *

    A typical TilesConfigurer bean definition looks as follows: - * - *

    - * <bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
    - *   <property name="definitions">
    - *     <list>
    - *       <value>/WEB-INF/defs/general.xml</value>
    - *       <value>/WEB-INF/defs/widgets.xml</value>
    - *       <value>/WEB-INF/defs/administrator.xml</value>
    - *       <value>/WEB-INF/defs/customer.xml</value>
    - *       <value>/WEB-INF/defs/templates.xml</value>
    - *     </list>
    - *   </property>
    - * </bean>
    - * 
    - * - * The values in the list are the actual Tiles XML files containing the definitions. - * If the list is not specified, the default is {@code "/WEB-INF/tiles.xml"}. - * - *

    Note that in Tiles 3 an underscore in the name of a file containing Tiles - * definitions is used to indicate locale information, for example: - * - *

    - * <bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
    - *   <property name="definitions">
    - *     <list>
    - *       <value>/WEB-INF/defs/tiles.xml</value>
    - *       <value>/WEB-INF/defs/tiles_fr_FR.xml</value>
    - *     </list>
    - *   </property>
    - * </bean>
    - * 
    - * - * @author mick semb wever - * @author Rossen Stoyanchev - * @author Juergen Hoeller - * @since 3.2 - * @see TilesView - * @see TilesViewResolver - */ -public class TilesConfigurer implements ServletContextAware, InitializingBean, DisposableBean { - - private static final boolean tilesElPresent = - ClassUtils.isPresent("org.apache.tiles.el.ELAttributeEvaluator", TilesConfigurer.class.getClassLoader()); - - - protected final Log logger = LogFactory.getLog(getClass()); - - @Nullable - private TilesInitializer tilesInitializer; - - @Nullable - private String[] definitions; - - private boolean checkRefresh = false; - - private boolean validateDefinitions = true; - - @Nullable - private Class definitionsFactoryClass; - - @Nullable - private Class preparerFactoryClass; - - private boolean useMutableTilesContainer = false; - - @Nullable - private ServletContext servletContext; - - - /** - * Configure Tiles using a custom TilesInitializer, typically specified as an inner bean. - *

    Default is a variant of {@link org.apache.tiles.startup.DefaultTilesInitializer}, - * respecting the "definitions", "preparerFactoryClass" etc properties on this configurer. - *

    NOTE: Specifying a custom TilesInitializer effectively disables all other bean - * properties on this configurer. The entire initialization procedure is then left - * to the TilesInitializer as specified. - */ - public void setTilesInitializer(TilesInitializer tilesInitializer) { - this.tilesInitializer = tilesInitializer; - } - - /** - * Specify whether to apply Tiles 3.0's "complete-autoload" configuration. - *

    See {@link org.apache.tiles.extras.complete.CompleteAutoloadTilesContainerFactory} - * for details on the complete-autoload mode. - *

    NOTE: Specifying the complete-autoload mode effectively disables all other bean - * properties on this configurer. The entire initialization procedure is then left - * to {@link org.apache.tiles.extras.complete.CompleteAutoloadTilesInitializer}. - * @see org.apache.tiles.extras.complete.CompleteAutoloadTilesContainerFactory - * @see org.apache.tiles.extras.complete.CompleteAutoloadTilesInitializer - */ - public void setCompleteAutoload(boolean completeAutoload) { - if (completeAutoload) { - try { - this.tilesInitializer = new SpringCompleteAutoloadTilesInitializer(); - } - catch (Throwable ex) { - throw new IllegalStateException("Tiles-Extras 3.0 not available", ex); - } - } - else { - this.tilesInitializer = null; - } - } - - /** - * Set the Tiles definitions, i.e. the list of files containing the definitions. - * Default is "/WEB-INF/tiles.xml". - */ - public void setDefinitions(String... definitions) { - this.definitions = definitions; - } - - /** - * Set whether to check Tiles definition files for a refresh at runtime. - * Default is "false". - */ - public void setCheckRefresh(boolean checkRefresh) { - this.checkRefresh = checkRefresh; - } - - /** - * Set whether to validate the Tiles XML definitions. Default is "true". - */ - public void setValidateDefinitions(boolean validateDefinitions) { - this.validateDefinitions = validateDefinitions; - } - - /** - * Set the {@link org.apache.tiles.definition.DefinitionsFactory} implementation to use. - * Default is {@link org.apache.tiles.definition.UnresolvingLocaleDefinitionsFactory}, - * operating on definition resource URLs. - *

    Specify a custom DefinitionsFactory, e.g. a UrlDefinitionsFactory subclass, - * to customize the creation of Tiles Definition objects. Note that such a - * DefinitionsFactory has to be able to handle {@link java.net.URL} source objects, - * unless you configure a different TilesContainerFactory. - */ - public void setDefinitionsFactoryClass(Class definitionsFactoryClass) { - this.definitionsFactoryClass = definitionsFactoryClass; - } - - /** - * Set the {@link org.apache.tiles.preparer.factory.PreparerFactory} implementation to use. - * Default is {@link org.apache.tiles.preparer.factory.BasicPreparerFactory}, creating - * shared instances for specified preparer classes. - *

    Specify {@link SimpleSpringPreparerFactory} to autowire - * {@link org.apache.tiles.preparer.ViewPreparer} instances based on specified - * preparer classes, applying Spring's container callbacks as well as applying - * configured Spring BeanPostProcessors. If Spring's context-wide annotation-config - * has been activated, annotations in ViewPreparer classes will be automatically - * detected and applied. - *

    Specify {@link SpringBeanPreparerFactory} to operate on specified preparer - * names instead of classes, obtaining the corresponding Spring bean from - * the DispatcherServlet's application context. The full bean creation process - * will be in the control of the Spring application context in this case, - * allowing for the use of scoped beans etc. Note that you need to define one - * Spring bean definition per preparer name (as used in your Tiles definitions). - * @see SimpleSpringPreparerFactory - * @see SpringBeanPreparerFactory - */ - public void setPreparerFactoryClass(Class preparerFactoryClass) { - this.preparerFactoryClass = preparerFactoryClass; - } - - /** - * Set whether to use a MutableTilesContainer (typically the CachingTilesContainer - * implementation) for this application. Default is "false". - * @see org.apache.tiles.mgmt.MutableTilesContainer - * @see org.apache.tiles.impl.mgmt.CachingTilesContainer - */ - public void setUseMutableTilesContainer(boolean useMutableTilesContainer) { - this.useMutableTilesContainer = useMutableTilesContainer; - } - - @Override - public void setServletContext(ServletContext servletContext) { - this.servletContext = servletContext; - } - - /** - * Creates and exposes a TilesContainer for this web application, - * delegating to the TilesInitializer. - * @throws TilesException in case of setup failure - */ - @Override - public void afterPropertiesSet() throws TilesException { - Assert.state(this.servletContext != null, "No ServletContext available"); - ApplicationContext preliminaryContext = new SpringWildcardServletTilesApplicationContext(this.servletContext); - if (this.tilesInitializer == null) { - this.tilesInitializer = new SpringTilesInitializer(); - } - this.tilesInitializer.initialize(preliminaryContext); - } - - /** - * Removes the TilesContainer from this web application. - * @throws TilesException in case of cleanup failure - */ - @Override - public void destroy() throws TilesException { - if (this.tilesInitializer != null) { - this.tilesInitializer.destroy(); - } - } - - - private class SpringTilesInitializer extends DefaultTilesInitializer { - - @Override - protected AbstractTilesContainerFactory createContainerFactory(ApplicationContext context) { - return new SpringTilesContainerFactory(); - } - } - - - private class SpringTilesContainerFactory extends BasicTilesContainerFactory { - - @Override - protected TilesContainer createDecoratedContainer(TilesContainer originalContainer, ApplicationContext context) { - return (useMutableTilesContainer ? new CachingTilesContainer(originalContainer) : originalContainer); - } - - @Override - protected List getSources(ApplicationContext applicationContext) { - if (definitions != null) { - List result = new ArrayList<>(); - for (String definition : definitions) { - Collection resources = applicationContext.getResources(definition); - if (resources != null) { - result.addAll(resources); - } - } - return result; - } - else { - return super.getSources(applicationContext); - } - } - - @Override - protected BaseLocaleUrlDefinitionDAO instantiateLocaleDefinitionDao(ApplicationContext applicationContext, - LocaleResolver resolver) { - BaseLocaleUrlDefinitionDAO dao = super.instantiateLocaleDefinitionDao(applicationContext, resolver); - if (checkRefresh && dao instanceof CachingLocaleUrlDefinitionDAO) { - ((CachingLocaleUrlDefinitionDAO) dao).setCheckRefresh(true); - } - return dao; - } - - @Override - protected DefinitionsReader createDefinitionsReader(ApplicationContext context) { - DigesterDefinitionsReader reader = (DigesterDefinitionsReader) super.createDefinitionsReader(context); - reader.setValidating(validateDefinitions); - return reader; - } - - @Override - protected DefinitionsFactory createDefinitionsFactory(ApplicationContext applicationContext, - LocaleResolver resolver) { - - if (definitionsFactoryClass != null) { - DefinitionsFactory factory = BeanUtils.instantiateClass(definitionsFactoryClass); - if (factory instanceof ApplicationContextAware) { - ((ApplicationContextAware) factory).setApplicationContext(applicationContext); - } - BeanWrapper bw = PropertyAccessorFactory.forBeanPropertyAccess(factory); - if (bw.isWritableProperty("localeResolver")) { - bw.setPropertyValue("localeResolver", resolver); - } - if (bw.isWritableProperty("definitionDAO")) { - bw.setPropertyValue("definitionDAO", createLocaleDefinitionDao(applicationContext, resolver)); - } - return factory; - } - else { - return super.createDefinitionsFactory(applicationContext, resolver); - } - } - - @Override - protected PreparerFactory createPreparerFactory(ApplicationContext context) { - if (preparerFactoryClass != null) { - return BeanUtils.instantiateClass(preparerFactoryClass); - } - else { - return super.createPreparerFactory(context); - } - } - - @Override - protected LocaleResolver createLocaleResolver(ApplicationContext context) { - return new SpringLocaleResolver(); - } - - @Override - protected AttributeEvaluatorFactory createAttributeEvaluatorFactory(ApplicationContext context, - LocaleResolver resolver) { - AttributeEvaluator evaluator; - if (tilesElPresent && JspFactory.getDefaultFactory() != null) { - evaluator = new TilesElActivator().createEvaluator(); - } - else { - evaluator = new DirectAttributeEvaluator(); - } - return new BasicAttributeEvaluatorFactory(evaluator); - } - } - - - private static class SpringCompleteAutoloadTilesInitializer extends CompleteAutoloadTilesInitializer { - - @Override - protected AbstractTilesContainerFactory createContainerFactory(ApplicationContext context) { - return new SpringCompleteAutoloadTilesContainerFactory(); - } - } - - - private static class SpringCompleteAutoloadTilesContainerFactory extends CompleteAutoloadTilesContainerFactory { - - @Override - protected LocaleResolver createLocaleResolver(ApplicationContext applicationContext) { - return new SpringLocaleResolver(); - } - } - - - private class TilesElActivator { - - public AttributeEvaluator createEvaluator() { - ELAttributeEvaluator evaluator = new ELAttributeEvaluator(); - evaluator.setExpressionFactory( - JspFactory.getDefaultFactory().getJspApplicationContext(servletContext).getExpressionFactory()); - evaluator.setResolver(new CompositeELResolverImpl()); - return evaluator; - } - } - - - private static class CompositeELResolverImpl extends CompositeELResolver { - - public CompositeELResolverImpl() { - add(new ScopeELResolver()); - add(new TilesContextELResolver(new TilesContextBeanELResolver())); - add(new TilesContextBeanELResolver()); - add(new ArrayELResolver(false)); - add(new ListELResolver(false)); - add(new MapELResolver(false)); - add(new ResourceBundleELResolver()); - add(new BeanELResolver(false)); - } - } - -} diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/TilesView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/TilesView.java deleted file mode 100644 index 93238075da6..00000000000 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/TilesView.java +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Copyright 2002-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.web.servlet.view.tiles3; - -import java.util.Locale; -import java.util.Map; - -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.tiles.TilesContainer; -import org.apache.tiles.access.TilesAccess; -import org.apache.tiles.renderer.DefinitionRenderer; -import org.apache.tiles.request.AbstractRequest; -import org.apache.tiles.request.ApplicationContext; -import org.apache.tiles.request.Request; -import org.apache.tiles.request.render.Renderer; -import org.apache.tiles.request.servlet.ServletRequest; -import org.apache.tiles.request.servlet.ServletUtil; - -import org.springframework.lang.Nullable; -import org.springframework.util.Assert; -import org.springframework.web.context.request.RequestAttributes; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; -import org.springframework.web.servlet.support.JstlUtils; -import org.springframework.web.servlet.support.RequestContext; -import org.springframework.web.servlet.support.RequestContextUtils; -import org.springframework.web.servlet.view.AbstractUrlBasedView; - -/** - * {@link org.springframework.web.servlet.View} implementation that renders - * through the Tiles Request API. The "url" property is interpreted as name of a - * Tiles definition. - * - * @author Nicolas Le Bas - * @author mick semb wever - * @author Rossen Stoyanchev - * @author Sebastien Deleuze - * @since 3.2 - */ -public class TilesView extends AbstractUrlBasedView { - - @Nullable - private Renderer renderer; - - private boolean exposeJstlAttributes = true; - - private boolean alwaysInclude = false; - - @Nullable - private ApplicationContext applicationContext; - - - /** - * Set the {@link Renderer} to use. - * If not set, by default {@link DefinitionRenderer} is used. - */ - public void setRenderer(Renderer renderer) { - this.renderer = renderer; - } - - /** - * Whether to expose JSTL attributes. By default set to {@code true}. - * @see JstlUtils#exposeLocalizationContext(RequestContext) - */ - protected void setExposeJstlAttributes(boolean exposeJstlAttributes) { - this.exposeJstlAttributes = exposeJstlAttributes; - } - - /** - * Specify whether to always include the view rather than forward to it. - *

    Default is "false". Switch this flag on to enforce the use of a - * Servlet include, even if a forward would be possible. - * @since 4.1.2 - * @see TilesViewResolver#setAlwaysInclude - */ - public void setAlwaysInclude(boolean alwaysInclude) { - this.alwaysInclude = alwaysInclude; - } - - @Override - public void afterPropertiesSet() throws Exception { - super.afterPropertiesSet(); - - ServletContext servletContext = getServletContext(); - Assert.state(servletContext != null, "No ServletContext"); - this.applicationContext = ServletUtil.getApplicationContext(servletContext); - - if (this.renderer == null) { - TilesContainer container = TilesAccess.getContainer(this.applicationContext); - this.renderer = new DefinitionRenderer(container); - } - } - - - @Override - public boolean checkResource(final Locale locale) throws Exception { - Assert.state(this.renderer != null, "No Renderer set"); - - HttpServletRequest servletRequest = null; - RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); - if (requestAttributes instanceof ServletRequestAttributes) { - servletRequest = ((ServletRequestAttributes) requestAttributes).getRequest(); - } - - Request request = new ServletRequest(this.applicationContext, servletRequest, null) { - @Override - public Locale getRequestLocale() { - return locale; - } - }; - - return this.renderer.isRenderable(getUrl(), request); - } - - @Override - protected void renderMergedOutputModel(Map model, HttpServletRequest request, - HttpServletResponse response) throws Exception { - - Assert.state(this.renderer != null, "No Renderer set"); - - exposeModelAsRequestAttributes(model, request); - if (this.exposeJstlAttributes) { - JstlUtils.exposeLocalizationContext(new RequestContext(request, getServletContext())); - } - if (this.alwaysInclude) { - request.setAttribute(AbstractRequest.FORCE_INCLUDE_ATTRIBUTE_NAME, true); - } - - Request tilesRequest = createTilesRequest(request, response); - this.renderer.render(getUrl(), tilesRequest); - } - - /** - * Create a Tiles {@link Request}. - *

    This implementation creates a {@link ServletRequest}. - * @param request the current request - * @param response the current response - * @return the Tiles request - */ - protected Request createTilesRequest(final HttpServletRequest request, HttpServletResponse response) { - return new ServletRequest(this.applicationContext, request, response) { - @Override - public Locale getRequestLocale() { - return RequestContextUtils.getLocale(request); - } - }; - } - -} diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/TilesViewResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/TilesViewResolver.java deleted file mode 100644 index 33ba0451417..00000000000 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/TilesViewResolver.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright 2002-2020 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.web.servlet.view.tiles3; - -import org.apache.tiles.request.render.Renderer; - -import org.springframework.lang.Nullable; -import org.springframework.web.servlet.view.AbstractUrlBasedView; -import org.springframework.web.servlet.view.UrlBasedViewResolver; - -/** - * Convenience subclass of {@link UrlBasedViewResolver} that supports - * {@link TilesView} (i.e. Tiles definitions) and custom subclasses of it. - * - * @author Nicolas Le Bas - * @author Rossen Stoyanchev - * @author Juergen Hoeller - * @author Sebastien Deleuze - * @since 3.2 - */ -public class TilesViewResolver extends UrlBasedViewResolver { - - @Nullable - private Renderer renderer; - - @Nullable - private Boolean alwaysInclude; - - - /** - * This resolver requires {@link TilesView}. - */ - public TilesViewResolver() { - setViewClass(requiredViewClass()); - } - - - /** - * Set the {@link Renderer} to use. If not specified, a default - * {@link org.apache.tiles.renderer.DefinitionRenderer} will be used. - * @see TilesView#setRenderer(Renderer) - */ - public void setRenderer(Renderer renderer) { - this.renderer = renderer; - } - - /** - * Specify whether to always include the view rather than forward to it. - *

    Default is "false". Switch this flag on to enforce the use of a - * Servlet include, even if a forward would be possible. - * @since 4.1.2 - * @see TilesView#setAlwaysInclude - */ - public void setAlwaysInclude(Boolean alwaysInclude) { - this.alwaysInclude = alwaysInclude; - } - - - @Override - protected Class requiredViewClass() { - return TilesView.class; - } - - @Override - protected AbstractUrlBasedView instantiateView() { - return (getViewClass() == TilesView.class ? new TilesView() : super.instantiateView()); - } - - @Override - protected TilesView buildView(String viewName) throws Exception { - TilesView view = (TilesView) super.buildView(viewName); - if (this.renderer != null) { - view.setRenderer(this.renderer); - } - if (this.alwaysInclude != null) { - view.setAlwaysInclude(this.alwaysInclude); - } - return view; - } - -} diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/package-info.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/package-info.java deleted file mode 100644 index ca03c5e3c47..00000000000 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles3/package-info.java +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Support classes for the integration of - * Tiles 3 - * (the standalone version of Tiles) as Spring web view technology. - * Contains a View implementation for Tiles definitions. - */ -@NonNullApi -@NonNullFields -package org.springframework.web.servlet.view.tiles3; - -import org.springframework.lang.NonNullApi; -import org.springframework.lang.NonNullFields; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/xml/MarshallingView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/xml/MarshallingView.java index bf0e0641ca6..36b7f04cbdf 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/xml/MarshallingView.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/xml/MarshallingView.java @@ -19,11 +19,12 @@ package org.springframework.web.servlet.view.xml; import java.io.ByteArrayOutputStream; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.xml.bind.JAXBElement; import javax.xml.transform.stream.StreamResult; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.xml.bind.JAXBElement; + import org.springframework.lang.Nullable; import org.springframework.oxm.Marshaller; import org.springframework.util.Assert; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/xslt/XsltView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/xslt/XsltView.java index e0383c5e322..1d3c29b9395 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/xslt/XsltView.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/xslt/XsltView.java @@ -23,8 +23,6 @@ import java.util.Enumeration; import java.util.Map; import java.util.Properties; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import javax.xml.transform.ErrorListener; import javax.xml.transform.OutputKeys; import javax.xml.transform.Result; @@ -39,6 +37,8 @@ import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.w3c.dom.Document; import org.w3c.dom.Node; diff --git a/spring-webmvc/src/main/resources/org/springframework/web/servlet/config/spring-mvc.xsd b/spring-webmvc/src/main/resources/org/springframework/web/servlet/config/spring-mvc.xsd index c0364d28c12..49bac9fb9ff 100644 --- a/spring-webmvc/src/main/resources/org/springframework/web/servlet/config/spring-mvc.xsd +++ b/spring-webmvc/src/main/resources/org/springframework/web/servlet/config/spring-mvc.xsd @@ -251,7 +251,7 @@ As of 5.0 this executor is also used when a controller returns a reactive type that does streaming (e.g. "text/event-stream" or "application/x-ndjson") for the blocking writes to the - "javax.servlet.ServletOutputStream". + "jakarta.servlet.ServletOutputStream". ]]> @@ -1041,15 +1041,6 @@ ]]> - - - element - or declare a TilesConfigurer bean. - ]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - resolvers = compositeResolver.getViewResolvers(); @@ -800,9 +794,7 @@ public class MvcNamespaceTests { DirectFieldAccessor accessor = new DirectFieldAccessor(resolver); assertThat(accessor.getPropertyValue("viewClass")).isEqualTo(InternalResourceView.class); - assertThat(resolvers.get(2).getClass()).isEqualTo(TilesViewResolver.class); - - resolver = resolvers.get(3); + resolver = resolvers.get(2); assertThat(resolver).isInstanceOf(FreeMarkerViewResolver.class); accessor = new DirectFieldAccessor(resolver); assertThat(accessor.getPropertyValue("prefix")).isEqualTo("freemarker-"); @@ -810,34 +802,22 @@ public class MvcNamespaceTests { assertThat((String[]) accessor.getPropertyValue("viewNames")).isEqualTo(new String[] {"my*", "*Report"}); assertThat(accessor.getPropertyValue("cacheLimit")).isEqualTo(1024); - resolver = resolvers.get(4); + resolver = resolvers.get(3); assertThat(resolver).isInstanceOf(GroovyMarkupViewResolver.class); accessor = new DirectFieldAccessor(resolver); assertThat(accessor.getPropertyValue("prefix")).isEqualTo(""); assertThat(accessor.getPropertyValue("suffix")).isEqualTo(".tpl"); assertThat(accessor.getPropertyValue("cacheLimit")).isEqualTo(1024); - resolver = resolvers.get(5); + resolver = resolvers.get(4); assertThat(resolver).isInstanceOf(ScriptTemplateViewResolver.class); accessor = new DirectFieldAccessor(resolver); assertThat(accessor.getPropertyValue("prefix")).isEqualTo(""); assertThat(accessor.getPropertyValue("suffix")).isEqualTo(""); assertThat(accessor.getPropertyValue("cacheLimit")).isEqualTo(1024); + assertThat(resolvers.get(5).getClass()).isEqualTo(InternalResourceViewResolver.class); assertThat(resolvers.get(6).getClass()).isEqualTo(InternalResourceViewResolver.class); - assertThat(resolvers.get(7).getClass()).isEqualTo(InternalResourceViewResolver.class); - - TilesConfigurer tilesConfigurer = appContext.getBean(TilesConfigurer.class); - assertThat(tilesConfigurer).isNotNull(); - String[] definitions = { - "/org/springframework/web/servlet/resource/tiles/tiles1.xml", - "/org/springframework/web/servlet/resource/tiles/tiles2.xml" - }; - accessor = new DirectFieldAccessor(tilesConfigurer); - assertThat((String[]) accessor.getPropertyValue("definitions")).isEqualTo(definitions); - assertThat((boolean) accessor.getPropertyValue("checkRefresh")).isTrue(); - assertThat(accessor.getPropertyValue("definitionsFactoryClass")).isEqualTo(UnresolvingLocaleDefinitionsFactory.class); - assertThat(accessor.getPropertyValue("preparerFactoryClass")).isEqualTo(SpringBeanPreparerFactory.class); FreeMarkerConfigurer freeMarkerConfigurer = appContext.getBean(FreeMarkerConfigurer.class); assertThat(freeMarkerConfigurer).isNotNull(); @@ -874,7 +854,7 @@ public class MvcNamespaceTests { List resolvers = compositeResolver.getViewResolvers(); assertThat(resolvers.get(0).getClass()).isEqualTo(ContentNegotiatingViewResolver.class); ContentNegotiatingViewResolver cnvr = (ContentNegotiatingViewResolver) resolvers.get(0); - assertThat(cnvr.getViewResolvers().size()).isEqualTo(6); + assertThat(cnvr.getViewResolvers().size()).isEqualTo(5); assertThat(cnvr.getDefaultViews().size()).isEqualTo(1); assertThat(cnvr.isUseNotAcceptableStatusCode()).isTrue(); diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/DefaultServletHandlerConfigurerTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/DefaultServletHandlerConfigurerTests.java index 1566076324e..169ca70a4f5 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/DefaultServletHandlerConfigurerTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/DefaultServletHandlerConfigurerTests.java @@ -16,8 +16,7 @@ package org.springframework.web.servlet.config.annotation; -import javax.servlet.RequestDispatcher; - +import jakarta.servlet.RequestDispatcher; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/ViewResolutionIntegrationTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/ViewResolutionIntegrationTests.java index e87be4ebe25..bdae7e1b78d 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/ViewResolutionIntegrationTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/ViewResolutionIntegrationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,8 +18,7 @@ package org.springframework.web.servlet.config.annotation; import java.io.IOException; -import javax.servlet.ServletException; - +import jakarta.servlet.ServletException; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.Bean; @@ -33,7 +32,6 @@ import org.springframework.web.servlet.DispatcherServlet; import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer; import org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver; import org.springframework.web.servlet.view.groovy.GroovyMarkupConfigurer; -import org.springframework.web.servlet.view.tiles3.TilesConfigurer; import org.springframework.web.testfixture.servlet.MockHttpServletRequest; import org.springframework.web.testfixture.servlet.MockHttpServletResponse; import org.springframework.web.testfixture.servlet.MockServletConfig; @@ -56,12 +54,6 @@ public class ViewResolutionIntegrationTests { assertThat(response.getContentAsString()).isEqualTo("Hello World!"); } - @Test - public void tiles() throws Exception { - MockHttpServletResponse response = runTest(TilesWebConfig.class); - assertThat(response.getForwardedUrl()).isEqualTo("/WEB-INF/index.jsp"); - } - @Test public void groovyMarkup() throws Exception { MockHttpServletResponse response = runTest(GroovyMarkupWebConfig.class); @@ -75,13 +67,6 @@ public class ViewResolutionIntegrationTests { .withMessageContaining("In addition to a FreeMarker view resolver "); } - @Test - public void tilesInvalidConfig() throws Exception { - assertThatExceptionOfType(RuntimeException.class).isThrownBy(() -> - runTest(InvalidTilesWebConfig.class)) - .withMessageContaining("In addition to a Tiles view resolver "); - } - @Test public void groovyMarkupInvalidConfig() throws Exception { assertThatExceptionOfType(RuntimeException.class).isThrownBy(() -> @@ -151,22 +136,6 @@ public class ViewResolutionIntegrationTests { } } - @Configuration - static class TilesWebConfig extends AbstractWebConfig { - - @Override - public void configureViewResolvers(ViewResolverRegistry registry) { - registry.tiles(); - } - - @Bean - public TilesConfigurer tilesConfigurer() { - TilesConfigurer configurer = new TilesConfigurer(); - configurer.setDefinitions("/WEB-INF/tiles.xml"); - return configurer; - } - } - @Configuration static class GroovyMarkupWebConfig extends AbstractWebConfig { @@ -192,15 +161,6 @@ public class ViewResolutionIntegrationTests { } } - @Configuration - static class InvalidTilesWebConfig extends WebMvcConfigurationSupport { - - @Override - public void configureViewResolvers(ViewResolverRegistry registry) { - registry.tiles(); - } - } - @Configuration static class InvalidGroovyMarkupWebConfig extends WebMvcConfigurationSupport { diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/ViewResolverRegistryTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/ViewResolverRegistryTests.java index e3373b82923..4986338605c 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/ViewResolverRegistryTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/ViewResolverRegistryTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -36,8 +36,6 @@ import org.springframework.web.servlet.view.groovy.GroovyMarkupViewResolver; import org.springframework.web.servlet.view.json.MappingJackson2JsonView; import org.springframework.web.servlet.view.script.ScriptTemplateConfigurer; import org.springframework.web.servlet.view.script.ScriptTemplateViewResolver; -import org.springframework.web.servlet.view.tiles3.TilesConfigurer; -import org.springframework.web.servlet.view.tiles3.TilesViewResolver; import org.springframework.web.servlet.view.xml.MarshallingView; import static org.assertj.core.api.Assertions.assertThat; @@ -57,7 +55,6 @@ public class ViewResolverRegistryTests { public void setup() { StaticWebApplicationContext context = new StaticWebApplicationContext(); context.registerSingleton("freeMarkerConfigurer", FreeMarkerConfigurer.class); - context.registerSingleton("tilesConfigurer", TilesConfigurer.class); context.registerSingleton("groovyMarkupConfigurer", GroovyMarkupConfigurer.class); context.registerSingleton("scriptTemplateConfigurer", ScriptTemplateConfigurer.class); @@ -131,12 +128,6 @@ public class ViewResolverRegistryTests { assertThat(this.registry.getViewResolvers().get(1).getClass()).isEqualTo(InternalResourceViewResolver.class); } - @Test - public void tiles() { - this.registry.tiles(); - checkAndGetResolver(TilesViewResolver.class); - } - @Test public void freeMarker() { this.registry.freeMarker().prefix("/").suffix(".fmt").cache(false); diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupportTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupportTests.java index dad6504f9a1..c53cc812bf4 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupportTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupportTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2020 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,15 +16,14 @@ package org.springframework.web.servlet.config.annotation; +import java.util.Date; import java.util.List; import java.util.Locale; import java.util.Map; -import javax.servlet.http.HttpServletRequest; - import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.xml.XmlMapper; -import org.joda.time.DateTime; +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.Test; import org.springframework.beans.DirectFieldAccessor; @@ -437,7 +436,7 @@ public class WebMvcConfigurationSupportTests { @RequestMapping("/foo/{id}/bar/{date}") public HttpEntity methodWithTwoPathVariables(@PathVariable Integer id, - @DateTimeFormat(iso = ISO.DATE) @PathVariable DateTime date) { + @DateTimeFormat(iso = ISO.DATE) @PathVariable Date date) { return null; } } diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultEntityResponseBuilderTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultEntityResponseBuilderTests.java index 0d7553bb80d..00969fbb85c 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultEntityResponseBuilderTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultEntityResponseBuilderTests.java @@ -25,9 +25,8 @@ import java.util.EnumSet; import java.util.List; import java.util.Set; -import javax.servlet.ServletException; -import javax.servlet.http.Cookie; - +import jakarta.servlet.ServletException; +import jakarta.servlet.http.Cookie; import org.junit.jupiter.api.Test; import org.springframework.core.ParameterizedTypeReference; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultRenderingResponseTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultRenderingResponseTests.java index 56fec0a442b..6ffb5da58a8 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultRenderingResponseTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultRenderingResponseTests.java @@ -23,8 +23,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; -import javax.servlet.http.Cookie; - +import jakarta.servlet.http.Cookie; import org.junit.jupiter.api.Test; import org.springframework.http.HttpHeaders; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultServerRequestBuilderTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultServerRequestBuilderTests.java index 254f84c67ab..e1de828a532 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultServerRequestBuilderTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultServerRequestBuilderTests.java @@ -21,9 +21,8 @@ import java.net.InetSocketAddress; import java.util.Collections; import java.util.List; -import javax.servlet.ServletException; -import javax.servlet.http.Cookie; - +import jakarta.servlet.ServletException; +import jakarta.servlet.http.Cookie; import org.junit.jupiter.api.Test; import org.springframework.http.HttpMethod; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultServerRequestTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultServerRequestTests.java index 07233b27ece..4a5a19d276f 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultServerRequestTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultServerRequestTests.java @@ -32,9 +32,8 @@ import java.util.Map; import java.util.Optional; import java.util.OptionalLong; -import javax.servlet.http.Cookie; -import javax.servlet.http.Part; - +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.Part; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultServerResponseBuilderTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultServerResponseBuilderTests.java index 23621b73197..d70ffb3a8e8 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultServerResponseBuilderTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultServerResponseBuilderTests.java @@ -27,8 +27,7 @@ import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; -import javax.servlet.http.Cookie; - +import jakarta.servlet.http.Cookie; import org.junit.jupiter.api.Test; import org.reactivestreams.Publisher; import reactor.core.publisher.Mono; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/function/ResourceHandlerFunctionTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/function/ResourceHandlerFunctionTests.java index ccefb80b451..a5cfa327b7d 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/function/ResourceHandlerFunctionTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/function/ResourceHandlerFunctionTests.java @@ -23,8 +23,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.EnumSet; -import javax.servlet.ServletException; - +import jakarta.servlet.ServletException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/handler/BeanNameUrlHandlerMappingTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/handler/BeanNameUrlHandlerMappingTests.java index 650790d502a..5e166b87f35 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/handler/BeanNameUrlHandlerMappingTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/handler/BeanNameUrlHandlerMappingTests.java @@ -16,8 +16,7 @@ package org.springframework.web.servlet.handler; -import javax.servlet.ServletException; - +import jakarta.servlet.ServletException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/handler/CorsAbstractHandlerMappingTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/handler/CorsAbstractHandlerMappingTests.java index 68e6dc066e0..3c4fa750f4f 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/handler/CorsAbstractHandlerMappingTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/handler/CorsAbstractHandlerMappingTests.java @@ -19,8 +19,8 @@ package org.springframework.web.servlet.handler; import java.util.Collections; import java.util.stream.Stream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/handler/HandlerMappingIntrospectorTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/handler/HandlerMappingIntrospectorTests.java index 745d642b5ad..d020753e799 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/handler/HandlerMappingIntrospectorTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/handler/HandlerMappingIntrospectorTests.java @@ -21,8 +21,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/handler/HandlerMappingTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/handler/HandlerMappingTests.java index 7273780514e..62b3a895d3a 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/handler/HandlerMappingTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/handler/HandlerMappingTests.java @@ -21,8 +21,7 @@ import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.provider.Arguments; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/handler/HandlerMethodMappingTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/handler/HandlerMethodMappingTests.java index d610c30215c..ccda745f793 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/handler/HandlerMethodMappingTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/handler/HandlerMethodMappingTests.java @@ -23,8 +23,7 @@ import java.util.Comparator; import java.util.List; import java.util.Set; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/handler/MappedInterceptorTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/handler/MappedInterceptorTests.java index d404c32346a..5bff705f31f 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/handler/MappedInterceptorTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/handler/MappedInterceptorTests.java @@ -20,9 +20,8 @@ import java.util.Map; import java.util.function.Function; import java.util.stream.Stream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.Test; import org.springframework.util.PathMatcher; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/handler/SimpleMappingExceptionResolverTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/handler/SimpleMappingExceptionResolverTests.java index 0b284c94734..7f8d8e8f5d2 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/handler/SimpleMappingExceptionResolverTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/handler/SimpleMappingExceptionResolverTests.java @@ -19,8 +19,7 @@ package org.springframework.web.servlet.handler; import java.util.Collections; import java.util.Properties; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/i18n/AcceptHeaderLocaleResolverTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/i18n/AcceptHeaderLocaleResolverTests.java index c7bd35954a4..90374faf6e1 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/i18n/AcceptHeaderLocaleResolverTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/i18n/AcceptHeaderLocaleResolverTests.java @@ -20,8 +20,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.Locale; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.Test; import org.springframework.web.testfixture.servlet.MockHttpServletRequest; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/i18n/CookieLocaleResolverTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/i18n/CookieLocaleResolverTests.java index 185ca9d3f69..bb2846759d4 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/i18n/CookieLocaleResolverTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/i18n/CookieLocaleResolverTests.java @@ -19,9 +19,8 @@ package org.springframework.web.servlet.i18n; import java.util.Locale; import java.util.TimeZone; -import javax.servlet.ServletException; -import javax.servlet.http.Cookie; - +import jakarta.servlet.ServletException; +import jakarta.servlet.http.Cookie; import org.junit.jupiter.api.Test; import org.springframework.context.i18n.LocaleContext; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/i18n/SessionLocaleResolverTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/i18n/SessionLocaleResolverTests.java index d9f1cc61238..cd702850ea1 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/i18n/SessionLocaleResolverTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/i18n/SessionLocaleResolverTests.java @@ -18,8 +18,7 @@ package org.springframework.web.servlet.i18n; import java.util.Locale; -import javax.servlet.http.HttpSession; - +import jakarta.servlet.http.HttpSession; import org.junit.jupiter.api.Test; import org.springframework.web.testfixture.servlet.MockHttpServletRequest; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/ControllerTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/ControllerTests.java index a5983b9e557..7da7119b54b 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/ControllerTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/ControllerTests.java @@ -18,15 +18,14 @@ package org.springframework.web.servlet.mvc; import java.util.Properties; -import javax.servlet.RequestDispatcher; -import javax.servlet.Servlet; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.RequestDispatcher; +import jakarta.servlet.Servlet; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.Test; import org.springframework.web.context.support.StaticWebApplicationContext; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/annotation/CglibProxyControllerTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/annotation/CglibProxyControllerTests.java index d2718fc7690..3fbdadb0533 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/annotation/CglibProxyControllerTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/annotation/CglibProxyControllerTests.java @@ -19,8 +19,7 @@ package org.springframework.web.servlet.mvc.annotation; import java.io.IOException; import java.io.Writer; -import javax.servlet.ServletException; - +import jakarta.servlet.ServletException; import org.junit.jupiter.api.Test; import org.springframework.aop.Pointcut; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/annotation/JdkProxyControllerTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/annotation/JdkProxyControllerTests.java index a7ab53498d5..a1de84fb2c8 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/annotation/JdkProxyControllerTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/annotation/JdkProxyControllerTests.java @@ -19,8 +19,7 @@ package org.springframework.web.servlet.mvc.annotation; import java.io.IOException; import java.io.Writer; -import javax.servlet.ServletException; - +import jakarta.servlet.ServletException; import org.junit.jupiter.api.Test; import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/condition/CompositeRequestConditionTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/condition/CompositeRequestConditionTests.java index fbc5b58b5c8..9258f9cb9e9 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/condition/CompositeRequestConditionTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/condition/CompositeRequestConditionTests.java @@ -16,8 +16,7 @@ package org.springframework.web.servlet.mvc.condition; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/condition/PathPatternsRequestConditionTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/condition/PathPatternsRequestConditionTests.java index 52071bd97aa..08966482856 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/condition/PathPatternsRequestConditionTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/condition/PathPatternsRequestConditionTests.java @@ -16,8 +16,7 @@ package org.springframework.web.servlet.mvc.condition; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.Test; import org.springframework.web.testfixture.servlet.MockHttpServletRequest; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/condition/PatternsRequestConditionTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/condition/PatternsRequestConditionTests.java index 5150c0325bb..41cda092523 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/condition/PatternsRequestConditionTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/condition/PatternsRequestConditionTests.java @@ -18,8 +18,7 @@ package org.springframework.web.servlet.mvc.condition; import java.util.Collections; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.Test; import org.springframework.web.testfixture.servlet.MockHttpServletRequest; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/condition/ProducesRequestConditionTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/condition/ProducesRequestConditionTests.java index fc1d77166ac..15244e1baa2 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/condition/ProducesRequestConditionTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/condition/ProducesRequestConditionTests.java @@ -20,8 +20,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/condition/RequestConditionHolderTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/condition/RequestConditionHolderTests.java index 786df9c16a0..6aa86cbfa90 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/condition/RequestConditionHolderTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/condition/RequestConditionHolderTests.java @@ -16,8 +16,7 @@ package org.springframework.web.servlet.mvc.condition; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.Test; import org.springframework.web.bind.annotation.RequestMethod; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/condition/RequestMethodsRequestConditionTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/condition/RequestMethodsRequestConditionTests.java index c0dbd0a6242..7cb38ac95a1 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/condition/RequestMethodsRequestConditionTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/condition/RequestMethodsRequestConditionTests.java @@ -18,9 +18,8 @@ package org.springframework.web.servlet.mvc.condition; import java.util.Collections; -import javax.servlet.DispatcherType; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.DispatcherType; +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.Test; import org.springframework.http.HttpHeaders; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/RequestMappingInfoHandlerMappingTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/RequestMappingInfoHandlerMappingTests.java index 32277c53bee..fb36283ffa6 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/RequestMappingInfoHandlerMappingTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/RequestMappingInfoHandlerMappingTests.java @@ -25,8 +25,7 @@ import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/RequestMappingInfoTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/RequestMappingInfoTests.java index 11a435d25d9..4df25abdf9d 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/RequestMappingInfoTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/RequestMappingInfoTests.java @@ -21,8 +21,7 @@ import java.util.Comparator; import java.util.List; import java.util.stream.Stream; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.Test; import org.springframework.http.HttpHeaders; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/AbstractRequestAttributesArgumentResolverTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/AbstractRequestAttributesArgumentResolverTests.java index 7ec195b1e3d..a3f3082b9d7 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/AbstractRequestAttributesArgumentResolverTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/AbstractRequestAttributesArgumentResolverTests.java @@ -19,9 +19,8 @@ package org.springframework.web.servlet.mvc.method.annotation; import java.lang.reflect.Method; import java.util.Optional; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/AbstractServletHandlerMethodTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/AbstractServletHandlerMethodTests.java index c9cfaf7ec41..3d99f5a4f1a 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/AbstractServletHandlerMethodTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/AbstractServletHandlerMethodTests.java @@ -16,8 +16,7 @@ package org.springframework.web.servlet.mvc.method.annotation; -import javax.servlet.ServletException; - +import jakarta.servlet.ServletException; import org.junit.jupiter.api.AfterEach; import org.springframework.beans.factory.config.BeanDefinition; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/CrossOriginTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/CrossOriginTests.java index f4fa67d7ce8..8a4fbb7f93b 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/CrossOriginTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/CrossOriginTests.java @@ -25,8 +25,7 @@ import java.util.Collections; import java.util.Properties; import java.util.stream.Stream; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.BeforeEach; import org.springframework.beans.DirectFieldAccessor; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/HttpEntityMethodProcessorMockTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/HttpEntityMethodProcessorMockTests.java index a46de7c7b80..5351a27e3cf 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/HttpEntityMethodProcessorMockTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/HttpEntityMethodProcessorMockTests.java @@ -30,8 +30,7 @@ import java.util.Collections; import java.util.Date; import java.util.Set; -import javax.servlet.FilterChain; - +import jakarta.servlet.FilterChain; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/HttpEntityMethodProcessorTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/HttpEntityMethodProcessorTests.java index f870aca3ca0..ebcbc87f7cd 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/HttpEntityMethodProcessorTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/HttpEntityMethodProcessorTests.java @@ -22,12 +22,11 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import javax.servlet.FilterChain; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import jakarta.servlet.FilterChain; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/MvcUriComponentsBuilderTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/MvcUriComponentsBuilderTests.java index 99abb24debd..bce9d4f1a6b 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/MvcUriComponentsBuilderTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/MvcUriComponentsBuilderTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2020 the original author or authors. + * Copyright 2012-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,13 +22,11 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.util.Arrays; +import java.util.Date; import java.util.List; import java.util.Optional; -import javax.servlet.http.HttpServletRequest; - -import org.joda.time.DateTime; -import org.joda.time.format.ISODateTimeFormat; +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -202,11 +200,10 @@ public class MvcUriComponentsBuilderTests { @Test public void fromMethodNameTwoPathVariables() { - DateTime now = DateTime.now(); UriComponents uriComponents = fromMethodName( - ControllerWithMethods.class, "methodWithTwoPathVariables", 1, now).build(); + ControllerWithMethods.class, "methodWithTwoPathVariables", 1, "2009-10-31").build(); - assertThat(uriComponents.getPath()).isEqualTo("/something/1/foo/" + ISODateTimeFormat.date().print(now)); + assertThat(uriComponents.getPath()).isEqualTo("/something/1/foo/2009-10-31"); } @Test @@ -549,7 +546,7 @@ public class MvcUriComponentsBuilderTests { @RequestMapping("/{id}/foo/{date}") HttpEntity methodWithTwoPathVariables( - @PathVariable Integer id, @DateTimeFormat(iso = ISO.DATE) @PathVariable DateTime date) { + @PathVariable Integer id, @DateTimeFormat(iso = ISO.DATE) @PathVariable Date date) { return null; } diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/PrincipalMethodArgumentResolverTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/PrincipalMethodArgumentResolverTests.java index c32813c40cc..cb32bf088bf 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/PrincipalMethodArgumentResolverTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/PrincipalMethodArgumentResolverTests.java @@ -23,8 +23,7 @@ import java.lang.annotation.Target; import java.lang.reflect.Method; import java.security.Principal; -import javax.servlet.ServletRequest; - +import jakarta.servlet.ServletRequest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapterIntegrationTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapterIntegrationTests.java index 29a75dcdbe9..9d3a147ac32 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapterIntegrationTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapterIntegrationTests.java @@ -35,11 +35,10 @@ import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.validation.Valid; - +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestPartIntegrationTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestPartIntegrationTests.java index 8e69fc631fa..4370f9a471e 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestPartIntegrationTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestPartIntegrationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,8 +24,7 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import javax.servlet.MultipartConfigElement; - +import jakarta.servlet.MultipartConfigElement; import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.NetworkConnector; import org.eclipse.jetty.server.Server; @@ -61,7 +60,6 @@ import org.springframework.web.client.RestTemplate; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartResolver; -import org.springframework.web.multipart.commons.CommonsMultipartResolver; import org.springframework.web.multipart.support.StandardServletMultipartResolver; import org.springframework.web.servlet.DispatcherServlet; import org.springframework.web.servlet.config.annotation.EnableWebMvc; @@ -93,16 +91,8 @@ public class RequestPartIntegrationTests { ServletContextHandler handler = new ServletContextHandler(); handler.setContextPath("/"); - - Class config = CommonsMultipartResolverTestConfig.class; - ServletHolder commonsResolverServlet = new ServletHolder(DispatcherServlet.class); - commonsResolverServlet.setInitParameter("contextConfigLocation", config.getName()); - commonsResolverServlet.setInitParameter("contextClass", AnnotationConfigWebApplicationContext.class.getName()); - handler.addServlet(commonsResolverServlet, "/commons-resolver/*"); - - config = StandardMultipartResolverTestConfig.class; ServletHolder standardResolverServlet = new ServletHolder(DispatcherServlet.class); - standardResolverServlet.setInitParameter("contextConfigLocation", config.getName()); + standardResolverServlet.setInitParameter("contextConfigLocation", StandardMultipartResolverTestConfig.class.getName()); standardResolverServlet.setInitParameter("contextClass", AnnotationConfigWebApplicationContext.class.getName()); standardResolverServlet.getRegistration().setMultipartConfig(new MultipartConfigElement("")); handler.addServlet(standardResolverServlet, "/standard-resolver/*"); @@ -141,12 +131,6 @@ public class RequestPartIntegrationTests { } - @Test - public void commonsMultipartResolver() throws Exception { - testCreate(baseUrl + "/commons-resolver/test", "Jason"); - testCreate(baseUrl + "/commons-resolver/test", "Arjen"); - } - @Test public void standardMultipartResolver() throws Exception { testCreate(baseUrl + "/standard-resolver/test", "Jason"); @@ -207,17 +191,6 @@ public class RequestPartIntegrationTests { } - @Configuration - @SuppressWarnings("unused") - static class CommonsMultipartResolverTestConfig extends RequestPartTestConfig { - - @Bean - public MultipartResolver multipartResolver() { - return new CommonsMultipartResolver(); - } - } - - @Configuration @SuppressWarnings("unused") static class StandardMultipartResolverTestConfig extends RequestPartTestConfig { diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestPartMethodArgumentResolverTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestPartMethodArgumentResolverTests.java index 9cf34618a62..e97e807c058 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestPartMethodArgumentResolverTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestPartMethodArgumentResolverTests.java @@ -23,10 +23,9 @@ import java.util.Collections; import java.util.List; import java.util.Optional; -import javax.servlet.http.Part; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; - +import jakarta.servlet.http.Part; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessorMockTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessorMockTests.java index b805e00a499..e4cae1627c4 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessorMockTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessorMockTests.java @@ -23,9 +23,8 @@ import java.util.Collections; import java.util.List; import java.util.Optional; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; - +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ResponseEntityExceptionHandlerTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ResponseEntityExceptionHandlerTests.java index e5fa5c68473..dfc40e2807c 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ResponseEntityExceptionHandlerTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ResponseEntityExceptionHandlerTests.java @@ -21,8 +21,7 @@ import java.util.Arrays; import java.util.EnumSet; import java.util.List; -import javax.servlet.ServletException; - +import jakarta.servlet.ServletException; import org.junit.jupiter.api.Test; import org.springframework.beans.ConversionNotSupportedException; @@ -287,7 +286,7 @@ public class ResponseEntityExceptionHandlerTests { // SPR-9653 if (HttpStatus.INTERNAL_SERVER_ERROR.equals(responseEntity.getStatusCode())) { - assertThat(this.servletRequest.getAttribute("javax.servlet.error.exception")).isSameAs(ex); + assertThat(this.servletRequest.getAttribute("jakarta.servlet.error.exception")).isSameAs(ex); } this.defaultExceptionResolver.resolveException(this.servletRequest, this.servletResponse, null, ex); diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletAnnotationControllerHandlerMethodTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletAnnotationControllerHandlerMethodTests.java index 6957bdfc828..8f07c7071f8 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletAnnotationControllerHandlerMethodTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletAnnotationControllerHandlerMethodTests.java @@ -49,18 +49,17 @@ import java.util.Set; import java.util.UUID; import java.util.stream.Stream; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; -import javax.servlet.http.Part; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.xml.bind.annotation.XmlRootElement; - +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; +import jakarta.servlet.http.Part; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.xml.bind.annotation.XmlRootElement; import org.junit.jupiter.api.Test; import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletCookieValueMethodArgumentResolverTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletCookieValueMethodArgumentResolverTests.java index 8b34cccd5a2..80507cad758 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletCookieValueMethodArgumentResolverTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletCookieValueMethodArgumentResolverTests.java @@ -18,8 +18,7 @@ package org.springframework.web.servlet.mvc.method.annotation; import java.lang.reflect.Method; -import javax.servlet.http.Cookie; - +import jakarta.servlet.http.Cookie; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletInvocableHandlerMethodTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletInvocableHandlerMethodTests.java index d26e4cc0c1f..ba386fce36b 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletInvocableHandlerMethodTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletInvocableHandlerMethodTests.java @@ -24,9 +24,8 @@ import java.util.Collections; import java.util.List; import java.util.Locale; -import javax.servlet.FilterChain; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.FilterChain; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.Test; import reactor.core.publisher.Flux; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletRequestMethodArgumentResolverTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletRequestMethodArgumentResolverTests.java index aacbd3e0082..b6f8dc0027c 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletRequestMethodArgumentResolverTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletRequestMethodArgumentResolverTests.java @@ -28,10 +28,9 @@ import java.time.ZoneId; import java.util.Locale; import java.util.TimeZone; -import javax.servlet.ServletRequest; -import javax.servlet.http.HttpSession; -import javax.servlet.http.PushBuilder; - +import jakarta.servlet.ServletRequest; +import jakarta.servlet.http.HttpSession; +import jakarta.servlet.http.PushBuilder; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.Mockito; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletResponseMethodArgumentResolverTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletResponseMethodArgumentResolverTests.java index e467caa94d8..b0ed4c8b987 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletResponseMethodArgumentResolverTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletResponseMethodArgumentResolverTests.java @@ -20,8 +20,7 @@ import java.io.OutputStream; import java.io.Writer; import java.lang.reflect.Method; -import javax.servlet.ServletResponse; - +import jakarta.servlet.ServletResponse; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/UriTemplateServletAnnotationControllerHandlerMethodTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/UriTemplateServletAnnotationControllerHandlerMethodTests.java index 9944159df7f..464fad986b3 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/UriTemplateServletAnnotationControllerHandlerMethodTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/UriTemplateServletAnnotationControllerHandlerMethodTests.java @@ -27,8 +27,8 @@ import java.util.Locale; import java.util.Map; import java.util.stream.Stream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.beans.factory.support.RootBeanDefinition; import org.springframework.beans.propertyeditors.CustomDateEditor; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/support/DefaultHandlerExceptionResolverTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/support/DefaultHandlerExceptionResolverTests.java index e2574d4224c..ed98ab46efa 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/support/DefaultHandlerExceptionResolverTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/support/DefaultHandlerExceptionResolverTests.java @@ -216,7 +216,7 @@ public class DefaultHandlerExceptionResolverTests { assertThat(response.getStatus()).as("Invalid status code").isEqualTo(500); // SPR-9653 - assertThat(request.getAttribute("javax.servlet.error.exception")).isSameAs(ex); + assertThat(request.getAttribute("jakarta.servlet.error.exception")).isSameAs(ex); } @Test // SPR-14669 diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/AppCacheManifestTransformerTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/AppCacheManifestTransformerTests.java index 4b12502b8e5..8d7057058d9 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/AppCacheManifestTransformerTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/AppCacheManifestTransformerTests.java @@ -20,8 +20,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandlerIntegrationTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandlerIntegrationTests.java index a55bd6f8434..85a8644bb11 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandlerIntegrationTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandlerIntegrationTests.java @@ -21,8 +21,7 @@ import java.net.MalformedURLException; import java.nio.charset.StandardCharsets; import java.util.stream.Stream; -import javax.servlet.ServletException; - +import jakarta.servlet.ServletException; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandlerTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandlerTests.java index 6ced3a30d33..e7f87759cdb 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandlerTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandlerTests.java @@ -22,8 +22,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceTransformerSupportTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceTransformerSupportTests.java index 0e6da211e4e..77af3375841 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceTransformerSupportTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceTransformerSupportTests.java @@ -19,8 +19,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceUrlEncodingFilterTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceUrlEncodingFilterTests.java index 0e7ba774586..941edbadb9d 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceUrlEncodingFilterTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceUrlEncodingFilterTests.java @@ -20,11 +20,10 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceUrlProviderJavaConfigTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceUrlProviderJavaConfigTests.java index 18c6b229d91..82e8e6f18fe 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceUrlProviderJavaConfigTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceUrlProviderJavaConfigTests.java @@ -16,10 +16,9 @@ package org.springframework.web.servlet.resource; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/WebJarsResourceResolverTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/WebJarsResourceResolverTests.java index 1a9fbae7f41..0c65d74038e 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/WebJarsResourceResolverTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/WebJarsResourceResolverTests.java @@ -19,8 +19,7 @@ package org.springframework.web.servlet.resource; import java.util.Collections; import java.util.List; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/support/AnnotationConfigDispatcherServletInitializerTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/support/AnnotationConfigDispatcherServletInitializerTests.java index aded6595300..9339486bd37 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/support/AnnotationConfigDispatcherServletInitializerTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/support/AnnotationConfigDispatcherServletInitializerTests.java @@ -22,15 +22,14 @@ import java.util.EventListener; import java.util.LinkedHashMap; import java.util.Map; -import javax.servlet.DispatcherType; -import javax.servlet.Filter; -import javax.servlet.FilterRegistration.Dynamic; -import javax.servlet.Servlet; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; -import javax.servlet.ServletException; -import javax.servlet.ServletRegistration; - +import jakarta.servlet.DispatcherType; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterRegistration.Dynamic; +import jakarta.servlet.Servlet; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRegistration; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/support/DispatcherServletInitializerTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/support/DispatcherServletInitializerTests.java index 1035e572025..15bf12019e8 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/support/DispatcherServletInitializerTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/support/DispatcherServletInitializerTests.java @@ -20,10 +20,9 @@ import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; -import javax.servlet.Servlet; -import javax.servlet.ServletException; -import javax.servlet.ServletRegistration; - +import jakarta.servlet.Servlet; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRegistration; import org.junit.jupiter.api.Test; import org.springframework.web.context.WebApplicationContext; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/support/FlashMapManagerTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/support/FlashMapManagerTests.java index 2867d42ce4e..46be451297e 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/support/FlashMapManagerTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/support/FlashMapManagerTests.java @@ -23,9 +23,8 @@ import java.util.Collections; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.assertj.core.api.ObjectAssert; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/support/MockFilterRegistration.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/support/MockFilterRegistration.java index 59443780c58..49502b0ad9b 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/support/MockFilterRegistration.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/support/MockFilterRegistration.java @@ -21,8 +21,8 @@ import java.util.HashMap; import java.util.Map; import java.util.Set; -import javax.servlet.DispatcherType; -import javax.servlet.FilterRegistration.Dynamic; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.FilterRegistration.Dynamic; class MockFilterRegistration implements Dynamic { diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/support/MockServletRegistration.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/support/MockServletRegistration.java index e696ae945e7..46be1eab5a4 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/support/MockServletRegistration.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/support/MockServletRegistration.java @@ -22,9 +22,9 @@ import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; -import javax.servlet.MultipartConfigElement; -import javax.servlet.ServletRegistration; -import javax.servlet.ServletSecurityElement; +import jakarta.servlet.MultipartConfigElement; +import jakarta.servlet.ServletRegistration; +import jakarta.servlet.ServletSecurityElement; class MockServletRegistration implements ServletRegistration.Dynamic { diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/support/RequestDataValueProcessorWrapper.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/support/RequestDataValueProcessorWrapper.java index e64f832e4bc..fec70f74089 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/support/RequestDataValueProcessorWrapper.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/support/RequestDataValueProcessorWrapper.java @@ -18,7 +18,7 @@ package org.springframework.web.servlet.support; import java.util.Map; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; public class RequestDataValueProcessorWrapper implements RequestDataValueProcessor { diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/support/ServletUriComponentsBuilderTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/support/ServletUriComponentsBuilderTests.java index fa0c9456624..66b518a2e8e 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/support/ServletUriComponentsBuilderTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/support/ServletUriComponentsBuilderTests.java @@ -16,8 +16,7 @@ package org.springframework.web.servlet.support; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/ArgumentTagTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/ArgumentTagTests.java index af2c4795d5b..35b5bd152f5 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/ArgumentTagTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/ArgumentTagTests.java @@ -16,11 +16,10 @@ package org.springframework.web.servlet.tags; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.PageContext; -import javax.servlet.jsp.tagext.Tag; -import javax.servlet.jsp.tagext.TagSupport; - +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.PageContext; +import jakarta.servlet.jsp.tagext.Tag; +import jakarta.servlet.jsp.tagext.TagSupport; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/BindTagTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/BindTagTests.java index 24a9942e349..932c2dac82d 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/BindTagTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/BindTagTests.java @@ -23,10 +23,9 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.Set; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.PageContext; -import javax.servlet.jsp.tagext.Tag; - +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.PageContext; +import jakarta.servlet.jsp.tagext.Tag; import org.junit.jupiter.api.Test; import org.springframework.beans.propertyeditors.CustomDateEditor; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/EvalTagTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/EvalTagTests.java index e1657060bfd..6af1562e568 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/EvalTagTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/EvalTagTests.java @@ -21,8 +21,7 @@ import java.util.HashMap; import java.util.Locale; import java.util.Map; -import javax.servlet.jsp.tagext.Tag; - +import jakarta.servlet.jsp.tagext.Tag; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/HtmlEscapeTagTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/HtmlEscapeTagTests.java index 7f8f57aa5f8..36ed82289bf 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/HtmlEscapeTagTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/HtmlEscapeTagTests.java @@ -16,11 +16,10 @@ package org.springframework.web.servlet.tags; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.PageContext; -import javax.servlet.jsp.tagext.BodyTag; -import javax.servlet.jsp.tagext.Tag; - +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.PageContext; +import jakarta.servlet.jsp.tagext.BodyTag; +import jakarta.servlet.jsp.tagext.Tag; import org.junit.jupiter.api.Test; import org.springframework.web.testfixture.servlet.MockServletContext; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/MessageTagTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/MessageTagTests.java index 03698a7c57f..10feee61612 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/MessageTagTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/MessageTagTests.java @@ -19,12 +19,11 @@ package org.springframework.web.servlet.tags; import java.util.Arrays; import java.util.List; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.PageContext; -import javax.servlet.jsp.tagext.Tag; - +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.PageContext; +import jakarta.servlet.jsp.tagext.Tag; import org.junit.jupiter.api.Test; import org.springframework.context.MessageSourceResolvable; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/ParamTagTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/ParamTagTests.java index 8ff108a6fb1..ea6f4e20cf6 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/ParamTagTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/ParamTagTests.java @@ -16,11 +16,10 @@ package org.springframework.web.servlet.tags; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.PageContext; -import javax.servlet.jsp.tagext.Tag; -import javax.servlet.jsp.tagext.TagSupport; - +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.PageContext; +import jakarta.servlet.jsp.tagext.Tag; +import jakarta.servlet.jsp.tagext.TagSupport; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/ThemeTagTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/ThemeTagTests.java index 2704a558271..f7311c4c17e 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/ThemeTagTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/ThemeTagTests.java @@ -19,12 +19,11 @@ package org.springframework.web.servlet.tags; import java.util.Arrays; import java.util.List; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.PageContext; -import javax.servlet.jsp.tagext.Tag; - +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.PageContext; +import jakarta.servlet.jsp.tagext.Tag; import org.junit.jupiter.api.Test; import org.springframework.context.MessageSourceResolvable; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/UrlTagTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/UrlTagTests.java index 1b84cd22040..faabcbc0857 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/UrlTagTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/UrlTagTests.java @@ -21,10 +21,9 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.PageContext; -import javax.servlet.jsp.tagext.Tag; - +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.PageContext; +import jakarta.servlet.jsp.tagext.Tag; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/AbstractFormTagTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/AbstractFormTagTests.java index 50f254a42fb..75c418270bf 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/AbstractFormTagTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/AbstractFormTagTests.java @@ -16,7 +16,7 @@ package org.springframework.web.servlet.tags.form; -import javax.servlet.jsp.JspException; +import jakarta.servlet.jsp.JspException; import org.springframework.beans.testfixture.beans.TestBean; import org.springframework.web.testfixture.servlet.MockHttpServletRequest; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/AbstractHtmlElementTagTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/AbstractHtmlElementTagTests.java index ee6f02fa693..63cc5683921 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/AbstractHtmlElementTagTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/AbstractHtmlElementTagTests.java @@ -21,9 +21,8 @@ import java.io.Writer; import java.util.Collections; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.jsp.JspException; - +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.jsp.JspException; import org.junit.jupiter.api.BeforeEach; import org.springframework.validation.BindingResult; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/ButtonTagTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/ButtonTagTests.java index 02a4fe58004..98ca668dfa0 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/ButtonTagTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/ButtonTagTests.java @@ -18,8 +18,7 @@ package org.springframework.web.servlet.tags.form; import java.io.Writer; -import javax.servlet.jsp.tagext.Tag; - +import jakarta.servlet.jsp.tagext.Tag; import org.junit.jupiter.api.Test; import org.springframework.beans.testfixture.beans.TestBean; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/CheckboxTagTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/CheckboxTagTests.java index 39e1bb710b9..9b38741aa2e 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/CheckboxTagTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/CheckboxTagTests.java @@ -25,9 +25,8 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.Tag; - +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.tagext.Tag; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/CheckboxesTagTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/CheckboxesTagTests.java index c7455c7f859..170d1cf36e4 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/CheckboxesTagTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/CheckboxesTagTests.java @@ -29,9 +29,8 @@ import java.util.Locale; import java.util.Map; import java.util.Set; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.Tag; - +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.tagext.Tag; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/ErrorsTagTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/ErrorsTagTests.java index e6c72fccce7..0ae564baf1f 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/ErrorsTagTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/ErrorsTagTests.java @@ -20,12 +20,11 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.PageContext; -import javax.servlet.jsp.tagext.BodyTag; -import javax.servlet.jsp.tagext.Tag; - +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.PageContext; +import jakarta.servlet.jsp.tagext.BodyTag; +import jakarta.servlet.jsp.tagext.Tag; import org.junit.jupiter.api.Test; import org.springframework.beans.testfixture.beans.TestBean; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/FormTagTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/FormTagTests.java index 11fc024163c..46c84f5d4b3 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/FormTagTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/FormTagTests.java @@ -18,9 +18,8 @@ package org.springframework.web.servlet.tags.form; import java.util.Collections; -import javax.servlet.jsp.PageContext; -import javax.servlet.jsp.tagext.Tag; - +import jakarta.servlet.jsp.PageContext; +import jakarta.servlet.jsp.tagext.Tag; import org.junit.jupiter.api.Test; import org.springframework.web.servlet.support.RequestDataValueProcessor; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/HiddenInputTagTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/HiddenInputTagTests.java index e323aff62bb..39a6cf13eeb 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/HiddenInputTagTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/HiddenInputTagTests.java @@ -16,9 +16,8 @@ package org.springframework.web.servlet.tags.form; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.Tag; - +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.tagext.Tag; import org.junit.jupiter.api.Test; import org.springframework.beans.testfixture.beans.TestBean; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/InputTagTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/InputTagTests.java index 59def204ee5..39da1b05c3f 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/InputTagTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/InputTagTests.java @@ -18,9 +18,8 @@ package org.springframework.web.servlet.tags.form; import java.io.Writer; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.Tag; - +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.tagext.Tag; import org.junit.jupiter.api.Test; import org.springframework.beans.testfixture.beans.TestBean; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/LabelTagTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/LabelTagTests.java index 5f4ee4c83e0..4f7c25d891b 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/LabelTagTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/LabelTagTests.java @@ -16,9 +16,8 @@ package org.springframework.web.servlet.tags.form; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.Tag; - +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.tagext.Tag; import org.junit.jupiter.api.Test; import org.springframework.beans.testfixture.beans.TestBean; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/OptionTagEnumTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/OptionTagEnumTests.java index d3783cf3e1f..1b3fe831d7a 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/OptionTagEnumTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/OptionTagEnumTests.java @@ -16,9 +16,8 @@ package org.springframework.web.servlet.tags.form; -import javax.servlet.jsp.tagext.BodyTag; -import javax.servlet.jsp.tagext.Tag; - +import jakarta.servlet.jsp.tagext.BodyTag; +import jakarta.servlet.jsp.tagext.Tag; import org.junit.jupiter.api.Test; import org.springframework.beans.testfixture.beans.CustomEnum; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/OptionTagTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/OptionTagTests.java index a94bee41a7d..608a62595e1 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/OptionTagTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/OptionTagTests.java @@ -22,9 +22,8 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.List; -import javax.servlet.jsp.tagext.BodyTag; -import javax.servlet.jsp.tagext.Tag; - +import jakarta.servlet.jsp.tagext.BodyTag; +import jakarta.servlet.jsp.tagext.Tag; import org.junit.jupiter.api.Test; import org.springframework.beans.propertyeditors.StringArrayPropertyEditor; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/OptionsTagTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/OptionsTagTests.java index 48479f6bebf..a8e87811b90 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/OptionsTagTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/OptionsTagTests.java @@ -24,10 +24,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.jsp.tagext.BodyTag; -import javax.servlet.jsp.tagext.Tag; - +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.jsp.tagext.BodyTag; +import jakarta.servlet.jsp.tagext.Tag; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.Node; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/PasswordInputTagTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/PasswordInputTagTests.java index 2c2858648d5..64c1484371c 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/PasswordInputTagTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/PasswordInputTagTests.java @@ -18,9 +18,8 @@ package org.springframework.web.servlet.tags.form; import java.io.Writer; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.Tag; - +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.tagext.Tag; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/RadioButtonTagTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/RadioButtonTagTests.java index ac40da64133..d856021dfa5 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/RadioButtonTagTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/RadioButtonTagTests.java @@ -20,9 +20,8 @@ import java.beans.PropertyEditorSupport; import java.io.StringReader; import java.util.Collections; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.Tag; - +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.tagext.Tag; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/RadioButtonsTagTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/RadioButtonsTagTests.java index 50bbf2c2ec6..49d2daf2229 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/RadioButtonsTagTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/RadioButtonsTagTests.java @@ -27,9 +27,8 @@ import java.util.List; import java.util.Map; import java.util.Set; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.Tag; - +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.tagext.Tag; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.Node; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/SelectTagTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/SelectTagTests.java index bade64bf142..9fb65efea40 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/SelectTagTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/SelectTagTests.java @@ -29,9 +29,8 @@ import java.util.Locale; import java.util.Map; import java.util.TreeMap; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.Tag; - +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.tagext.Tag; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentException; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/TagIdGeneratorTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/TagIdGeneratorTests.java index 153b9df5760..1f8b8037cd9 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/TagIdGeneratorTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/TagIdGeneratorTests.java @@ -18,8 +18,7 @@ package org.springframework.web.servlet.tags.form; import java.util.stream.IntStream; -import javax.servlet.jsp.PageContext; - +import jakarta.servlet.jsp.PageContext; import org.junit.jupiter.api.Test; import org.springframework.web.testfixture.servlet.MockPageContext; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/TextareaTagTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/TextareaTagTests.java index f5f06f49a0d..cb08134dd72 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/TextareaTagTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/TextareaTagTests.java @@ -16,8 +16,7 @@ package org.springframework.web.servlet.tags.form; -import javax.servlet.jsp.tagext.Tag; - +import jakarta.servlet.jsp.tagext.Tag; import org.junit.jupiter.api.Test; import org.springframework.beans.testfixture.beans.TestBean; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/BaseViewTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/BaseViewTests.java index b7a8bec1336..29c69d17568 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/BaseViewTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/BaseViewTests.java @@ -21,10 +21,9 @@ import java.util.HashMap; import java.util.Map; import java.util.Properties; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContextException; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/DummyMacroRequestContext.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/DummyMacroRequestContext.java index cd2bc87d09f..6f0c1cf8cdb 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/DummyMacroRequestContext.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/DummyMacroRequestContext.java @@ -19,7 +19,7 @@ package org.springframework.web.servlet.view; import java.util.List; import java.util.Map; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.web.servlet.support.BindStatus; import org.springframework.web.servlet.support.RequestContext; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/InternalResourceViewTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/InternalResourceViewTests.java index d731b51c4df..b1f492d0b08 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/InternalResourceViewTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/InternalResourceViewTests.java @@ -20,8 +20,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.Test; import org.springframework.web.servlet.View; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/ResourceBundleViewResolverTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/ResourceBundleViewResolverTests.java index 3e6efbb07e4..8fc296bf057 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/ResourceBundleViewResolverTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/ResourceBundleViewResolverTests.java @@ -20,9 +20,8 @@ import java.util.Locale; import java.util.Map; import java.util.MissingResourceException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/ViewResolverTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/ViewResolverTests.java index 25c5a590c82..4e5c93087a7 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/ViewResolverTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/ViewResolverTests.java @@ -22,14 +22,13 @@ import java.util.Map; import java.util.Properties; import java.util.concurrent.atomic.AtomicInteger; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.jsp.jstl.core.Config; -import javax.servlet.jsp.jstl.fmt.LocalizationContext; - +import jakarta.servlet.RequestDispatcher; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.jsp.jstl.core.Config; +import jakarta.servlet.jsp.jstl.fmt.LocalizationContext; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/document/XlsViewTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/document/XlsViewTests.java index 4f9d0aee529..a7febf995d0 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/document/XlsViewTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/document/XlsViewTests.java @@ -20,9 +20,8 @@ import java.io.ByteArrayInputStream; import java.util.HashMap; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/feed/AtomFeedViewTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/feed/AtomFeedViewTests.java index 842d7e449de..f6725f99f8b 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/feed/AtomFeedViewTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/feed/AtomFeedViewTests.java @@ -21,12 +21,11 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import com.rometools.rome.feed.atom.Content; import com.rometools.rome.feed.atom.Entry; import com.rometools.rome.feed.atom.Feed; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.Test; import org.springframework.core.testfixture.xml.XmlContent; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/feed/RssFeedViewTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/feed/RssFeedViewTests.java index 5ab862e0171..7389774ccb2 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/feed/RssFeedViewTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/feed/RssFeedViewTests.java @@ -21,12 +21,11 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import com.rometools.rome.feed.rss.Channel; import com.rometools.rome.feed.rss.Description; import com.rometools.rome.feed.rss.Item; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.Test; import org.springframework.core.testfixture.xml.XmlContent; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/freemarker/FreeMarkerMacroTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/freemarker/FreeMarkerMacroTests.java index 6db737d433a..e04675deb9e 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/freemarker/FreeMarkerMacroTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/freemarker/FreeMarkerMacroTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,14 +21,13 @@ import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletResponse; - import freemarker.template.Configuration; import freemarker.template.SimpleHash; import freemarker.template.Template; import freemarker.template.TemplateException; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -71,7 +70,7 @@ public class FreeMarkerMacroTests { @BeforeEach - public void setUp() throws Exception { + public void setup() throws Exception { ServletContext sc = new MockServletContext(); wac = new StaticWebApplicationContext(); wac.setServletContext(sc); @@ -79,7 +78,6 @@ public class FreeMarkerMacroTests { // final Template expectedTemplate = new Template(); fc = new FreeMarkerConfigurer(); fc.setTemplateLoaderPaths("classpath:/", "file://" + System.getProperty("java.io.tmpdir")); - fc.setServletContext(sc); fc.afterPropertiesSet(); wac.getDefaultListableBeanFactory().registerSingleton("freeMarkerConfigurer", fc); diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/freemarker/FreeMarkerViewTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/freemarker/FreeMarkerViewTests.java index d9fd65dce96..779ae6c0c0e 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/freemarker/FreeMarkerViewTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/freemarker/FreeMarkerViewTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,12 +24,11 @@ import java.util.HashMap; import java.util.Locale; import java.util.Map; -import javax.servlet.http.HttpServletResponse; - -import freemarker.ext.servlet.AllHttpScopesHashModel; import freemarker.template.Configuration; +import freemarker.template.SimpleHash; import freemarker.template.Template; import freemarker.template.TemplateException; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContextException; @@ -92,7 +91,6 @@ public class FreeMarkerViewTests { Map configs = new HashMap<>(); FreeMarkerConfigurer configurer = new FreeMarkerConfigurer(); configurer.setConfiguration(new TestConfiguration()); - configurer.setServletContext(sc); configs.put("configurer", configurer); given(wac.getBeansOfType(FreeMarkerConfig.class, true, false)).willReturn(configs); given(wac.getServletContext()).willReturn(sc); @@ -123,7 +121,6 @@ public class FreeMarkerViewTests { Map configs = new HashMap<>(); FreeMarkerConfigurer configurer = new FreeMarkerConfigurer(); configurer.setConfiguration(new TestConfiguration()); - configurer.setServletContext(sc); configs.put("configurer", configurer); given(wac.getBeansOfType(FreeMarkerConfig.class, true, false)).willReturn(configs); given(wac.getServletContext()).willReturn(sc); @@ -151,7 +148,6 @@ public class FreeMarkerViewTests { FreeMarkerConfigurer configurer = new FreeMarkerConfigurer(); configurer.setConfiguration(new TestConfiguration()); - configurer.setServletContext(sc); StaticWebApplicationContext wac = new StaticWebApplicationContext(); wac.setServletContext(sc); @@ -191,9 +187,8 @@ public class FreeMarkerViewTests { @Override public void process(Object model, Writer writer) throws TemplateException, IOException { assertThat(locale).isEqualTo(Locale.US); - boolean condition = model instanceof AllHttpScopesHashModel; - assertThat(condition).isTrue(); - AllHttpScopesHashModel fmModel = (AllHttpScopesHashModel) model; + assertThat(model instanceof SimpleHash).isTrue(); + SimpleHash fmModel = (SimpleHash) model; assertThat(fmModel.get("myattr").toString()).isEqualTo("myvalue"); } }; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/groovy/GroovyMarkupViewTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/groovy/GroovyMarkupViewTests.java index 95df6be1a9d..4e588a5de03 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/groovy/GroovyMarkupViewTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/groovy/GroovyMarkupViewTests.java @@ -21,12 +21,11 @@ import java.util.HashMap; import java.util.Locale; import java.util.Map; -import javax.servlet.ServletContext; - import groovy.text.Template; import groovy.text.TemplateEngine; import groovy.text.markup.MarkupTemplateEngine; import groovy.text.markup.TemplateConfiguration; +import jakarta.servlet.ServletContext; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/script/JRubyScriptTemplateTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/script/JRubyScriptTemplateTests.java index 0ff0cede97f..46854fde995 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/script/JRubyScriptTemplateTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/script/JRubyScriptTemplateTests.java @@ -19,8 +19,7 @@ package org.springframework.web.servlet.view.script; import java.util.HashMap; import java.util.Map; -import javax.servlet.ServletContext; - +import jakarta.servlet.ServletContext; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/script/JythonScriptTemplateTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/script/JythonScriptTemplateTests.java index 28777a89de9..468a5e66d6f 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/script/JythonScriptTemplateTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/script/JythonScriptTemplateTests.java @@ -19,8 +19,7 @@ package org.springframework.web.servlet.view.script; import java.util.HashMap; import java.util.Map; -import javax.servlet.ServletContext; - +import jakarta.servlet.ServletContext; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/script/KotlinScriptTemplateTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/script/KotlinScriptTemplateTests.java index f6ef3ac7c21..a977f0ef8b4 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/script/KotlinScriptTemplateTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/script/KotlinScriptTemplateTests.java @@ -20,8 +20,7 @@ import java.util.HashMap; import java.util.Locale; import java.util.Map; -import javax.servlet.ServletContext; - +import jakarta.servlet.ServletContext; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/script/NashornScriptTemplateTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/script/NashornScriptTemplateTests.java index 72f56d47a90..e0ddf181397 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/script/NashornScriptTemplateTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/script/NashornScriptTemplateTests.java @@ -19,8 +19,7 @@ package org.springframework.web.servlet.view.script; import java.util.HashMap; import java.util.Map; -import javax.servlet.ServletContext; - +import jakarta.servlet.ServletContext; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.DisabledForJreRange; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/tiles3/TilesConfigurerTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/tiles3/TilesConfigurerTests.java deleted file mode 100644 index 68296951f8a..00000000000 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/tiles3/TilesConfigurerTests.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright 2002-2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.web.servlet.view.tiles3; - -import org.apache.tiles.access.TilesAccess; -import org.apache.tiles.impl.BasicTilesContainer; -import org.apache.tiles.request.ApplicationContext; -import org.apache.tiles.request.Request; -import org.apache.tiles.request.servlet.ServletRequest; -import org.apache.tiles.request.servlet.ServletUtil; -import org.junit.jupiter.api.Test; - -import org.springframework.context.annotation.Configuration; -import org.springframework.web.testfixture.servlet.MockHttpServletRequest; -import org.springframework.web.testfixture.servlet.MockHttpServletResponse; -import org.springframework.web.testfixture.servlet.MockServletContext; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Test fixture for {@link TilesConfigurer}. - * - * @author Nicolas Le Bas - */ -public class TilesConfigurerTests { - - @Test - public void simpleBootstrap() { - MockServletContext servletContext = new MockServletContext(); - - TilesConfigurer tc = new TilesConfigurer(); - tc.setDefinitions("/org/springframework/web/servlet/view/tiles3/tiles-definitions.xml"); - tc.setCheckRefresh(true); - tc.setServletContext(servletContext); - tc.afterPropertiesSet(); - - ApplicationContext tilesContext = ServletUtil.getApplicationContext(servletContext); - - BasicTilesContainer container = (BasicTilesContainer) TilesAccess.getContainer(tilesContext); - Request requestContext = new ServletRequest(container.getApplicationContext(), - new MockHttpServletRequest(), new MockHttpServletResponse()); - assertThat(container.getDefinitionsFactory().getDefinition("test", requestContext)).isNotNull(); - - tc.destroy(); - } - - - @Configuration - public static class AppConfig { - } - -} diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/tiles3/TilesViewResolverTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/tiles3/TilesViewResolverTests.java deleted file mode 100644 index 11515bc2215..00000000000 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/tiles3/TilesViewResolverTests.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright 2002-2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.web.servlet.view.tiles3; - -import java.util.Locale; - -import org.apache.tiles.request.Request; -import org.apache.tiles.request.render.Renderer; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import org.springframework.web.context.support.StaticWebApplicationContext; -import org.springframework.web.testfixture.servlet.MockServletContext; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.ArgumentMatchers.isA; -import static org.mockito.BDDMockito.given; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; - -/** - * Test fixture for {@link TilesViewResolver}. - * - * @author mick semb wever - */ -public class TilesViewResolverTests { - - private TilesViewResolver viewResolver; - - private Renderer renderer; - - - @BeforeEach - public void setUp() { - StaticWebApplicationContext wac = new StaticWebApplicationContext(); - wac.setServletContext(new MockServletContext()); - wac.refresh(); - - this.renderer = mock(Renderer.class); - - this.viewResolver = new TilesViewResolver(); - this.viewResolver.setRenderer(this.renderer); - this.viewResolver.setApplicationContext(wac); - } - - @Test - public void testResolve() throws Exception { - given(this.renderer.isRenderable(eq("/template.test"), isA(Request.class))).willReturn(true); - given(this.renderer.isRenderable(eq("/nonexistent.test"), isA(Request.class))).willReturn(false); - - boolean condition = this.viewResolver.resolveViewName("/template.test", Locale.ITALY) instanceof TilesView; - assertThat(condition).isTrue(); - assertThat(this.viewResolver.resolveViewName("/nonexistent.test", Locale.ITALY)).isNull(); - - verify(this.renderer).isRenderable(eq("/template.test"), isA(Request.class)); - verify(this.renderer).isRenderable(eq("/nonexistent.test"), isA(Request.class)); - } -} diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/tiles3/TilesViewTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/tiles3/TilesViewTests.java deleted file mode 100644 index 90cb4d6171d..00000000000 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/tiles3/TilesViewTests.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright 2002-2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.web.servlet.view.tiles3; - -import java.util.HashMap; -import java.util.Map; - -import org.apache.tiles.request.AbstractRequest; -import org.apache.tiles.request.Request; -import org.apache.tiles.request.render.Renderer; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import org.springframework.web.context.support.StaticWebApplicationContext; -import org.springframework.web.servlet.DispatcherServlet; -import org.springframework.web.testfixture.servlet.MockHttpServletRequest; -import org.springframework.web.testfixture.servlet.MockHttpServletResponse; -import org.springframework.web.testfixture.servlet.MockServletContext; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.ArgumentMatchers.isA; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; - -/** - * Test fixture for {@link TilesView}. - * - * @author mick semb wever - * @author Sebastien Deleuze - */ -public class TilesViewTests { - - private static final String VIEW_PATH = "template.test"; - - private TilesView view; - - private Renderer renderer; - - private MockHttpServletRequest request; - - private MockHttpServletResponse response; - - - @BeforeEach - public void setUp() throws Exception { - MockServletContext servletContext = new MockServletContext(); - StaticWebApplicationContext wac = new StaticWebApplicationContext(); - wac.setServletContext(servletContext); - wac.refresh(); - - request = new MockHttpServletRequest(); - request.setAttribute(DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE, wac); - - response = new MockHttpServletResponse(); - - renderer = mock(Renderer.class); - - view = new TilesView(); - view.setServletContext(servletContext); - view.setRenderer(renderer); - view.setUrl(VIEW_PATH); - view.afterPropertiesSet(); - } - - @Test - public void render() throws Exception { - Map model = new HashMap<>(); - model.put("modelAttribute", "modelValue"); - view.render(model, request, response); - assertThat(request.getAttribute("modelAttribute")).isEqualTo("modelValue"); - verify(renderer).render(eq(VIEW_PATH), isA(Request.class)); - } - - @Test - public void alwaysIncludeDefaults() throws Exception { - view.render(new HashMap<>(), request, response); - assertThat(request.getAttribute(AbstractRequest.FORCE_INCLUDE_ATTRIBUTE_NAME)).isNull(); - } - - @Test - public void alwaysIncludeEnabled() throws Exception { - view.setAlwaysInclude(true); - view.render(new HashMap<>(), request, response); - assertThat((boolean) (Boolean) request.getAttribute(AbstractRequest.FORCE_INCLUDE_ATTRIBUTE_NAME)).isTrue(); - } - -} diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/xml/MarshallingViewTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/xml/MarshallingViewTests.java index 8a03c1028ca..ae596f28875 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/xml/MarshallingViewTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/xml/MarshallingViewTests.java @@ -20,10 +20,10 @@ import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; -import javax.xml.bind.JAXBElement; import javax.xml.namespace.QName; import javax.xml.transform.stream.StreamResult; +import jakarta.xml.bind.JAXBElement; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-webmvc/src/test/resources/org/springframework/web/context/WEB-INF/empty-servlet.xml b/spring-webmvc/src/test/resources/org/springframework/web/context/WEB-INF/empty-servlet.xml index f431f55292b..45380a25d34 100644 --- a/spring-webmvc/src/test/resources/org/springframework/web/context/WEB-INF/empty-servlet.xml +++ b/spring-webmvc/src/test/resources/org/springframework/web/context/WEB-INF/empty-servlet.xml @@ -3,7 +3,7 @@ - + diff --git a/spring-webmvc/src/test/resources/org/springframework/web/servlet/config/mvc-config-view-resolution-content-negotiation.xml b/spring-webmvc/src/test/resources/org/springframework/web/servlet/config/mvc-config-view-resolution-content-negotiation.xml index 7f8d0f86d32..b633c802fb6 100644 --- a/spring-webmvc/src/test/resources/org/springframework/web/servlet/config/mvc-config-view-resolution-content-negotiation.xml +++ b/spring-webmvc/src/test/resources/org/springframework/web/servlet/config/mvc-config-view-resolution-content-negotiation.xml @@ -21,16 +21,11 @@ - - - - - diff --git a/spring-webmvc/src/test/resources/org/springframework/web/servlet/config/mvc-config-view-resolution.xml b/spring-webmvc/src/test/resources/org/springframework/web/servlet/config/mvc-config-view-resolution.xml index 0bb48e81579..32f0c092a1c 100644 --- a/spring-webmvc/src/test/resources/org/springframework/web/servlet/config/mvc-config-view-resolution.xml +++ b/spring-webmvc/src/test/resources/org/springframework/web/servlet/config/mvc-config-view-resolution.xml @@ -8,7 +8,6 @@ - @@ -18,13 +17,6 @@ - - - - - diff --git a/spring-websocket/spring-websocket.gradle b/spring-websocket/spring-websocket.gradle index 4ffe0ef667b..fe4f65250ff 100644 --- a/spring-websocket/spring-websocket.gradle +++ b/spring-websocket/spring-websocket.gradle @@ -6,20 +6,20 @@ dependencies { api(project(":spring-web")) optional(project(":spring-messaging")) optional(project(":spring-webmvc")) - optional("javax.servlet:javax.servlet-api") - optional("javax.websocket:javax.websocket-api") + optional("jakarta.servlet:jakarta.servlet-api") + optional("jakarta.websocket:jakarta.websocket-api") optional("org.apache.tomcat:tomcat-websocket") optional("org.glassfish.tyrus:tyrus-container-servlet") optional("org.eclipse.jetty:jetty-webapp") { - exclude group: "javax.servlet", module: "javax.servlet" + exclude group: "jakarta.servlet", module: "jakarta.servlet-api" } - optional("org.eclipse.jetty.websocket:websocket-server") { - exclude group: "javax.servlet", module: "javax.servlet" + optional("org.eclipse.jetty.websocket:websocket-jetty-server") { + exclude group: "jakarta.servlet", module: "jakarta.servlet-api" } - optional("org.eclipse.jetty.websocket:websocket-client") + optional("org.eclipse.jetty.websocket:websocket-jetty-client") optional("org.eclipse.jetty:jetty-client") - optional("io.undertow:undertow-servlet") - optional("io.undertow:undertow-websockets-jsr") + optional("io.undertow:undertow-servlet-jakartaee9") + optional("io.undertow:undertow-websockets-jsr-jakartaee9") optional("com.fasterxml.jackson.core:jackson-databind") testImplementation(testFixtures(project(":spring-core"))) testImplementation(testFixtures(project(":spring-web"))) diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/jetty/Jetty10WebSocketHandlerAdapter.java b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/jetty/Jetty10WebSocketHandlerAdapter.java deleted file mode 100644 index c6a4c9f19cd..00000000000 --- a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/jetty/Jetty10WebSocketHandlerAdapter.java +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright 2002-2021 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.web.socket.adapter.jetty; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.eclipse.jetty.websocket.api.Session; -import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose; -import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect; -import org.eclipse.jetty.websocket.api.annotations.OnWebSocketError; -import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage; -import org.eclipse.jetty.websocket.api.annotations.WebSocket; -import org.eclipse.jetty.websocket.api.extensions.Frame; - -import org.springframework.util.Assert; -import org.springframework.web.socket.BinaryMessage; -import org.springframework.web.socket.CloseStatus; -import org.springframework.web.socket.TextMessage; -import org.springframework.web.socket.WebSocketHandler; -import org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator; - -/** - * Identical to {@link JettyWebSocketHandlerAdapter}, only excluding the - * {@code onWebSocketFrame} method, since the {@link Frame} argument has moved - * to a different package in Jetty 10. - * - * @author Rossen Stoyanchev - * @since 5.3.4 - */ -@WebSocket -public class Jetty10WebSocketHandlerAdapter { - - private static final Log logger = LogFactory.getLog(Jetty10WebSocketHandlerAdapter.class); - - - private final WebSocketHandler webSocketHandler; - - private final JettyWebSocketSession wsSession; - - - public Jetty10WebSocketHandlerAdapter(WebSocketHandler webSocketHandler, JettyWebSocketSession wsSession) { - Assert.notNull(webSocketHandler, "WebSocketHandler must not be null"); - Assert.notNull(wsSession, "WebSocketSession must not be null"); - this.webSocketHandler = webSocketHandler; - this.wsSession = wsSession; - } - - - @OnWebSocketConnect - public void onWebSocketConnect(Session session) { - try { - this.wsSession.initializeNativeSession(session); - this.webSocketHandler.afterConnectionEstablished(this.wsSession); - } - catch (Exception ex) { - ExceptionWebSocketHandlerDecorator.tryCloseWithError(this.wsSession, ex, logger); - } - } - - @OnWebSocketMessage - public void onWebSocketText(String payload) { - TextMessage message = new TextMessage(payload); - try { - this.webSocketHandler.handleMessage(this.wsSession, message); - } - catch (Exception ex) { - ExceptionWebSocketHandlerDecorator.tryCloseWithError(this.wsSession, ex, logger); - } - } - - @OnWebSocketMessage - public void onWebSocketBinary(byte[] payload, int offset, int length) { - BinaryMessage message = new BinaryMessage(payload, offset, length, true); - try { - this.webSocketHandler.handleMessage(this.wsSession, message); - } - catch (Exception ex) { - ExceptionWebSocketHandlerDecorator.tryCloseWithError(this.wsSession, ex, logger); - } - } - -// TODO: onWebSocketFrame can't be declared without compiling against Jetty 10 -// Jetty 10: org.eclipse.jetty.websocket.api.Frame -// Jetty 9: org.eclipse.jetty.websocket.api.extensions.Frame - -// @OnWebSocketFrame -// public void onWebSocketFrame(Frame frame) { -// if (OpCode.PONG == frame.getOpCode()) { -// ByteBuffer payload = frame.getPayload() != null ? frame.getPayload() : EMPTY_PAYLOAD; -// PongMessage message = new PongMessage(payload); -// try { -// this.webSocketHandler.handleMessage(this.wsSession, message); -// } -// catch (Exception ex) { -// ExceptionWebSocketHandlerDecorator.tryCloseWithError(this.wsSession, ex, logger); -// } -// } -// } - - @OnWebSocketClose - public void onWebSocketClose(int statusCode, String reason) { - CloseStatus closeStatus = new CloseStatus(statusCode, reason); - try { - this.webSocketHandler.afterConnectionClosed(this.wsSession, closeStatus); - } - catch (Exception ex) { - if (logger.isWarnEnabled()) { - logger.warn("Unhandled exception after connection closed for " + this, ex); - } - } - } - - @OnWebSocketError - public void onWebSocketError(Throwable cause) { - try { - this.webSocketHandler.handleTransportError(this.wsSession, cause); - } - catch (Exception ex) { - ExceptionWebSocketHandlerDecorator.tryCloseWithError(this.wsSession, ex, logger); - } - } - -} diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/jetty/JettyWebSocketHandlerAdapter.java b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/jetty/JettyWebSocketHandlerAdapter.java index 0c414a6b11e..47b821cd53b 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/jetty/JettyWebSocketHandlerAdapter.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/jetty/JettyWebSocketHandlerAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,6 +20,7 @@ import java.nio.ByteBuffer; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.eclipse.jetty.websocket.api.Frame; import org.eclipse.jetty.websocket.api.Session; import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose; import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect; @@ -27,8 +28,7 @@ import org.eclipse.jetty.websocket.api.annotations.OnWebSocketError; import org.eclipse.jetty.websocket.api.annotations.OnWebSocketFrame; import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage; import org.eclipse.jetty.websocket.api.annotations.WebSocket; -import org.eclipse.jetty.websocket.api.extensions.Frame; -import org.eclipse.jetty.websocket.common.OpCode; +import org.eclipse.jetty.websocket.core.OpCode; import org.springframework.util.Assert; import org.springframework.web.socket.BinaryMessage; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/jetty/JettyWebSocketSession.java b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/jetty/JettyWebSocketSession.java index 48b87417bbf..37a22a36eaa 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/jetty/JettyWebSocketSession.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/jetty/JettyWebSocketSession.java @@ -17,9 +17,7 @@ package org.springframework.web.socket.adapter.jetty; import java.io.IOException; -import java.lang.reflect.Method; import java.net.InetSocketAddress; -import java.net.SocketAddress; import java.net.URI; import java.security.Principal; import java.util.ArrayList; @@ -27,16 +25,14 @@ import java.util.Collections; import java.util.List; import java.util.Map; +import org.eclipse.jetty.websocket.api.ExtensionConfig; import org.eclipse.jetty.websocket.api.RemoteEndpoint; import org.eclipse.jetty.websocket.api.Session; -import org.eclipse.jetty.websocket.api.extensions.ExtensionConfig; import org.springframework.http.HttpHeaders; import org.springframework.lang.Nullable; import org.springframework.util.Assert; -import org.springframework.util.ClassUtils; import org.springframework.util.CollectionUtils; -import org.springframework.util.ReflectionUtils; import org.springframework.web.socket.BinaryMessage; import org.springframework.web.socket.CloseStatus; import org.springframework.web.socket.PingMessage; @@ -57,12 +53,6 @@ import org.springframework.web.socket.adapter.AbstractWebSocketSession; */ public class JettyWebSocketSession extends AbstractWebSocketSession { - private static final ClassLoader loader = JettyWebSocketSession.class.getClassLoader(); - - private static final boolean jetty10Present = ClassUtils.isPresent( - "org.eclipse.jetty.websocket.server.JettyWebSocketServerContainer", loader); - - private final String id; @Nullable @@ -80,8 +70,6 @@ public class JettyWebSocketSession extends AbstractWebSocketSession { @Nullable private Principal user; - private final SessionHelper sessionHelper; - /** * Create a new {@link JettyWebSocketSession} instance. @@ -102,7 +90,6 @@ public class JettyWebSocketSession extends AbstractWebSocketSession { super(attributes); this.id = idGenerator.generateId().toString(); this.user = user; - this.sessionHelper = (jetty10Present ? new Jetty10SessionHelper() : new Jetty9SessionHelper()); } @@ -144,13 +131,13 @@ public class JettyWebSocketSession extends AbstractWebSocketSession { @Override public InetSocketAddress getLocalAddress() { checkNativeSessionInitialized(); - return this.sessionHelper.getLocalAddress(getNativeSession()); + return (InetSocketAddress) getNativeSession().getLocalAddress(); } @Override public InetSocketAddress getRemoteAddress() { checkNativeSessionInitialized(); - return this.sessionHelper.getRemoteAddress(getNativeSession()); + return (InetSocketAddress) getNativeSession().getRemoteAddress(); } /** @@ -164,7 +151,7 @@ public class JettyWebSocketSession extends AbstractWebSocketSession { @Override public int getTextMessageSizeLimit() { checkNativeSessionInitialized(); - return this.sessionHelper.getTextMessageSizeLimit(getNativeSession()); + return (int) getNativeSession().getMaxTextMessageSize(); } /** @@ -178,7 +165,7 @@ public class JettyWebSocketSession extends AbstractWebSocketSession { @Override public int getBinaryMessageSizeLimit() { checkNativeSessionInitialized(); - return this.sessionHelper.getBinaryMessageSizeLimit(getNativeSession()); + return (int) getNativeSession().getMaxBinaryMessageSize(); } @Override @@ -201,13 +188,25 @@ public class JettyWebSocketSession extends AbstractWebSocketSession { this.headers = HttpHeaders.readOnlyHttpHeaders(headers); this.acceptedProtocol = session.getUpgradeResponse().getAcceptedSubProtocol(); - this.extensions = this.sessionHelper.getExtensions(session); + this.extensions = getExtensions(session); if (this.user == null) { this.user = session.getUpgradeRequest().getUserPrincipal(); } } + private List getExtensions(Session session) { + List configs = session.getUpgradeResponse().getExtensions(); + if (!CollectionUtils.isEmpty(configs)) { + List result = new ArrayList<>(configs.size()); + for (ExtensionConfig config : configs) { + result.add(new WebSocketExtension(config.getName(), config.getParameters())); + } + return Collections.unmodifiableList(result); + } + return Collections.emptyList(); + } + @Override protected void sendTextMessage(TextMessage message) throws IOException { @@ -238,127 +237,4 @@ public class JettyWebSocketSession extends AbstractWebSocketSession { getNativeSession().close(status.getCode(), status.getReason()); } - - /** - * Encapsulate incompatible changes between Jetty 9.4 and 10. - */ - private interface SessionHelper { - - List getExtensions(Session session); - - int getTextMessageSizeLimit(Session session); - - int getBinaryMessageSizeLimit(Session session); - - InetSocketAddress getRemoteAddress(Session session); - - InetSocketAddress getLocalAddress(Session session); - - } - - - private static class Jetty9SessionHelper implements SessionHelper { - - @Override - public List getExtensions(Session session) { - List configs = session.getUpgradeResponse().getExtensions(); - if (!CollectionUtils.isEmpty(configs)) { - List result = new ArrayList<>(configs.size()); - for (ExtensionConfig config : configs) { - result.add(new WebSocketExtension(config.getName(), config.getParameters())); - } - return Collections.unmodifiableList(result); - } - return Collections.emptyList(); - } - - @Override - public int getTextMessageSizeLimit(Session session) { - return session.getPolicy().getMaxTextMessageSize(); - } - - @Override - public int getBinaryMessageSizeLimit(Session session) { - return session.getPolicy().getMaxBinaryMessageSize(); - } - - @Override - public InetSocketAddress getRemoteAddress(Session session) { - return session.getRemoteAddress(); - } - - @Override - public InetSocketAddress getLocalAddress(Session session) { - return session.getLocalAddress(); - } - } - - - private static class Jetty10SessionHelper implements SessionHelper { - - private static final Method getTextMessageSizeLimitMethod; - - private static final Method getBinaryMessageSizeLimitMethod; - - private static final Method getRemoteAddressMethod; - - private static final Method getLocalAddressMethod; - - static { - try { - Class type = loader.loadClass("org.eclipse.jetty.websocket.api.Session"); - getTextMessageSizeLimitMethod = type.getMethod("getMaxTextMessageSize"); - getBinaryMessageSizeLimitMethod = type.getMethod("getMaxBinaryMessageSize"); - getRemoteAddressMethod = type.getMethod("getRemoteAddress"); - getLocalAddressMethod = type.getMethod("getLocalAddress"); - } - catch (ClassNotFoundException | NoSuchMethodException ex) { - throw new IllegalStateException("No compatible Jetty version found", ex); - } - } - - // TODO: Extension info can't be accessed without compiling against Jetty 10 - // Jetty 10: org.eclipse.jetty.websocket.api.ExtensionConfig - // Jetty 9: org.eclipse.jetty.websocket.api.extensions.ExtensionConfig - - @Override - public List getExtensions(Session session) { - return Collections.emptyList(); - } - - // TODO: WebSocketPolicy can't be accessed without compiling against Jetty 10 (class -> interface) - - @Override - @SuppressWarnings("ConstantConditions") - public int getTextMessageSizeLimit(Session session) { - long result = (long) ReflectionUtils.invokeMethod(getTextMessageSizeLimitMethod, session.getPolicy()); - Assert.state(result <= Integer.MAX_VALUE, "textMessageSizeLimit is larger than Integer.MAX_VALUE"); - return (int) result; - } - - @Override - @SuppressWarnings("ConstantConditions") - public int getBinaryMessageSizeLimit(Session session) { - long result = (long) ReflectionUtils.invokeMethod(getBinaryMessageSizeLimitMethod, session.getPolicy()); - Assert.state(result <= Integer.MAX_VALUE, "binaryMessageSizeLimit is larger than Integer.MAX_VALUE"); - return (int) result; - } - - @Override - @SuppressWarnings("ConstantConditions") - public InetSocketAddress getRemoteAddress(Session session) { - SocketAddress address = (SocketAddress) ReflectionUtils.invokeMethod(getRemoteAddressMethod, session); - Assert.isInstanceOf(InetSocketAddress.class, address); - return (InetSocketAddress) address; - } - - @Override - @SuppressWarnings("ConstantConditions") - public InetSocketAddress getLocalAddress(Session session) { - SocketAddress address = (SocketAddress) ReflectionUtils.invokeMethod(getLocalAddressMethod, session); - Assert.isInstanceOf(InetSocketAddress.class, address); - return (InetSocketAddress) address; - } - } - } diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/jetty/WebSocketToJettyExtensionConfigAdapter.java b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/jetty/WebSocketToJettyExtensionConfigAdapter.java index 1adc61cc4d6..b941c267122 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/jetty/WebSocketToJettyExtensionConfigAdapter.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/jetty/WebSocketToJettyExtensionConfigAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,7 +16,8 @@ package org.springframework.web.socket.adapter.jetty; -import org.eclipse.jetty.websocket.api.extensions.ExtensionConfig; +import org.eclipse.jetty.websocket.api.ExtensionConfig; +import org.eclipse.jetty.websocket.common.JettyExtensionConfig; import org.springframework.web.socket.WebSocketExtension; @@ -27,7 +28,7 @@ import org.springframework.web.socket.WebSocketExtension; * @author Rossen Stoyanchev * @since 4.0 */ -public class WebSocketToJettyExtensionConfigAdapter extends ExtensionConfig { +public class WebSocketToJettyExtensionConfigAdapter extends JettyExtensionConfig { public WebSocketToJettyExtensionConfigAdapter(WebSocketExtension extension) { super(extension.getName()); diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/ConvertingEncoderDecoderSupport.java b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/ConvertingEncoderDecoderSupport.java index 05e1a4b75c0..489891d11a5 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/ConvertingEncoderDecoderSupport.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/ConvertingEncoderDecoderSupport.java @@ -18,11 +18,11 @@ package org.springframework.web.socket.adapter.standard; import java.nio.ByteBuffer; -import javax.websocket.DecodeException; -import javax.websocket.Decoder; -import javax.websocket.EncodeException; -import javax.websocket.Encoder; -import javax.websocket.EndpointConfig; +import jakarta.websocket.DecodeException; +import jakarta.websocket.Decoder; +import jakarta.websocket.EncodeException; +import jakarta.websocket.Encoder; +import jakarta.websocket.EndpointConfig; import org.springframework.beans.BeansException; import org.springframework.beans.factory.annotation.Autowired; @@ -38,8 +38,8 @@ import org.springframework.util.Assert; import org.springframework.web.context.ContextLoader; /** - * Base class that can be used to implement a standard {@link javax.websocket.Encoder} - * and/or {@link javax.websocket.Decoder}. It provides encode and decode method + * Base class that can be used to implement a standard {@link jakarta.websocket.Encoder} + * and/or {@link jakarta.websocket.Decoder}. It provides encode and decode method * implementations that delegate to a Spring {@link ConversionService}. * *

    By default, this class looks up a {@link ConversionService} registered in the @@ -50,7 +50,7 @@ import org.springframework.web.context.ContextLoader; * {@link #getConversionService()} method to provide an alternative lookup strategy. * *

    Subclasses can extend this class and should also implement one or - * both of {@link javax.websocket.Encoder} and {@link javax.websocket.Decoder}. + * both of {@link jakarta.websocket.Encoder} and {@link jakarta.websocket.Decoder}. * For convenience {@link ConvertingEncoderDecoderSupport.BinaryEncoder}, * {@link ConvertingEncoderDecoderSupport.BinaryDecoder}, * {@link ConvertingEncoderDecoderSupport.TextEncoder} and @@ -80,8 +80,8 @@ public abstract class ConvertingEncoderDecoderSupport { /** * Called to initialize the encoder/decoder. - * @see javax.websocket.Encoder#init(EndpointConfig) - * @see javax.websocket.Decoder#init(EndpointConfig) + * @see jakarta.websocket.Encoder#init(EndpointConfig) + * @see jakarta.websocket.Decoder#init(EndpointConfig) */ public void init(EndpointConfig config) { ApplicationContext applicationContext = getApplicationContext(); @@ -94,8 +94,8 @@ public abstract class ConvertingEncoderDecoderSupport { /** * Called to destroy the encoder/decoder. - * @see javax.websocket.Encoder#destroy() - * @see javax.websocket.Decoder#destroy() + * @see jakarta.websocket.Encoder#destroy() + * @see jakarta.websocket.Decoder#destroy() */ public void destroy() { } @@ -158,8 +158,8 @@ public abstract class ConvertingEncoderDecoderSupport { /** * Encode an object to a message. - * @see javax.websocket.Encoder.Text#encode(Object) - * @see javax.websocket.Encoder.Binary#encode(Object) + * @see jakarta.websocket.Encoder.Text#encode(Object) + * @see jakarta.websocket.Encoder.Binary#encode(Object) */ @SuppressWarnings("unchecked") @Nullable @@ -175,8 +175,8 @@ public abstract class ConvertingEncoderDecoderSupport { /** * Determine if a given message can be decoded. * @see #decode(Object) - * @see javax.websocket.Decoder.Text#willDecode(String) - * @see javax.websocket.Decoder.Binary#willDecode(ByteBuffer) + * @see jakarta.websocket.Decoder.Text#willDecode(String) + * @see jakarta.websocket.Decoder.Binary#willDecode(ByteBuffer) */ public boolean willDecode(M bytes) { return getConversionService().canConvert(getType(), getMessageType()); @@ -184,8 +184,8 @@ public abstract class ConvertingEncoderDecoderSupport { /** * Decode the message into an object. - * @see javax.websocket.Decoder.Text#decode(String) - * @see javax.websocket.Decoder.Binary#decode(ByteBuffer) + * @see jakarta.websocket.Decoder.Text#decode(String) + * @see jakarta.websocket.Decoder.Binary#decode(ByteBuffer) */ @SuppressWarnings("unchecked") @Nullable @@ -208,7 +208,7 @@ public abstract class ConvertingEncoderDecoderSupport { /** - * A binary {@link javax.websocket.Encoder.Binary javax.websocket.Encoder} that delegates + * A binary {@link jakarta.websocket.Encoder.Binary jakarta.websocket.Encoder} that delegates * to Spring's conversion service. See {@link ConvertingEncoderDecoderSupport} for details. * @param the type that this Encoder can convert to */ @@ -218,7 +218,7 @@ public abstract class ConvertingEncoderDecoderSupport { /** - * A binary {@link javax.websocket.Encoder.Binary javax.websocket.Encoder} that delegates + * A binary {@link jakarta.websocket.Encoder.Binary jakarta.websocket.Encoder} that delegates * to Spring's conversion service. See {@link ConvertingEncoderDecoderSupport} for details. * @param the type that this Decoder can convert from */ @@ -228,7 +228,7 @@ public abstract class ConvertingEncoderDecoderSupport { /** - * A text {@link javax.websocket.Encoder.Text javax.websocket.Encoder} that delegates + * A text {@link jakarta.websocket.Encoder.Text jakarta.websocket.Encoder} that delegates * to Spring's conversion service. See {@link ConvertingEncoderDecoderSupport} for * details. * @param the type that this Encoder can convert to @@ -239,7 +239,7 @@ public abstract class ConvertingEncoderDecoderSupport { /** - * A Text {@link javax.websocket.Encoder.Text javax.websocket.Encoder} that delegates + * A Text {@link jakarta.websocket.Encoder.Text jakarta.websocket.Encoder} that delegates * to Spring's conversion service. See {@link ConvertingEncoderDecoderSupport} for details. * @param the type that this Decoder can convert from */ diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/StandardToWebSocketExtensionAdapter.java b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/StandardToWebSocketExtensionAdapter.java index d2908e6aff8..8f81d48bd68 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/StandardToWebSocketExtensionAdapter.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/StandardToWebSocketExtensionAdapter.java @@ -20,14 +20,14 @@ import java.util.List; import java.util.Locale; import java.util.Map; -import javax.websocket.Extension; +import jakarta.websocket.Extension; import org.springframework.util.LinkedCaseInsensitiveMap; import org.springframework.web.socket.WebSocketExtension; /** * A sub-class of {@link org.springframework.web.socket.WebSocketExtension} that - * can be constructed from an {@link javax.websocket.Extension}. + * can be constructed from an {@link jakarta.websocket.Extension}. * * @author Rossen Stoyanchev * @since 4.0 diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/StandardWebSocketHandlerAdapter.java b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/StandardWebSocketHandlerAdapter.java index 2cdea2d1a04..27a794caa88 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/StandardWebSocketHandlerAdapter.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/StandardWebSocketHandlerAdapter.java @@ -18,11 +18,10 @@ package org.springframework.web.socket.adapter.standard; import java.nio.ByteBuffer; -import javax.websocket.CloseReason; -import javax.websocket.Endpoint; -import javax.websocket.EndpointConfig; -import javax.websocket.MessageHandler; - +import jakarta.websocket.CloseReason; +import jakarta.websocket.Endpoint; +import jakarta.websocket.EndpointConfig; +import jakarta.websocket.MessageHandler; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -58,7 +57,7 @@ public class StandardWebSocketHandlerAdapter extends Endpoint { @Override - public void onOpen(final javax.websocket.Session session, EndpointConfig config) { + public void onOpen(final jakarta.websocket.Session session, EndpointConfig config) { this.wsSession.initializeNativeSession(session); // The following inner classes need to remain since lambdas would not retain their @@ -93,9 +92,9 @@ public class StandardWebSocketHandlerAdapter extends Endpoint { }); } - session.addMessageHandler(new MessageHandler.Whole() { + session.addMessageHandler(new MessageHandler.Whole() { @Override - public void onMessage(javax.websocket.PongMessage message) { + public void onMessage(jakarta.websocket.PongMessage message) { handlePongMessage(session, message.getApplicationData()); } }); @@ -108,7 +107,7 @@ public class StandardWebSocketHandlerAdapter extends Endpoint { } } - private void handleTextMessage(javax.websocket.Session session, String payload, boolean isLast) { + private void handleTextMessage(jakarta.websocket.Session session, String payload, boolean isLast) { TextMessage textMessage = new TextMessage(payload, isLast); try { this.handler.handleMessage(this.wsSession, textMessage); @@ -118,7 +117,7 @@ public class StandardWebSocketHandlerAdapter extends Endpoint { } } - private void handleBinaryMessage(javax.websocket.Session session, ByteBuffer payload, boolean isLast) { + private void handleBinaryMessage(jakarta.websocket.Session session, ByteBuffer payload, boolean isLast) { BinaryMessage binaryMessage = new BinaryMessage(payload, isLast); try { this.handler.handleMessage(this.wsSession, binaryMessage); @@ -128,7 +127,7 @@ public class StandardWebSocketHandlerAdapter extends Endpoint { } } - private void handlePongMessage(javax.websocket.Session session, ByteBuffer payload) { + private void handlePongMessage(jakarta.websocket.Session session, ByteBuffer payload) { PongMessage pongMessage = new PongMessage(payload); try { this.handler.handleMessage(this.wsSession, pongMessage); @@ -139,7 +138,7 @@ public class StandardWebSocketHandlerAdapter extends Endpoint { } @Override - public void onClose(javax.websocket.Session session, CloseReason reason) { + public void onClose(jakarta.websocket.Session session, CloseReason reason) { CloseStatus closeStatus = new CloseStatus(reason.getCloseCode().getCode(), reason.getReasonPhrase()); try { this.handler.afterConnectionClosed(this.wsSession, closeStatus); @@ -152,7 +151,7 @@ public class StandardWebSocketHandlerAdapter extends Endpoint { } @Override - public void onError(javax.websocket.Session session, Throwable exception) { + public void onError(jakarta.websocket.Session session, Throwable exception) { try { this.handler.handleTransportError(this.wsSession, exception); } diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/StandardWebSocketSession.java b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/StandardWebSocketSession.java index d1a0672b956..0252927f45e 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/StandardWebSocketSession.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/StandardWebSocketSession.java @@ -25,10 +25,10 @@ import java.util.Collections; import java.util.List; import java.util.Map; -import javax.websocket.CloseReason; -import javax.websocket.CloseReason.CloseCodes; -import javax.websocket.Extension; -import javax.websocket.Session; +import jakarta.websocket.CloseReason; +import jakarta.websocket.CloseReason.CloseCodes; +import jakarta.websocket.Extension; +import jakarta.websocket.Session; import org.springframework.http.HttpHeaders; import org.springframework.lang.Nullable; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/WebSocketToStandardExtensionAdapter.java b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/WebSocketToStandardExtensionAdapter.java index d9d78897c60..c3bc04b974b 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/WebSocketToStandardExtensionAdapter.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/WebSocketToStandardExtensionAdapter.java @@ -19,13 +19,13 @@ package org.springframework.web.socket.adapter.standard; import java.util.ArrayList; import java.util.List; -import javax.websocket.Extension; +import jakarta.websocket.Extension; import org.springframework.web.socket.WebSocketExtension; /** * Adapt an instance of {@link org.springframework.web.socket.WebSocketExtension} to - * the {@link javax.websocket.Extension} interface. + * the {@link jakarta.websocket.Extension} interface. * * @author Rossen Stoyanchev * @since 4.0 diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/client/jetty/JettyWebSocketClient.java b/spring-websocket/src/main/java/org/springframework/web/socket/client/jetty/JettyWebSocketClient.java index 982bbfa61e4..b70b3f22afb 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/client/jetty/JettyWebSocketClient.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/client/jetty/JettyWebSocketClient.java @@ -16,8 +16,6 @@ package org.springframework.web.socket.client.jetty; -import java.io.IOException; -import java.lang.reflect.Method; import java.net.URI; import java.security.Principal; import java.util.List; @@ -36,14 +34,11 @@ import org.springframework.core.task.SimpleAsyncTaskExecutor; import org.springframework.core.task.TaskExecutor; import org.springframework.http.HttpHeaders; import org.springframework.lang.Nullable; -import org.springframework.util.ClassUtils; -import org.springframework.util.ReflectionUtils; import org.springframework.util.concurrent.ListenableFuture; import org.springframework.util.concurrent.ListenableFutureTask; import org.springframework.web.socket.WebSocketExtension; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.WebSocketSession; -import org.springframework.web.socket.adapter.jetty.Jetty10WebSocketHandlerAdapter; import org.springframework.web.socket.adapter.jetty.JettyWebSocketHandlerAdapter; import org.springframework.web.socket.adapter.jetty.JettyWebSocketSession; import org.springframework.web.socket.adapter.jetty.WebSocketToJettyExtensionConfigAdapter; @@ -61,36 +56,16 @@ import org.springframework.web.util.UriComponentsBuilder; * WebSocketConnectionManager} instead to auto-start a WebSocket connection. * * @author Rossen Stoyanchev + * @author Juergen Hoeller * @since 4.0 */ public class JettyWebSocketClient extends AbstractWebSocketClient implements Lifecycle { - private static ClassLoader loader = JettyWebSocketClient.class.getClassLoader(); - - private static final boolean jetty10Present; - - private static final Method setHeadersMethod; - - static { - jetty10Present = ClassUtils.isPresent( - "org.eclipse.jetty.websocket.client.JettyUpgradeListener", loader); - try { - setHeadersMethod = ClientUpgradeRequest.class.getMethod("setHeaders", Map.class); - } - catch (NoSuchMethodException ex) { - throw new IllegalStateException("No compatible Jetty version found", ex); - } - } - - private final org.eclipse.jetty.websocket.client.WebSocketClient client; @Nullable private AsyncListenableTaskExecutor taskExecutor = new SimpleAsyncTaskExecutor(); - private final UpgradeHelper upgradeHelper = - (jetty10Present ? new Jetty10UpgradeHelper() : new Jetty9UpgradeHelper()); - /** * Default constructor that creates an instance of @@ -170,19 +145,18 @@ public class JettyWebSocketClient extends AbstractWebSocketClient implements Lif final ClientUpgradeRequest request = new ClientUpgradeRequest(); request.setSubProtocols(protocols); - for (WebSocketExtension e : extensions) { - request.addExtensions(new WebSocketToJettyExtensionConfigAdapter(e)); + for (WebSocketExtension extension : extensions) { + request.addExtensions(new WebSocketToJettyExtensionConfigAdapter(extension)); } - // Jetty 9: setHeaders declared in UpgradeRequestAdapter base class - // Jetty 10: setHeaders declared in ClientUpgradeRequest - ReflectionUtils.invokeMethod(setHeadersMethod, request, headers); + request.setHeaders(headers); Principal user = getUser(); JettyWebSocketSession wsSession = new JettyWebSocketSession(attributes, user); Callable connectTask = () -> { - Future future = this.upgradeHelper.connect(this.client, uri, request, wsHandler, wsSession); + JettyWebSocketHandlerAdapter adapter = new JettyWebSocketHandlerAdapter(wsHandler, wsSession); + Future future = this.client.connect(adapter, uri, request); future.get(this.client.getConnectTimeout() + 2000, TimeUnit.MILLISECONDS); return wsSession; }; @@ -206,55 +180,4 @@ public class JettyWebSocketClient extends AbstractWebSocketClient implements Lif return null; } - - /** - * Encapsulate incompatible changes between Jetty 9.4 and 10. - */ - private interface UpgradeHelper { - - Future connect(WebSocketClient client, URI url, ClientUpgradeRequest request, - WebSocketHandler handler, JettyWebSocketSession session) throws IOException; - } - - - private static class Jetty9UpgradeHelper implements UpgradeHelper { - - @Override - public Future connect(WebSocketClient client, URI url, ClientUpgradeRequest request, - WebSocketHandler handler, JettyWebSocketSession session) throws IOException { - - JettyWebSocketHandlerAdapter adapter = new JettyWebSocketHandlerAdapter(handler, session); - return client.connect(adapter, url, request); - } - } - - - private static class Jetty10UpgradeHelper implements UpgradeHelper { - - // On Jetty 9 returns Future, on Jetty 10 returns CompletableFuture - private static final Method connectMethod; - - static { - try { - Class type = loader.loadClass("org.eclipse.jetty.websocket.client.WebSocketClient"); - connectMethod = type.getMethod("connect", Object.class, URI.class, ClientUpgradeRequest.class); - } - catch (ClassNotFoundException | NoSuchMethodException ex) { - throw new IllegalStateException("No compatible Jetty version found", ex); - } - } - - @Override - @SuppressWarnings({"ConstantConditions", "unchecked"}) - public Future connect(WebSocketClient client, URI url, ClientUpgradeRequest request, - WebSocketHandler handler, JettyWebSocketSession session) { - - Jetty10WebSocketHandlerAdapter adapter = new Jetty10WebSocketHandlerAdapter(handler, session); - - // TODO: pass JettyUpgradeListener argument to set headers from HttpHeaders (like we do for Jetty 9) - // which would require a JDK Proxy since it is new in Jetty 10 - return (Future) ReflectionUtils.invokeMethod(connectMethod, client, adapter, url, request); - } - } - } diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/client/standard/AnnotatedEndpointConnectionManager.java b/spring-websocket/src/main/java/org/springframework/web/socket/client/standard/AnnotatedEndpointConnectionManager.java index fcb568e4904..7347791e1ad 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/client/standard/AnnotatedEndpointConnectionManager.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/client/standard/AnnotatedEndpointConnectionManager.java @@ -16,9 +16,9 @@ package org.springframework.web.socket.client.standard; -import javax.websocket.ContainerProvider; -import javax.websocket.Session; -import javax.websocket.WebSocketContainer; +import jakarta.websocket.ContainerProvider; +import jakarta.websocket.Session; +import jakarta.websocket.WebSocketContainer; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; @@ -32,7 +32,7 @@ import org.springframework.web.socket.handler.BeanCreatingHandlerProvider; /** * A WebSocket connection manager that is given a URI, a - * {@link javax.websocket.ClientEndpoint}-annotated endpoint, connects to a + * {@link jakarta.websocket.ClientEndpoint}-annotated endpoint, connects to a * WebSocket server through the {@link #start()} and {@link #stop()} methods. * If {@link #setAutoStartup(boolean)} is set to {@code true} this will be * done automatically when the Spring ApplicationContext is refreshed. diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/client/standard/EndpointConnectionManager.java b/spring-websocket/src/main/java/org/springframework/web/socket/client/standard/EndpointConnectionManager.java index 1fa1ed777c4..c58fb951e97 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/client/standard/EndpointConnectionManager.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/client/standard/EndpointConnectionManager.java @@ -19,15 +19,15 @@ package org.springframework.web.socket.client.standard; import java.util.Arrays; import java.util.List; -import javax.websocket.ClientEndpointConfig; -import javax.websocket.ClientEndpointConfig.Configurator; -import javax.websocket.ContainerProvider; -import javax.websocket.Decoder; -import javax.websocket.Encoder; -import javax.websocket.Endpoint; -import javax.websocket.Extension; -import javax.websocket.Session; -import javax.websocket.WebSocketContainer; +import jakarta.websocket.ClientEndpointConfig; +import jakarta.websocket.ClientEndpointConfig.Configurator; +import jakarta.websocket.ContainerProvider; +import jakarta.websocket.Decoder; +import jakarta.websocket.Encoder; +import jakarta.websocket.Endpoint; +import jakarta.websocket.Extension; +import jakarta.websocket.Session; +import jakarta.websocket.WebSocketContainer; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/client/standard/StandardWebSocketClient.java b/spring-websocket/src/main/java/org/springframework/web/socket/client/standard/StandardWebSocketClient.java index e942cb83924..3661300815f 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/client/standard/StandardWebSocketClient.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/client/standard/StandardWebSocketClient.java @@ -27,13 +27,13 @@ import java.util.Locale; import java.util.Map; import java.util.concurrent.Callable; -import javax.websocket.ClientEndpointConfig; -import javax.websocket.ClientEndpointConfig.Configurator; -import javax.websocket.ContainerProvider; -import javax.websocket.Endpoint; -import javax.websocket.Extension; -import javax.websocket.HandshakeResponse; -import javax.websocket.WebSocketContainer; +import jakarta.websocket.ClientEndpointConfig; +import jakarta.websocket.ClientEndpointConfig.Configurator; +import jakarta.websocket.ContainerProvider; +import jakarta.websocket.Endpoint; +import jakarta.websocket.Extension; +import jakarta.websocket.HandshakeResponse; +import jakarta.websocket.WebSocketContainer; import org.springframework.core.task.AsyncListenableTaskExecutor; import org.springframework.core.task.SimpleAsyncTaskExecutor; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/client/standard/WebSocketContainerFactoryBean.java b/spring-websocket/src/main/java/org/springframework/web/socket/client/standard/WebSocketContainerFactoryBean.java index 8c8591b2e0d..66bb8ade631 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/client/standard/WebSocketContainerFactoryBean.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/client/standard/WebSocketContainerFactoryBean.java @@ -16,13 +16,13 @@ package org.springframework.web.socket.client.standard; -import javax.websocket.ContainerProvider; -import javax.websocket.WebSocketContainer; +import jakarta.websocket.ContainerProvider; +import jakarta.websocket.WebSocketContainer; import org.springframework.beans.factory.FactoryBean; /** - * A FactoryBean for creating and configuring a {@link javax.websocket.WebSocketContainer} + * A FactoryBean for creating and configuring a {@link jakarta.websocket.WebSocketContainer} * through Spring XML configuration. In Java configuration, ignore this class and use * {@code ContainerProvider.getWebSocketContainer()} instead. * diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/config/MessageBrokerBeanDefinitionParser.java b/spring-websocket/src/main/java/org/springframework/web/socket/config/MessageBrokerBeanDefinitionParser.java index a0828f3f37b..1c9fd553eef 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/config/MessageBrokerBeanDefinitionParser.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/config/MessageBrokerBeanDefinitionParser.java @@ -127,8 +127,8 @@ class MessageBrokerBeanDefinitionParser implements BeanDefinitionParser { jackson2Present = ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", classLoader) && ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", classLoader); gsonPresent = ClassUtils.isPresent("com.google.gson.Gson", classLoader); - jsonbPresent = ClassUtils.isPresent("javax.json.bind.Jsonb", classLoader); - javaxValidationPresent = ClassUtils.isPresent("javax.validation.Validator", classLoader); + jsonbPresent = ClassUtils.isPresent("jakarta.json.bind.Jsonb", classLoader); + javaxValidationPresent = ClassUtils.isPresent("jakarta.validation.Validator", classLoader); } diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/jetty/Jetty10RequestUpgradeStrategy.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/jetty/Jetty10RequestUpgradeStrategy.java deleted file mode 100644 index 1ba17565477..00000000000 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/jetty/Jetty10RequestUpgradeStrategy.java +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Copyright 2002-2021 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.web.socket.server.jetty; - -import java.lang.reflect.Method; -import java.lang.reflect.UndeclaredThrowableException; -import java.security.Principal; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.aopalliance.intercept.MethodInterceptor; -import org.aopalliance.intercept.MethodInvocation; - -import org.springframework.aop.framework.ProxyFactory; -import org.springframework.aop.target.EmptyTargetSource; -import org.springframework.http.server.ServerHttpRequest; -import org.springframework.http.server.ServerHttpResponse; -import org.springframework.http.server.ServletServerHttpRequest; -import org.springframework.http.server.ServletServerHttpResponse; -import org.springframework.lang.NonNull; -import org.springframework.lang.Nullable; -import org.springframework.util.Assert; -import org.springframework.util.ReflectionUtils; -import org.springframework.web.socket.WebSocketExtension; -import org.springframework.web.socket.WebSocketHandler; -import org.springframework.web.socket.adapter.jetty.Jetty10WebSocketHandlerAdapter; -import org.springframework.web.socket.adapter.jetty.JettyWebSocketSession; -import org.springframework.web.socket.server.HandshakeFailureException; -import org.springframework.web.socket.server.RequestUpgradeStrategy; - -/** - * A {@link RequestUpgradeStrategy} for Jetty 10. - * - * @author Rossen Stoyanchev - * @since 5.3.4 - */ -public class Jetty10RequestUpgradeStrategy implements RequestUpgradeStrategy { - - private static final String[] SUPPORTED_VERSIONS = new String[] { String.valueOf(13) }; - - private static final Class webSocketCreatorClass; - - private static final Method getContainerMethod; - - private static final Method upgradeMethod; - - private static final Method setAcceptedSubProtocol; - - static { - ClassLoader loader = Jetty10RequestUpgradeStrategy.class.getClassLoader(); - try { - webSocketCreatorClass = loader.loadClass("org.eclipse.jetty.websocket.server.JettyWebSocketCreator"); - - Class type = loader.loadClass("org.eclipse.jetty.websocket.server.JettyWebSocketServerContainer"); - getContainerMethod = type.getMethod("getContainer", ServletContext.class); - Method upgrade = ReflectionUtils.findMethod(type, "upgrade", (Class[]) null); - Assert.state(upgrade != null, "Upgrade method not found"); - upgradeMethod = upgrade; - - type = loader.loadClass("org.eclipse.jetty.websocket.server.JettyServerUpgradeResponse"); - setAcceptedSubProtocol = type.getMethod("setAcceptedSubProtocol", String.class); - } - catch (Exception ex) { - throw new IllegalStateException("No compatible Jetty version found", ex); - } - } - - - @Override - public String[] getSupportedVersions() { - return SUPPORTED_VERSIONS; - } - - @Override - public List getSupportedExtensions(ServerHttpRequest request) { - return Collections.emptyList(); - } - - - @Override - public void upgrade(ServerHttpRequest request, ServerHttpResponse response, - @Nullable String selectedProtocol, List selectedExtensions, - @Nullable Principal user, WebSocketHandler handler, Map attributes) - throws HandshakeFailureException { - - Assert.isInstanceOf(ServletServerHttpRequest.class, request, "ServletServerHttpRequest required"); - HttpServletRequest servletRequest = ((ServletServerHttpRequest) request).getServletRequest(); - ServletContext servletContext = servletRequest.getServletContext(); - - Assert.isInstanceOf(ServletServerHttpResponse.class, response, "ServletServerHttpResponse required"); - HttpServletResponse servletResponse = ((ServletServerHttpResponse) response).getServletResponse(); - - JettyWebSocketSession session = new JettyWebSocketSession(attributes, user); - Jetty10WebSocketHandlerAdapter handlerAdapter = new Jetty10WebSocketHandlerAdapter(handler, session); - - try { - Object creator = createJettyWebSocketCreator(handlerAdapter, selectedProtocol); - Object container = ReflectionUtils.invokeMethod(getContainerMethod, null, servletContext); - ReflectionUtils.invokeMethod(upgradeMethod, container, creator, servletRequest, servletResponse); - } - catch (UndeclaredThrowableException ex) { - throw new HandshakeFailureException("Failed to upgrade", ex.getUndeclaredThrowable()); - } - catch (Exception ex) { - throw new HandshakeFailureException("Failed to upgrade", ex); - } - } - - private static Object createJettyWebSocketCreator( - Jetty10WebSocketHandlerAdapter adapter, @Nullable String protocol) { - - ProxyFactory factory = new ProxyFactory(EmptyTargetSource.INSTANCE); - factory.addInterface(webSocketCreatorClass); - factory.addAdvice(new WebSocketCreatorInterceptor(adapter, protocol)); - return factory.getProxy(); - } - - - /** - * Proxy for a JettyWebSocketCreator to supply the WebSocket handler and set the sub-protocol. - */ - private static class WebSocketCreatorInterceptor implements MethodInterceptor { - - private final Jetty10WebSocketHandlerAdapter adapter; - - @Nullable - private final String protocol; - - - public WebSocketCreatorInterceptor( - Jetty10WebSocketHandlerAdapter adapter, @Nullable String protocol) { - - this.adapter = adapter; - this.protocol = protocol; - } - - @Nullable - @Override - public Object invoke(@NonNull MethodInvocation invocation) { - if (this.protocol != null) { - ReflectionUtils.invokeMethod( - setAcceptedSubProtocol, invocation.getArguments()[2], this.protocol); - } - return this.adapter; - } - } - -} diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/jetty/JettyRequestUpgradeStrategy.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/jetty/JettyRequestUpgradeStrategy.java index b733141f39a..946f061af37 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/jetty/JettyRequestUpgradeStrategy.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/jetty/JettyRequestUpgradeStrategy.java @@ -16,268 +16,149 @@ package org.springframework.web.socket.server.jetty; -import java.io.IOException; import java.lang.reflect.Method; +import java.lang.reflect.UndeclaredThrowableException; import java.security.Principal; -import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.Set; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.aopalliance.intercept.MethodInterceptor; +import org.aopalliance.intercept.MethodInvocation; -import org.eclipse.jetty.websocket.api.WebSocketPolicy; -import org.eclipse.jetty.websocket.api.extensions.ExtensionConfig; -import org.eclipse.jetty.websocket.server.WebSocketServerFactory; - -import org.springframework.context.Lifecycle; -import org.springframework.core.NamedThreadLocal; +import org.springframework.aop.framework.ProxyFactory; +import org.springframework.aop.target.EmptyTargetSource; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.http.server.ServletServerHttpRequest; import org.springframework.http.server.ServletServerHttpResponse; +import org.springframework.lang.NonNull; import org.springframework.lang.Nullable; import org.springframework.util.Assert; -import org.springframework.util.ClassUtils; -import org.springframework.util.CollectionUtils; import org.springframework.util.ReflectionUtils; -import org.springframework.web.context.ServletContextAware; import org.springframework.web.socket.WebSocketExtension; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.adapter.jetty.JettyWebSocketHandlerAdapter; import org.springframework.web.socket.adapter.jetty.JettyWebSocketSession; -import org.springframework.web.socket.adapter.jetty.WebSocketToJettyExtensionConfigAdapter; import org.springframework.web.socket.server.HandshakeFailureException; import org.springframework.web.socket.server.RequestUpgradeStrategy; /** - * A {@link RequestUpgradeStrategy} for use with Jetty 9.4. Based on Jetty's - * internal {@code org.eclipse.jetty.websocket.server.WebSocketHandler} class. + * A {@link RequestUpgradeStrategy} for Jetty 11. * - * @author Phillip Webb * @author Rossen Stoyanchev - * @author Brian Clozel - * @author Juergen Hoeller - * @since 4.0 + * @since 5.3.4 */ -public class JettyRequestUpgradeStrategy implements RequestUpgradeStrategy, ServletContextAware, Lifecycle { - - private static final ThreadLocal containerHolder = - new NamedThreadLocal<>("WebSocketHandlerContainer"); +public class JettyRequestUpgradeStrategy implements RequestUpgradeStrategy { - @Nullable - private WebSocketPolicy policy; + private static final String[] SUPPORTED_VERSIONS = new String[] { String.valueOf(13) }; - @Nullable - private volatile WebSocketServerFactory factory; + private static final Class webSocketCreatorClass; - @Nullable - private ServletContext servletContext; + private static final Method getContainerMethod; - private volatile boolean running; + private static final Method upgradeMethod; - @Nullable - private volatile List supportedExtensions; + private static final Method setAcceptedSubProtocol; + static { + // TODO: can switch to non-reflective implementation now - /** - * Default constructor that creates {@link WebSocketServerFactory} through - * its default constructor thus using a default {@link WebSocketPolicy}. - */ - public JettyRequestUpgradeStrategy() { - this.policy = WebSocketPolicy.newServerPolicy(); - } - - /** - * A constructor accepting a {@link WebSocketPolicy} to be used when - * creating the {@link WebSocketServerFactory} instance. - * @param policy the policy to use - * @since 4.3.5 - */ - public JettyRequestUpgradeStrategy(WebSocketPolicy policy) { - Assert.notNull(policy, "WebSocketPolicy must not be null"); - this.policy = policy; - } - - /** - * A constructor accepting a {@link WebSocketServerFactory}. - * @param factory the pre-configured factory to use - */ - public JettyRequestUpgradeStrategy(WebSocketServerFactory factory) { - Assert.notNull(factory, "WebSocketServerFactory must not be null"); - this.factory = factory; - } - + ClassLoader loader = JettyRequestUpgradeStrategy.class.getClassLoader(); + try { + webSocketCreatorClass = loader.loadClass("org.eclipse.jetty.websocket.server.JettyWebSocketCreator"); - @Override - public void setServletContext(ServletContext servletContext) { - this.servletContext = servletContext; - } + Class type = loader.loadClass("org.eclipse.jetty.websocket.server.JettyWebSocketServerContainer"); + getContainerMethod = type.getMethod("getContainer", ServletContext.class); + Method upgrade = ReflectionUtils.findMethod(type, "upgrade", (Class[]) null); + Assert.state(upgrade != null, "Upgrade method not found"); + upgradeMethod = upgrade; - @Override - public void start() { - if (!isRunning()) { - this.running = true; - try { - WebSocketServerFactory factory = this.factory; - if (factory == null) { - Assert.state(this.servletContext != null, "No ServletContext set"); - factory = new WebSocketServerFactory(this.servletContext, this.policy); - this.factory = factory; - } - factory.setCreator((request, response) -> { - WebSocketHandlerContainer container = containerHolder.get(); - Assert.state(container != null, "Expected WebSocketHandlerContainer"); - response.setAcceptedSubProtocol(container.getSelectedProtocol()); - response.setExtensions(container.getExtensionConfigs()); - return container.getHandler(); - }); - factory.start(); - } - catch (Throwable ex) { - throw new IllegalStateException("Unable to start Jetty WebSocketServerFactory", ex); - } + type = loader.loadClass("org.eclipse.jetty.websocket.server.JettyServerUpgradeResponse"); + setAcceptedSubProtocol = type.getMethod("setAcceptedSubProtocol", String.class); } - } - - @Override - public void stop() { - if (isRunning()) { - this.running = false; - WebSocketServerFactory factory = this.factory; - if (factory != null) { - try { - factory.stop(); - } - catch (Throwable ex) { - throw new IllegalStateException("Unable to stop Jetty WebSocketServerFactory", ex); - } - } + catch (Exception ex) { + throw new IllegalStateException("No compatible Jetty version found", ex); } } - @Override - public boolean isRunning() { - return this.running; - } - @Override public String[] getSupportedVersions() { - return new String[] { String.valueOf(13) }; + return SUPPORTED_VERSIONS; } @Override public List getSupportedExtensions(ServerHttpRequest request) { - List extensions = this.supportedExtensions; - if (extensions == null) { - extensions = buildWebSocketExtensions(); - this.supportedExtensions = extensions; - } - return extensions; - } - - private List buildWebSocketExtensions() { - Set names = getExtensionNames(); - List result = new ArrayList<>(names.size()); - for (String name : names) { - result.add(new WebSocketExtension(name)); - } - return result; + return Collections.emptyList(); } - @SuppressWarnings({"unchecked", "deprecation"}) - private Set getExtensionNames() { - WebSocketServerFactory factory = this.factory; - Assert.state(factory != null, "No WebSocketServerFactory available"); - try { - return factory.getAvailableExtensionNames(); - } - catch (IncompatibleClassChangeError ex) { - // Fallback for versions prior to 9.4.21: - // 9.4.20.v20190813: ExtensionFactory (abstract class -> interface) - // 9.4.21.v20190926: ExtensionFactory (interface -> abstract class) + deprecated - Class clazz = org.eclipse.jetty.websocket.api.extensions.ExtensionFactory.class; - Method method = ClassUtils.getMethod(clazz, "getExtensionNames"); - Set result = (Set) ReflectionUtils.invokeMethod(method, factory.getExtensionFactory()); - return (result != null ? result : Collections.emptySet()); - } - } @Override public void upgrade(ServerHttpRequest request, ServerHttpResponse response, - @Nullable String selectedProtocol, List selectedExtensions, @Nullable Principal user, - WebSocketHandler wsHandler, Map attributes) throws HandshakeFailureException { + @Nullable String selectedProtocol, List selectedExtensions, + @Nullable Principal user, WebSocketHandler handler, Map attributes) + throws HandshakeFailureException { Assert.isInstanceOf(ServletServerHttpRequest.class, request, "ServletServerHttpRequest required"); HttpServletRequest servletRequest = ((ServletServerHttpRequest) request).getServletRequest(); + ServletContext servletContext = servletRequest.getServletContext(); Assert.isInstanceOf(ServletServerHttpResponse.class, response, "ServletServerHttpResponse required"); HttpServletResponse servletResponse = ((ServletServerHttpResponse) response).getServletResponse(); - WebSocketServerFactory factory = this.factory; - Assert.state(factory != null, "No WebSocketServerFactory available"); - Assert.isTrue(factory.isUpgradeRequest(servletRequest, servletResponse), "Not a WebSocket handshake"); - JettyWebSocketSession session = new JettyWebSocketSession(attributes, user); - JettyWebSocketHandlerAdapter handlerAdapter = new JettyWebSocketHandlerAdapter(wsHandler, session); - - WebSocketHandlerContainer container = - new WebSocketHandlerContainer(handlerAdapter, selectedProtocol, selectedExtensions); + JettyWebSocketHandlerAdapter handlerAdapter = new JettyWebSocketHandlerAdapter(handler, session); try { - containerHolder.set(container); - factory.acceptWebSocket(servletRequest, servletResponse); + Object creator = createJettyWebSocketCreator(handlerAdapter, selectedProtocol); + Object container = ReflectionUtils.invokeMethod(getContainerMethod, null, servletContext); + ReflectionUtils.invokeMethod(upgradeMethod, container, creator, servletRequest, servletResponse); } - catch (IOException ex) { - throw new HandshakeFailureException( - "Response update failed during upgrade to WebSocket: " + request.getURI(), ex); + catch (UndeclaredThrowableException ex) { + throw new HandshakeFailureException("Failed to upgrade", ex.getUndeclaredThrowable()); } - finally { - containerHolder.remove(); + catch (Exception ex) { + throw new HandshakeFailureException("Failed to upgrade", ex); } } + private static Object createJettyWebSocketCreator( + JettyWebSocketHandlerAdapter adapter, @Nullable String protocol) { - private static class WebSocketHandlerContainer { - - private final JettyWebSocketHandlerAdapter handler; + ProxyFactory factory = new ProxyFactory(EmptyTargetSource.INSTANCE); + factory.addInterface(webSocketCreatorClass); + factory.addAdvice(new WebSocketCreatorInterceptor(adapter, protocol)); + return factory.getProxy(); + } - @Nullable - private final String selectedProtocol; - private final List extensionConfigs; + /** + * Proxy for a JettyWebSocketCreator to supply the WebSocket handler and set the sub-protocol. + */ + private static class WebSocketCreatorInterceptor implements MethodInterceptor { - public WebSocketHandlerContainer(JettyWebSocketHandlerAdapter handler, - @Nullable String protocol, List extensions) { + private final JettyWebSocketHandlerAdapter adapter; - this.handler = handler; - this.selectedProtocol = protocol; - if (CollectionUtils.isEmpty(extensions)) { - this.extensionConfigs = new ArrayList<>(0); - } - else { - this.extensionConfigs = new ArrayList<>(extensions.size()); - for (WebSocketExtension extension : extensions) { - this.extensionConfigs.add(new WebSocketToJettyExtensionConfigAdapter(extension)); - } - } - } + @Nullable + private final String protocol; - public JettyWebSocketHandlerAdapter getHandler() { - return this.handler; + public WebSocketCreatorInterceptor(JettyWebSocketHandlerAdapter adapter, @Nullable String protocol) { + this.adapter = adapter; + this.protocol = protocol; } @Nullable - public String getSelectedProtocol() { - return this.selectedProtocol; - } - - public List getExtensionConfigs() { - return this.extensionConfigs; + @Override + public Object invoke(@NonNull MethodInvocation invocation) { + if (this.protocol != null) { + ReflectionUtils.invokeMethod( + setAcceptedSubProtocol, invocation.getArguments()[2], this.protocol); + } + return this.adapter; } } diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/AbstractStandardUpgradeStrategy.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/AbstractStandardUpgradeStrategy.java index 0528da269e1..e19318ad296 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/AbstractStandardUpgradeStrategy.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/AbstractStandardUpgradeStrategy.java @@ -22,14 +22,13 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.websocket.Endpoint; -import javax.websocket.Extension; -import javax.websocket.WebSocketContainer; -import javax.websocket.server.ServerContainer; - +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.websocket.Endpoint; +import jakarta.websocket.Extension; +import jakarta.websocket.WebSocketContainer; +import jakarta.websocket.server.ServerContainer; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -66,9 +65,9 @@ public abstract class AbstractStandardUpgradeStrategy implements RequestUpgradeS protected ServerContainer getContainer(HttpServletRequest request) { ServletContext servletContext = request.getServletContext(); - String attrName = "javax.websocket.server.ServerContainer"; + String attrName = "jakarta.websocket.server.ServerContainer"; ServerContainer container = (ServerContainer) servletContext.getAttribute(attrName); - Assert.notNull(container, "No 'javax.websocket.server.ServerContainer' ServletContext attribute. " + + Assert.notNull(container, "No 'jakarta.websocket.server.ServerContainer' ServletContext attribute. " + "Are you running in a Servlet container that supports JSR-356?"); return container; } diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/AbstractTyrusRequestUpgradeStrategy.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/AbstractTyrusRequestUpgradeStrategy.java index b6406ac82b4..3a9f7b0561f 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/AbstractTyrusRequestUpgradeStrategy.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/AbstractTyrusRequestUpgradeStrategy.java @@ -25,15 +25,14 @@ import java.util.Collections; import java.util.List; import java.util.Random; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.websocket.DeploymentException; -import javax.websocket.Endpoint; -import javax.websocket.EndpointConfig; -import javax.websocket.Extension; -import javax.websocket.WebSocketContainer; - +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.websocket.DeploymentException; +import jakarta.websocket.Endpoint; +import jakarta.websocket.EndpointConfig; +import jakarta.websocket.Extension; +import jakarta.websocket.WebSocketContainer; import org.glassfish.tyrus.core.ComponentProviderService; import org.glassfish.tyrus.core.RequestContext; import org.glassfish.tyrus.core.TyrusEndpointWrapper; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/GlassFishRequestUpgradeStrategy.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/GlassFishRequestUpgradeStrategy.java index 8fc03354f9e..07ca46500e1 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/GlassFishRequestUpgradeStrategy.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/GlassFishRequestUpgradeStrategy.java @@ -19,10 +19,9 @@ package org.springframework.web.socket.server.standard; import java.io.IOException; import java.lang.reflect.Constructor; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.glassfish.tyrus.core.TyrusUpgradeResponse; import org.glassfish.tyrus.core.Utils; import org.glassfish.tyrus.servlet.TyrusHttpUpgradeHandler; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/ServerEndpointExporter.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/ServerEndpointExporter.java index acbce32b8d3..efd7c756f84 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/ServerEndpointExporter.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/ServerEndpointExporter.java @@ -22,11 +22,11 @@ import java.util.List; import java.util.Map; import java.util.Set; -import javax.servlet.ServletContext; -import javax.websocket.DeploymentException; -import javax.websocket.server.ServerContainer; -import javax.websocket.server.ServerEndpoint; -import javax.websocket.server.ServerEndpointConfig; +import jakarta.servlet.ServletContext; +import jakarta.websocket.DeploymentException; +import jakarta.websocket.server.ServerContainer; +import jakarta.websocket.server.ServerEndpoint; +import jakarta.websocket.server.ServerEndpointConfig; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.SmartInitializingSingleton; @@ -36,7 +36,7 @@ import org.springframework.util.Assert; import org.springframework.web.context.support.WebApplicationObjectSupport; /** - * Detects beans of type {@link javax.websocket.server.ServerEndpointConfig} and registers + * Detects beans of type {@link jakarta.websocket.server.ServerEndpointConfig} and registers * with the standard Java WebSocket runtime. Also detects beans annotated with * {@link ServerEndpoint} and registers them as well. Although not required, it is likely * annotated endpoints should have their {@code configurator} property set to @@ -93,7 +93,7 @@ public class ServerEndpointExporter extends WebApplicationObjectSupport protected void initServletContext(ServletContext servletContext) { if (this.serverContainer == null) { this.serverContainer = - (ServerContainer) servletContext.getAttribute("javax.websocket.server.ServerContainer"); + (ServerContainer) servletContext.getAttribute("jakarta.websocket.server.ServerContainer"); } } @@ -104,7 +104,7 @@ public class ServerEndpointExporter extends WebApplicationObjectSupport @Override public void afterPropertiesSet() { - Assert.state(getServerContainer() != null, "javax.websocket.server.ServerContainer not available"); + Assert.state(getServerContainer() != null, "jakarta.websocket.server.ServerContainer not available"); } @Override diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/ServerEndpointRegistration.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/ServerEndpointRegistration.java index 78b138ff509..bc42f3dc883 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/ServerEndpointRegistration.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/ServerEndpointRegistration.java @@ -21,13 +21,13 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.websocket.Decoder; -import javax.websocket.Encoder; -import javax.websocket.Endpoint; -import javax.websocket.Extension; -import javax.websocket.HandshakeResponse; -import javax.websocket.server.HandshakeRequest; -import javax.websocket.server.ServerEndpointConfig; +import jakarta.websocket.Decoder; +import jakarta.websocket.Encoder; +import jakarta.websocket.Endpoint; +import jakarta.websocket.Extension; +import jakarta.websocket.HandshakeResponse; +import jakarta.websocket.server.HandshakeRequest; +import jakarta.websocket.server.ServerEndpointConfig; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; @@ -36,17 +36,17 @@ import org.springframework.util.Assert; import org.springframework.web.socket.handler.BeanCreatingHandlerProvider; /** - * An implementation of {@link javax.websocket.server.ServerEndpointConfig} for use in + * An implementation of {@link jakarta.websocket.server.ServerEndpointConfig} for use in * Spring-based applications. A {@link ServerEndpointRegistration} bean is detected by * {@link ServerEndpointExporter} and registered with a Java WebSocket runtime at startup. * - *

    Class constructors accept a singleton {@link javax.websocket.Endpoint} instance + *

    Class constructors accept a singleton {@link jakarta.websocket.Endpoint} instance * or an Endpoint specified by type {@link Class}. When specified by type, the endpoint * will be instantiated and initialized through the Spring ApplicationContext before * each client WebSocket connection. * *

    This class also extends - * {@link javax.websocket.server.ServerEndpointConfig.Configurator} to make it easier + * {@link jakarta.websocket.server.ServerEndpointConfig.Configurator} to make it easier * to override methods for customizing the handshake process. * * @author Rossen Stoyanchev @@ -78,7 +78,7 @@ public class ServerEndpointRegistration extends ServerEndpointConfig.Configurato /** * Create a new {@link ServerEndpointRegistration} instance from an - * {@code javax.websocket.Endpoint} instance. + * {@code jakarta.websocket.Endpoint} instance. * @param path the endpoint path * @param endpoint the endpoint instance */ @@ -92,7 +92,7 @@ public class ServerEndpointRegistration extends ServerEndpointConfig.Configurato /** * Create a new {@link ServerEndpointRegistration} instance from an - * {@code javax.websocket.Endpoint} class. + * {@code jakarta.websocket.Endpoint} class. * @param path the endpoint path * @param endpointClass the endpoint class */ diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/ServletServerContainerFactoryBean.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/ServletServerContainerFactoryBean.java index 12240271437..7831250fb67 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/ServletServerContainerFactoryBean.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/ServletServerContainerFactoryBean.java @@ -16,9 +16,9 @@ package org.springframework.web.socket.server.standard; -import javax.servlet.ServletContext; -import javax.websocket.WebSocketContainer; -import javax.websocket.server.ServerContainer; +import jakarta.servlet.ServletContext; +import jakarta.websocket.WebSocketContainer; +import jakarta.websocket.server.ServerContainer; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.InitializingBean; @@ -27,9 +27,9 @@ import org.springframework.util.Assert; import org.springframework.web.context.ServletContextAware; /** - * A {@link FactoryBean} for configuring {@link javax.websocket.server.ServerContainer}. + * A {@link FactoryBean} for configuring {@link jakarta.websocket.server.ServerContainer}. * Since there is usually only one {@code ServerContainer} instance accessible under a - * well-known {@code javax.servlet.ServletContext} attribute, simply declaring this + * well-known {@code jakarta.servlet.ServletContext} attribute, simply declaring this * FactoryBean and using its setters allows for configuring the {@code ServerContainer} * through Spring configuration. * @@ -111,11 +111,11 @@ public class ServletServerContainerFactoryBean @Override public void afterPropertiesSet() { Assert.state(this.servletContext != null, - "A ServletContext is required to access the javax.websocket.server.ServerContainer instance"); + "A ServletContext is required to access the jakarta.websocket.server.ServerContainer instance"); this.serverContainer = (ServerContainer) this.servletContext.getAttribute( - "javax.websocket.server.ServerContainer"); + "jakarta.websocket.server.ServerContainer"); Assert.state(this.serverContainer != null, - "Attribute 'javax.websocket.server.ServerContainer' not found in ServletContext"); + "Attribute 'jakarta.websocket.server.ServerContainer' not found in ServletContext"); if (this.asyncSendTimeout != null) { this.serverContainer.setAsyncSendTimeout(this.asyncSendTimeout); diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/SpringConfigurator.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/SpringConfigurator.java index 712b978b09d..a27654b8650 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/SpringConfigurator.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/SpringConfigurator.java @@ -20,9 +20,8 @@ import java.util.Arrays; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import javax.websocket.server.ServerEndpoint; -import javax.websocket.server.ServerEndpointConfig.Configurator; - +import jakarta.websocket.server.ServerEndpoint; +import jakarta.websocket.server.ServerEndpointConfig.Configurator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -35,7 +34,7 @@ import org.springframework.web.context.ContextLoader; import org.springframework.web.context.WebApplicationContext; /** - * A {@link javax.websocket.server.ServerEndpointConfig.Configurator} for initializing + * A {@link jakarta.websocket.server.ServerEndpointConfig.Configurator} for initializing * {@link ServerEndpoint}-annotated classes through Spring. * *

    diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/TomcatRequestUpgradeStrategy.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/TomcatRequestUpgradeStrategy.java index c3c6a191609..37c194dfb41 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/TomcatRequestUpgradeStrategy.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/TomcatRequestUpgradeStrategy.java @@ -21,12 +21,11 @@ import java.util.Collections; import java.util.List; import java.util.Map; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.websocket.Endpoint; -import javax.websocket.Extension; - +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.websocket.Endpoint; +import jakarta.websocket.Extension; import org.apache.tomcat.websocket.server.WsServerContainer; import org.springframework.http.server.ServerHttpRequest; @@ -38,10 +37,10 @@ import org.springframework.web.socket.server.HandshakeFailureException; * A WebSocket {@code RequestUpgradeStrategy} for Apache Tomcat. Compatible with * all versions of Tomcat that support JSR-356, i.e. Tomcat 7.0.47+ and higher. * - *

    To modify properties of the underlying {@link javax.websocket.server.ServerContainer} + *

    To modify properties of the underlying {@link jakarta.websocket.server.ServerContainer} * you can use {@link ServletServerContainerFactoryBean} in XML configuration or, * when using Java configuration, access the container instance through the - * "javax.websocket.server.ServerContainer" ServletContext attribute. + * "jakarta.websocket.server.ServerContainer" ServletContext attribute. * * @author Rossen Stoyanchev * @since 4.0 diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/UndertowRequestUpgradeStrategy.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/UndertowRequestUpgradeStrategy.java index 96ac372042f..4ee43f18e50 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/UndertowRequestUpgradeStrategy.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/UndertowRequestUpgradeStrategy.java @@ -21,14 +21,13 @@ import java.util.Collections; import java.util.List; import java.util.Map; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.websocket.Endpoint; -import javax.websocket.Extension; - import io.undertow.websockets.core.WebSocketVersion; import io.undertow.websockets.jsr.ServerWebSocketContainer; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.websocket.Endpoint; +import jakarta.websocket.Extension; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/WebLogicRequestUpgradeStrategy.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/WebLogicRequestUpgradeStrategy.java index cf04f519c9d..8174297a5c4 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/WebLogicRequestUpgradeStrategy.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/WebLogicRequestUpgradeStrategy.java @@ -20,14 +20,13 @@ import java.io.IOException; import java.lang.reflect.Constructor; import java.lang.reflect.Method; -import javax.servlet.AsyncContext; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletRequestWrapper; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.AsyncContext; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletRequestWrapper; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.glassfish.tyrus.core.TyrusUpgradeResponse; import org.glassfish.tyrus.core.Utils; import org.glassfish.tyrus.spi.Connection; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/WebSphereRequestUpgradeStrategy.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/WebSphereRequestUpgradeStrategy.java index 62990dfe682..6a69ec0769f 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/WebSphereRequestUpgradeStrategy.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/WebSphereRequestUpgradeStrategy.java @@ -21,12 +21,12 @@ import java.util.Collections; import java.util.List; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.websocket.Endpoint; -import javax.websocket.Extension; -import javax.websocket.server.ServerContainer; -import javax.websocket.server.ServerEndpointConfig; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.websocket.Endpoint; +import jakarta.websocket.Extension; +import jakarta.websocket.server.ServerContainer; +import jakarta.websocket.server.ServerEndpointConfig; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/AbstractHandshakeHandler.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/support/AbstractHandshakeHandler.java index 8ca56429a4e..efc771a7ed8 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/AbstractHandshakeHandler.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/support/AbstractHandshakeHandler.java @@ -67,7 +67,6 @@ import org.springframework.web.socket.server.RequestUpgradeStrategy; * @see org.springframework.web.socket.server.standard.TomcatRequestUpgradeStrategy * @see org.springframework.web.socket.server.standard.UndertowRequestUpgradeStrategy * @see org.springframework.web.socket.server.standard.GlassFishRequestUpgradeStrategy - * @see org.springframework.web.socket.server.standard.WebLogicRequestUpgradeStrategy */ public abstract class AbstractHandshakeHandler implements HandshakeHandler, Lifecycle { @@ -75,8 +74,6 @@ public abstract class AbstractHandshakeHandler implements HandshakeHandler, Life private static final boolean jettyWsPresent; - private static final boolean jetty10WsPresent; - private static final boolean undertowWsPresent; private static final boolean glassfishWsPresent; @@ -89,10 +86,8 @@ public abstract class AbstractHandshakeHandler implements HandshakeHandler, Life ClassLoader classLoader = AbstractHandshakeHandler.class.getClassLoader(); tomcatWsPresent = ClassUtils.isPresent( "org.apache.tomcat.websocket.server.WsHttpUpgradeHandler", classLoader); - jetty10WsPresent = ClassUtils.isPresent( - "org.eclipse.jetty.websocket.server.JettyWebSocketServerContainer", classLoader); jettyWsPresent = ClassUtils.isPresent( - "org.eclipse.jetty.websocket.server.WebSocketServerFactory", classLoader); + "org.eclipse.jetty.websocket.server.JettyWebSocketServerContainer", classLoader); undertowWsPresent = ClassUtils.isPresent( "io.undertow.websockets.jsr.ServerWebSocketContainer", classLoader); glassfishWsPresent = ClassUtils.isPresent( @@ -140,9 +135,6 @@ public abstract class AbstractHandshakeHandler implements HandshakeHandler, Life else if (jettyWsPresent) { className = "org.springframework.web.socket.server.jetty.JettyRequestUpgradeStrategy"; } - else if (jetty10WsPresent) { - className = "org.springframework.web.socket.server.jetty.Jetty10RequestUpgradeStrategy"; - } else if (undertowWsPresent) { className = "org.springframework.web.socket.server.standard.UndertowRequestUpgradeStrategy"; } diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/DefaultHandshakeHandler.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/support/DefaultHandshakeHandler.java index 7cd06ac757a..a3701fc0997 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/DefaultHandshakeHandler.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/support/DefaultHandshakeHandler.java @@ -16,7 +16,7 @@ package org.springframework.web.socket.server.support; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import org.springframework.web.context.ServletContextAware; import org.springframework.web.socket.server.RequestUpgradeStrategy; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/HttpSessionHandshakeInterceptor.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/support/HttpSessionHandshakeInterceptor.java index 1f18ff4b904..ba020c32fe8 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/HttpSessionHandshakeInterceptor.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/support/HttpSessionHandshakeInterceptor.java @@ -21,7 +21,7 @@ import java.util.Collections; import java.util.Enumeration; import java.util.Map; -import javax.servlet.http.HttpSession; +import jakarta.servlet.http.HttpSession; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; @@ -128,7 +128,7 @@ public class HttpSessionHandshakeInterceptor implements HandshakeInterceptor { /** * Whether to allow the HTTP session to be created while accessing it. *

    By default set to {@code false}. - * @see javax.servlet.http.HttpServletRequest#getSession(boolean) + * @see jakarta.servlet.http.HttpServletRequest#getSession(boolean) */ public void setCreateSession(boolean createSession) { this.createSession = createSession; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/WebSocketHandlerMapping.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/support/WebSocketHandlerMapping.java index 47a66b62999..a6d5bfb7f91 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/WebSocketHandlerMapping.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/support/WebSocketHandlerMapping.java @@ -16,8 +16,8 @@ package org.springframework.web.socket.server.support; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.context.Lifecycle; import org.springframework.context.SmartLifecycle; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/WebSocketHttpRequestHandler.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/support/WebSocketHttpRequestHandler.java index 15c2a9ef3e3..997c547b447 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/WebSocketHttpRequestHandler.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/support/WebSocketHttpRequestHandler.java @@ -22,11 +22,10 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/JettyXhrTransport.java b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/JettyXhrTransport.java index 772e6c0295d..df046d197e6 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/JettyXhrTransport.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/JettyXhrTransport.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2020 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,7 +25,7 @@ import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.client.api.ContentResponse; import org.eclipse.jetty.client.api.Request; import org.eclipse.jetty.client.api.Response; -import org.eclipse.jetty.client.util.StringContentProvider; +import org.eclipse.jetty.client.util.StringRequestContent; import org.eclipse.jetty.http.HttpFields; import org.eclipse.jetty.http.HttpMethod; @@ -142,7 +142,7 @@ public class JettyXhrTransport extends AbstractXhrTransport implements Lifecycle Request httpRequest = this.httpClient.newRequest(url).method(method); addHttpHeaders(httpRequest, headers); if (body != null) { - httpRequest.content(new StringContentProvider(body)); + httpRequest.body(new StringRequestContent(body)); } ContentResponse response; try { @@ -160,10 +160,12 @@ public class JettyXhrTransport extends AbstractXhrTransport implements Lifecycle private static void addHttpHeaders(Request request, HttpHeaders headers) { - headers.forEach((key, values) -> { - for (String value : values) { - request.header(key, value); - } + request.headers(fields -> { + headers.forEach((key, values) -> { + for (String value : values) { + fields.add(key, value); + } + }); }); } diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/support/AbstractSockJsService.java b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/support/AbstractSockJsService.java index e3a94193710..e1c6ba116fe 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/support/AbstractSockJsService.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/support/AbstractSockJsService.java @@ -27,8 +27,7 @@ import java.util.List; import java.util.Random; import java.util.concurrent.TimeUnit; -import javax.servlet.http.HttpServletRequest; - +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/support/SockJsHttpRequestHandler.java b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/support/SockJsHttpRequestHandler.java index 67f1da304a7..555f8f8903e 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/support/SockJsHttpRequestHandler.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/support/SockJsHttpRequestHandler.java @@ -18,10 +18,10 @@ package org.springframework.web.socket.sockjs.support; import java.io.IOException; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.context.Lifecycle; import org.springframework.http.server.ServerHttpRequest; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/handler/DefaultSockJsService.java b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/handler/DefaultSockJsService.java index 3409eb15daf..8a33978475e 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/handler/DefaultSockJsService.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/handler/DefaultSockJsService.java @@ -21,8 +21,7 @@ import java.util.Collection; import java.util.LinkedHashSet; import java.util.Set; -import javax.servlet.ServletContext; - +import jakarta.servlet.ServletContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/handler/WebSocketTransportHandler.java b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/handler/WebSocketTransportHandler.java index 77e7bbe2f0c..8f58315f80a 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/handler/WebSocketTransportHandler.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/handler/WebSocketTransportHandler.java @@ -18,7 +18,7 @@ package org.springframework.web.socket.sockjs.transport.handler; import java.util.Map; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import org.springframework.context.Lifecycle; import org.springframework.http.server.ServerHttpRequest; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/session/AbstractHttpSockJsSession.java b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/session/AbstractHttpSockJsSession.java index a3d492ecf56..ce9786bc758 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/session/AbstractHttpSockJsSession.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/session/AbstractHttpSockJsSession.java @@ -26,7 +26,7 @@ import java.util.Map; import java.util.Queue; import java.util.concurrent.LinkedBlockingQueue; -import javax.servlet.ServletRequest; +import jakarta.servlet.ServletRequest; import org.springframework.http.HttpHeaders; import org.springframework.http.server.ServerHttpAsyncRequestControl; diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/AbstractWebSocketIntegrationTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/AbstractWebSocketIntegrationTests.java index ec9f90bfcca..588608f10d7 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/AbstractWebSocketIntegrationTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/AbstractWebSocketIntegrationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/JettyWebSocketTestServer.java b/spring-websocket/src/test/java/org/springframework/web/socket/JettyWebSocketTestServer.java index bec8dda7444..abe8c4d0959 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/JettyWebSocketTestServer.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/JettyWebSocketTestServer.java @@ -18,10 +18,9 @@ package org.springframework.web.socket; import java.util.EnumSet; -import javax.servlet.DispatcherType; -import javax.servlet.Filter; -import javax.servlet.ServletContext; - +import jakarta.servlet.DispatcherType; +import jakarta.servlet.Filter; +import jakarta.servlet.ServletContext; import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.NetworkConnector; import org.eclipse.jetty.server.Server; diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/TomcatWebSocketTestServer.java b/spring-websocket/src/test/java/org/springframework/web/socket/TomcatWebSocketTestServer.java index 78ca7714ac4..12e5b54fa48 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/TomcatWebSocketTestServer.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/TomcatWebSocketTestServer.java @@ -19,9 +19,8 @@ package org.springframework.web.socket; import java.io.File; import java.io.IOException; -import javax.servlet.Filter; -import javax.servlet.ServletContext; - +import jakarta.servlet.Filter; +import jakarta.servlet.ServletContext; import org.apache.catalina.Context; import org.apache.catalina.connector.Connector; import org.apache.catalina.startup.Tomcat; diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/UndertowTestServer.java b/spring-websocket/src/test/java/org/springframework/web/socket/UndertowTestServer.java index 58928225655..914450bec2e 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/UndertowTestServer.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/UndertowTestServer.java @@ -19,12 +19,6 @@ package org.springframework.web.socket; import java.io.IOException; import java.net.InetSocketAddress; -import javax.servlet.DispatcherType; -import javax.servlet.Filter; -import javax.servlet.Servlet; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; - import io.undertow.Undertow; import io.undertow.server.HttpHandler; import io.undertow.servlet.api.DeploymentInfo; @@ -34,6 +28,11 @@ import io.undertow.servlet.api.InstanceFactory; import io.undertow.servlet.api.InstanceHandle; import io.undertow.servlet.api.ServletInfo; import io.undertow.websockets.jsr.WebSocketDeploymentInfo; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.Filter; +import jakarta.servlet.Servlet; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; import org.xnio.OptionMap; import org.xnio.Xnio; diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/WebSocketTestServer.java b/spring-websocket/src/test/java/org/springframework/web/socket/WebSocketTestServer.java index 6b131e5573c..92c4c3f3d8c 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/WebSocketTestServer.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/WebSocketTestServer.java @@ -16,8 +16,8 @@ package org.springframework.web.socket; -import javax.servlet.Filter; -import javax.servlet.ServletContext; +import jakarta.servlet.Filter; +import jakarta.servlet.ServletContext; import org.springframework.web.context.WebApplicationContext; diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/adapter/standard/ConvertingEncoderDecoderSupportTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/adapter/standard/ConvertingEncoderDecoderSupportTests.java index 440dd412d21..486cb4a07c6 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/adapter/standard/ConvertingEncoderDecoderSupportTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/adapter/standard/ConvertingEncoderDecoderSupportTests.java @@ -18,11 +18,10 @@ package org.springframework.web.socket.adapter.standard; import java.nio.ByteBuffer; -import javax.websocket.DecodeException; -import javax.websocket.Decoder; -import javax.websocket.EncodeException; -import javax.websocket.Encoder; - +import jakarta.websocket.DecodeException; +import jakarta.websocket.Decoder; +import jakarta.websocket.EncodeException; +import jakarta.websocket.Encoder; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/adapter/standard/StandardWebSocketHandlerAdapterTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/adapter/standard/StandardWebSocketHandlerAdapterTests.java index 03a817c1cbf..a2f3501d122 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/adapter/standard/StandardWebSocketHandlerAdapterTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/adapter/standard/StandardWebSocketHandlerAdapterTests.java @@ -18,11 +18,10 @@ package org.springframework.web.socket.adapter.standard; import java.net.URI; -import javax.websocket.CloseReason; -import javax.websocket.CloseReason.CloseCodes; -import javax.websocket.MessageHandler; -import javax.websocket.Session; - +import jakarta.websocket.CloseReason; +import jakarta.websocket.CloseReason.CloseCodes; +import jakarta.websocket.MessageHandler; +import jakarta.websocket.Session; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/adapter/standard/StandardWebSocketSessionTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/adapter/standard/StandardWebSocketSessionTests.java index a16948cb4b1..100c6b2e654 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/adapter/standard/StandardWebSocketSessionTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/adapter/standard/StandardWebSocketSessionTests.java @@ -19,8 +19,7 @@ package org.springframework.web.socket.adapter.standard; import java.util.HashMap; import java.util.Map; -import javax.websocket.Session; - +import jakarta.websocket.Session; import org.junit.jupiter.api.Test; import org.mockito.Mockito; diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/client/jetty/JettyWebSocketClientTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/client/jetty/JettyWebSocketClientTests.java index 212b92ae891..2a4faef0aa0 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/client/jetty/JettyWebSocketClientTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/client/jetty/JettyWebSocketClientTests.java @@ -16,36 +16,14 @@ package org.springframework.web.socket.client.jetty; -import java.net.URI; -import java.util.Arrays; - -import org.eclipse.jetty.server.Server; -import org.eclipse.jetty.server.ServerConnector; -import org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest; -import org.eclipse.jetty.websocket.servlet.ServletUpgradeResponse; -import org.eclipse.jetty.websocket.servlet.WebSocketCreator; -import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import org.springframework.core.task.SimpleAsyncTaskExecutor; -import org.springframework.util.CollectionUtils; -import org.springframework.web.socket.WebSocketHandler; -import org.springframework.web.socket.WebSocketHttpHeaders; -import org.springframework.web.socket.WebSocketSession; -import org.springframework.web.socket.adapter.jetty.JettyWebSocketHandlerAdapter; -import org.springframework.web.socket.adapter.jetty.JettyWebSocketSession; -import org.springframework.web.socket.handler.TextWebSocketHandler; - -import static org.assertj.core.api.Assertions.assertThat; - /** * Tests for {@link JettyWebSocketClient}. + * * @author Rossen Stoyanchev */ public class JettyWebSocketClientTests { + /* TODO: complete upgrade to Jetty 11 private JettyWebSocketClient client; private TestJettyWebSocketServer server; @@ -113,12 +91,12 @@ public class JettyWebSocketClientTests { connector.setPort(0); this.server.addConnector(connector); - this.server.setHandler(new org.eclipse.jetty.websocket.server.WebSocketHandler() { + this.server.setHandler(new WebSocketUpgradeHandler() { @Override - public void configure(WebSocketServletFactory factory) { - factory.setCreator(new WebSocketCreator() { + public void configure(JettyWebSocketServletFactory factory) { + factory.setCreator(new JettyWebSocketCreator() { @Override - public Object createWebSocket(ServletUpgradeRequest req, ServletUpgradeResponse resp) { + public Object createWebSocket(JettyServerUpgradeRequest req, JettyServerUpgradeResponse resp) { if (!CollectionUtils.isEmpty(req.getSubProtocols())) { resp.setAcceptedSubProtocol(req.getSubProtocols().get(0)); } @@ -142,5 +120,6 @@ public class JettyWebSocketClientTests { return ((ServerConnector) this.server.getConnectors()[0]).getLocalPort(); } } + */ } diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/client/standard/StandardWebSocketClientTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/client/standard/StandardWebSocketClientTests.java index 99c34eec0e7..6246a681e82 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/client/standard/StandardWebSocketClientTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/client/standard/StandardWebSocketClientTests.java @@ -22,10 +22,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.websocket.ClientEndpointConfig; -import javax.websocket.Endpoint; -import javax.websocket.WebSocketContainer; - +import jakarta.websocket.ClientEndpointConfig; +import jakarta.websocket.Endpoint; +import jakarta.websocket.WebSocketContainer; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/server/standard/ServerEndpointExporterTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/server/standard/ServerEndpointExporterTests.java index 13cc9f4e6ca..f170340f693 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/server/standard/ServerEndpointExporterTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/server/standard/ServerEndpointExporterTests.java @@ -16,13 +16,12 @@ package org.springframework.web.socket.server.standard; -import javax.servlet.ServletContext; -import javax.websocket.Endpoint; -import javax.websocket.EndpointConfig; -import javax.websocket.Session; -import javax.websocket.server.ServerContainer; -import javax.websocket.server.ServerEndpoint; - +import jakarta.servlet.ServletContext; +import jakarta.websocket.Endpoint; +import jakarta.websocket.EndpointConfig; +import jakarta.websocket.Session; +import jakarta.websocket.server.ServerContainer; +import jakarta.websocket.server.ServerEndpoint; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -56,7 +55,7 @@ public class ServerEndpointExporterTests { this.serverContainer = mock(ServerContainer.class); this.servletContext = new MockServletContext(); - this.servletContext.setAttribute("javax.websocket.server.ServerContainer", this.serverContainer); + this.servletContext.setAttribute("jakarta.websocket.server.ServerContainer", this.serverContainer); this.webAppContext = new AnnotationConfigWebApplicationContext(); this.webAppContext.register(Config.class); @@ -129,7 +128,7 @@ public class ServerEndpointExporterTests { public void addServerEndpointConfigBeanWithExplicitServerContainer() throws Exception { ServerEndpointRegistration endpointRegistration = new ServerEndpointRegistration("/dummy", new DummyEndpoint()); this.webAppContext.getBeanFactory().registerSingleton("dummyEndpoint", endpointRegistration); - this.servletContext.removeAttribute("javax.websocket.server.ServerContainer"); + this.servletContext.removeAttribute("jakarta.websocket.server.ServerContainer"); this.exporter.setServerContainer(this.serverContainer); this.exporter.setApplicationContext(this.webAppContext); diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/server/standard/ServerEndpointRegistrationTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/server/standard/ServerEndpointRegistrationTests.java index 04f3740e5fc..64571a2dfd7 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/server/standard/ServerEndpointRegistrationTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/server/standard/ServerEndpointRegistrationTests.java @@ -16,10 +16,9 @@ package org.springframework.web.socket.server.standard; -import javax.websocket.Endpoint; -import javax.websocket.EndpointConfig; -import javax.websocket.Session; - +import jakarta.websocket.Endpoint; +import jakarta.websocket.EndpointConfig; +import jakarta.websocket.Session; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/server/standard/SpringConfiguratorTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/server/standard/SpringConfiguratorTests.java index ba77896f0a5..48f25ce7d82 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/server/standard/SpringConfiguratorTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/server/standard/SpringConfiguratorTests.java @@ -16,8 +16,7 @@ package org.springframework.web.socket.server.standard; -import javax.websocket.server.ServerEndpoint; - +import jakarta.websocket.server.ServerEndpoint; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/server/support/WebSocketHttpRequestHandlerTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/server/support/WebSocketHttpRequestHandlerTests.java index 77adaca9f8d..618e0441a92 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/server/support/WebSocketHttpRequestHandlerTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/server/support/WebSocketHttpRequestHandlerTests.java @@ -20,8 +20,7 @@ import java.io.IOException; import java.util.Collections; import java.util.Map; -import javax.servlet.ServletException; - +import jakarta.servlet.ServletException; import org.junit.jupiter.api.Test; import org.springframework.http.server.ServerHttpRequest; diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/client/AbstractSockJsIntegrationTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/client/AbstractSockJsIntegrationTests.java index 5c6cbd0a627..042ff8d1533 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/client/AbstractSockJsIntegrationTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/client/AbstractSockJsIntegrationTests.java @@ -29,15 +29,14 @@ import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; import java.util.function.BooleanSupplier; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.jupiter.api.AfterEach; diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/support/SockJsServiceTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/support/SockJsServiceTests.java index 16106bdccc8..39f9a619f1a 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/support/SockJsServiceTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/support/SockJsServiceTests.java @@ -20,9 +20,8 @@ import java.io.IOException; import java.util.Arrays; import java.util.Collections; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletResponse; - +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test;