⭐ New Features
- TransactionSynchronizationManager should remove ThreadLocal if removal of void ResourceHolder leaves resources map empty [SPR-8845] #13487
- Add support for setting an MBeanServerForwarder to ConnectorServerFactoryBean [SPR-8820] #13462
- Support JDO 3.x [SPR-8655] #13297
- MappingJacksonHttpMessageConverter should have getObjectMapper() method [SPR-8605] #13248
- AbstractCachingViewResolver does not cache negative lookups [SPR-8524] #13168
- SpEL: Unnecessary conversion of Map arguments [SPR-8518] #13163
- Update SQL error code mapping for H2 1.3.154 [SPR-8235] #12883
- GenericTypeResolver's getTypeVariableMap(...) and resolveType(...) should be public [SPR-8005] #12660
- Poor multithread performance in AbstractAutowireCapableBeanFactory.filterPropertyDescriptorsForDependencyCheck method [SPR-7863] #12520
- org.h2.jdbc.JdbcSQLException: NULL nicht zulässig für Feld "xyz" gets translated to org.springframework.jdbc.UncategorizedSQLException [SPR-7480] #12138
🪲 Bug Fixes
- CollectionsToCollectionsConverter no longer handles java.util.Collections$EmptyList -> java.util.Collections$EmptyList [SPR-7293] #11952
@Transactional
with qualifier can't find PlatformTransactionManager defined in parent context [SPR-7679] #12335- ResourceHttpRequestHandler shouldn't return 404 when mime-type of existing resource can't be determined (and maybe try harder) [SPR-7713] #12369
- CollectionToCollectionConverter does not convert if the source is empty [SPR-7728] #12384
- Setting "file-encoding" attribute in a "context:property-placeholder" element in spring xml configuration doesn't work [SPR-8024] #12679
- Exception during SpringSessionSynchronization.aftercompletion() results in IllegalStateException/SessionHolder never unbound from thread [SPR-8757] #13399
- Using DataBinder with an auto-growing list is broken [SPR-8828] #13470
- PortletUtils.getSessionMutex() needs to use APPLICATION_SCOPE [SPR-8888] #13529
- Autowire of overriden setters with generic parameter regression [SPR-8905] #13545
- SimpleJdbcTestUtils.executeSqlScript doesn't close script InputStream [SPR-8872] #13513
@RequestMapping
(headers="foo!=bar") does not work for non media type headers [SPR-8862] #13504- JDO PersistenceManager should not be closed until after transaction completion [SPR-8846] #13488
- TransactionSynchronizationManager should not return void ResourceHolder when unbinding [SPR-8844] #13486
- AbstractAsyncExecutionAspect setExecutor wrong assignment [SPR-8772] #13415
- ClassCastException possible when converting to a target type that is a subtype of T for a Converter<S, T> convertible type. [SPR-8718] #13360
- 3.0.6 Map to Map conversion shallow copying maps causing unexpected results on upgrade from 3.0.5 [SPR-8714] #13356
- DefaultResponseErrorHandler IOException Bug [SPR-8713] #13355
- contentLength method is not correctly implemented for all Resource subclasses [SPR-8709] #13351
- GenericTypeResolver can throw null pointer exception when types cannot be resolved [SPR-8698] #13340
- Media type such as "*/xml" should not be accepted [SPR-8697] #13339
- wrong getBody() implementation in ServletServerHttpRequest [SPR-8688] #13330
- Collection Binding broken - TypeConverterDelegate does bind Collection Elements to Collection type instead of the collection elements Type [SPR-8674] #13316
- Bridged method detection leads to false positive detection of autowired annotations [SPR-8660] #13302
- Incorrect output of big numbers when using NamedParameterJdbcTemplate.queryForLong [SPR-8652] #13294
- StringUtils.parseLocaleString incorrectly constrains the characters of the variant parts of a locale String [SPR-8637] #13279
- RmiClientInterceptorUtils.isConnectFailure() fails to detect java.rmi.MarshalException caused by java.net.SocketException [SPR-8628] #13271
- pdf documentation doesn't contain images [SPR-8512] #13158
- StandardEvaluationContext.setRootObject should test parameter rather than private for null [SPR-8241] #12889
- AbstractCachingViewResolver does not query cache correctly [SPR-8173] #12824
- LinkedCaseInsensitiveMap does not correctly implement putAll() [SPR-7969] #12624
- EntityManagerFactoryUtils fails to apply transaction timeout for EclipseLink update and delete queries [SPR-7947] #12602
- CurrencyEditor#getAsText() documents wrong return value [SPR-7890] #12546
- AbstractFileResolvingResource.exists() method incorrectly returns 'true' for non-existent HTTP resources [SPR-7881] #12537
- formMultiSelect macro in spring.ftl causes freemarker.template.TemplateException [SPR-7721] #12377