Skip to content

@snicoll snicoll released this Jan 12, 2021 · 30 commits to master since this release

New Features

  • Add null check for ExceptionHandlerMethodResolvers #26339
  • ClassNotFoundException: ExchangeFunction when using WebTestClient with Spring MVC #26308
  • Early support for JDK 17 #26307
  • Assertion error details lost in rethrow in assertWithDiagnostics #26303
  • Update ReactiveAdapterRegistry to do classpath checks at class initialization #26295
  • Problem with @Schedule with Quartz features in CronExpression #26289
  • Make use of abortOnRequest in Jetty Reactive HttpClient #26287
  • Update OncePerRequestFilter.isAsyncDispatch to use HttpServletRequest.getDispatcherType() #26282
  • Introduce computeAttribute() in AttributeAccessor #26281
  • Translate PostgreSQL code 21000 (cardinality_violation) #26276
  • Consistent type resolution handling for NullBean #26271
  • Defensively handle loadClass null result in BeanUtils.findEditorByConvention (against misbehaving ClassLoader impl such as in the GWT JettyLauncher) #26252
  • Subscriber context not propagated to WebSocketHandler for Tomcat websockets #26210
  • Introduce ApplicationEvents abstraction to capture application events published during a test #25616
  • Spring AOP should not apply UndeclaredThrowableException to checked exceptions from Kotlin methods #23844

🐞 Bug Fixes

  • Cannot remove headers from httpHeaders.keySet() in WebFlux #26361
  • ClassCastException handling at SimpleApplicationEventMulticaster of payload items #26349
  • DefaultPartHttpMessageReader creates live resources that won't be shut down #26347
  • Sending empty Flux to RSocket channel causes DecodingException: JSON decoding error: No content to map due to end-of-input #26344
  • Fix implementation of isOpen() in ReactorNettyWebSocketSession #26341
  • Remove obsolete commandName attribute in spring-form.tld #26337
  • The response has a duplicate "Content-Length" header when get by range header #26330
  • @ExceptionHandler methods not invokable if matched on exception's cause level > 1 #26317
  • Switch to PathPatternParser for Spring MVC breaks welcome page auto configuration #26318
  • CronExpression cannot parse combination of step values #26313
  • Fix JdbcOperations.queryForObject/queryForList extensions #26312
  • ClassCastException during websocket upgrade for mutated request #26304
  • kotlinx.serialization should not be used for Java interfaces implemented by Java classes #26298
  • NettyHeadersAdapter.add() accepts @Nullable value but throws NullPointerException #26274
  • Lots of boundedElastic-evictor TIMED_WAITING threads related to form data requests #26263
  • No originalFilename in MockMultipartFile now leads to add it just as part #26261
  • UriComponentsBuilder fromUriString cannot parse File URI #26258

📔 Documentation

  • Slow prototype bean creation when migrating spring-boot 2.3.5 -> 2.4.1 #26369
  • Application built against Spring Framework 5.3 breaks deployment to Wildfly 9 #26355
  • Improve MockMvc samples in reference to show where static imports come from #26311
  • MultipartFile.getOriginalFilename() documentation should warn user not to use it as destination file name #26299
  • Spring data DomainClassConverter broken with Spring 5.3 in case of missing entity #26296
  • Document initialization and shutdown logging semantics for the TestContext framework #25385

🔨 Dependency Upgrades

  • Upgrade to Reactor 2020.0.3 #26367
  • Upgrade to Hibernate Validator 6.2 #26255

❤️ Contributors

We'd like to thank all the contributors who worked on this release!

Assets 2

@snicoll snicoll released this Dec 9, 2020 · 100 commits to master since this release

New Features

  • Refine ConfigurationClassPostProcessor behavior in native images #26236
  • Ability to correlate ByteBuf leak records to log messages for a specific request #26230
  • Avoid CGLIB proxies in websocket/messaging configuration #26227
  • ContentCachingResponseWrapper should not add “Content-Length” when “Transfer-Encoding” is present #26182
  • Allow customization of file extension to media type map for WebFlux static resources #26170
  • Register bean definition dependencies when used via configuration class injected fields #26167
  • Print helpful information in RSocket MetadataExtractor #26130
  • Add ResponseSpec#toEntityFlux overload that accepts BodyExtractor #26114
  • Wildcard is a valid Access-Control-Expose-Headers value #26113
  • Reduce overhead of char[] creation #26101
  • EntityManagerFactory startup failure in deferred mode is only available on first use #26093
  • @DynamicPropertySource is not supported via @NestedTestConfiguration semantics #26091
  • Introduce and() methods in MethodFilter and FieldFilter for composite filters #26063
  • Kotlin extensions for WebClient.ResponseSpec #26030
  • Validate that JUnit Jupiter test methods and lifecycle methods are not annotated with @Autowired #25966
  • Add support for SSE to WebMvc.fn #25920
  • Template URI Variables with newline %0A or %0D are not matched #23252

🐞 Bug Fixes

  • AsyncServerResponse interoperability issue with path variables #26239
  • Remove duplicate "property" in PropertyCacheKey.toString() #26237
  • DataBuffer Leak in Server Response #26232
  • Wrong HttpServletMapping used on INCLUDE in UrlPathHelper.skipServletPathDetermination #26216
  • MockMvc ignores MultipartFile registrations when both files and parts are registered #26166
  • cannot resolve ServerRequest::pathVariable in nested RequestPredicate #26163
  • ConcurrentModificationException in NativeMessageHeaderAccessor#copyHeaders #26155
  • AbstractServerHttpRequest constructor breaks binary compatibility between 5.2.x and 5.3.x #26151
  • Refine kotlinx.serialization support #26147
  • MimeType is no longer actually serializable #26127
  • Resttemplate throws NPE with spring-boot-starter-log4j2 within tests #26120
  • Update default for favorPathExtension to match Javadoc and as intended for 5.3 #26119
  • Spring Boot 2.4 upgrade breaks injection of Principal #26117
  • NoSuchMethodError in UrlPathHelper.skipServletPathDetermination #26112
  • Support allowedOriginPatterns in SockJS config #26108
  • PathMatchingResourcePatternResolver fails to resolve resources from JAR located in path with '#' on JDK 11+ #26104
  • @Transactional causes casting error for suspending function on Spring MVC #26092
  • UrlPathHelper#removeJsessionid doesn't remove the jsessionid from the URL #26079
  • NamedParameterJdbcTemplate.batchUpdate does not individually apply the SQL type from each SqlParameterSource argument #26071
  • Missing error status handling for toEntityFlux methods in WebClient #26069
  • DataBufferUtils#join may release a DataBuffer more than necessary #26060
  • FlightRecorderApplicationStartup exception on processing Http Request #26057
  • WebMvc.fn: ServerResponse.async does not handle exceptions as expected #25931
  • Non-compliant Content-Type header for multipart media types #25885
  • ResponseEntity Exception Handling Issues #25490

📔 Documentation

  • Clarify intended advice execution behavior in Spring version 5.2.7+ #26202
  • DateTimeFormat ISO.DATE_TIME javadoc contains misleading default note #26134
  • Spring EntityManager proxy is incompatible with Hibernate Search <5.11.6 (FullTextEntityManager instantiation fails with ClassCastException) #26090
  • Null passed in required @RequestParam now fails #26088
  • Mention security consideration in ForwardedHeaderFilter javadoc #26081
  • Add cron expression documentation #26067
  • Update javax.mail reference to jakarta.mail #25855
  • Mechanism to access request bound objects in WebClient filter in servlet env #25710
  • Document that @Transactional does not propagate to new threads #25439

🔨 Dependency Upgrades

  • Upgrade to Kotlin Coroutines 1.4.2 #26226
  • Upgrade to Reactor 2020.0.2 #26176
  • Upgrade to Kotlin 1.4.21 #26132

❤️ Contributors

We'd like to thank all the contributors who worked on this release!

Assets 2

@snicoll snicoll released this Dec 9, 2020 · 1108 commits to master since this release

New Features

  • ContentCachingResponseWrapper should not add “Content-Length” when “Transfer-Encoding” is present #26191
  • Register bean definition dependencies when used via configuration class injected fields #26168
  • Wildcard is a valid Access-Control-Expose-Headers value #26115
  • EntityManagerFactory startup failure in deferred mode is only available on first use #26094

🐞 Bug Fixes

  • AbstractJackson2HttpMessageConverter writes partial data when exception occurs during write #26246
  • Remove duplicate "property" in PropertyCacheKey.toString() #26242
  • DataBuffer Leak in Server Response #26234
  • GenericConversionService$Converters.getMatchableConverters throws ConcurrentModificationException on Java 9+ #26184
  • ConcurrentModificationException in NativeMessageHeaderAccessor#copyHeaders #26158
  • MimeType is no longer actually serializable #26128
  • PathMatchingResourcePatternResolver fails to resolve resources from JAR located in path with '#' on JDK 11+ #26105
  • UrlPathHelper#removeJsessionid doesn't remove the jsessionid from the URL #26083
  • NamedParameterJdbcTemplate.batchUpdate does not individually apply the SQL type from each SqlParameterSource argument #26073
  • DataBufferUtils#join may release a DataBuffer more than necessary #26061

📔 Documentation

  • Clarify intended advice execution behavior in Spring version 5.2.7+ #26204
  • DateTimeFormat ISO.DATE_TIME javadoc contains misleading default note #26135
  • Document that @Transactional does not propagate to new threads #26102

🔨 Dependency Upgrades

  • Upgrade to Reactor Dysprosium-SR15 #26175
Assets 2

@snicoll snicoll released this Dec 9, 2020 · 3947 commits to master since this release

New Features

  • ContentCachingResponseWrapper should not add “Content-Length” when “Transfer-Encoding” is present #26192
  • Wildcard is a valid Access-Control-Expose-Headers value #26116
  • EntityManagerFactory startup failure in deferred mode is only available on first use #26095
  • StompSubProtocolHandler logs failed authentication with error stack trace #26038
  • DefaultSimpUserRegistry prevents event from being published if original SimpMessageHeaderAccessor cannot be found #26015
  • Inefficient request handling inside ServletRequestDataBinder #26005

🐞 Bug Fixes

  • Remove duplicate "property" in PropertyCacheKey.toString() #26243
  • DataBuffer Leak in Server Response #26235
  • PathMatchingResourcePatternResolver fails to resolve resources from JAR located in path with '#' on JDK 11+ #26106
  • UrlPathHelper#removeJsessionid doesn't remove the jsessionid from the URL #26084
  • NamedParameterJdbcTemplate.batchUpdate does not individually apply the SQL type from each SqlParameterSource argument #26074
  • Order of profiles in tests is not preserved #26009

📔 Documentation

  • DateTimeFormat ISO.DATE_TIME javadoc contains misleading default note #26136

🔨 Dependency Upgrades

  • Upgrade to Reactor Californium-SR23 #26233
Assets 2

@snicoll snicoll released this Dec 9, 2020 · 5719 commits to master since this release

New Features

  • ContentCachingResponseWrapper should not add “Content-Length” when “Transfer-Encoding” is present #26193
  • Inefficient request handling inside ServletRequestDataBinder #26006
  • Avoid creation of unused logger instance in AbstractMediaTypeExpression #25903

🐞 Bug Fixes

  • Remove duplicate "property" in PropertyCacheKey.toString() #26244
  • UrlPathHelper#removeJsessionid doesn't remove the jsessionid from the URL #26085
  • LinkedMultiValueMap downstream issue with MultiValueMapAdapter package private base class #25962
  • Wrong type inference in Kotlin while overriding RequestMappingHandlerMapping#getMappingForMethod #25873
  • ClassCastException when wiring bean using method injection (NullBean instead of 'null') #25870
  • jsessionid breaks request mappings when removeSemicolonContent is turned off #25868

📔 Documentation

  • DateTimeFormat ISO.DATE_TIME javadoc contains misleading default note #26137
  • Incorrect example in javadocs of Assert.notNull(object, messageSupplier) #25871
Assets 2

@snicoll snicoll released this Dec 9, 2020 · 9853 commits to master since this release

New Features

  • ContentCachingResponseWrapper should not add “Content-Length” when “Transfer-Encoding” is present #26194
  • Inefficient request handling inside ServletRequestDataBinder #26007
  • Avoid creation of unused logger instance in AbstractMediaTypeExpression #25904

🐞 Bug Fixes

  • Remove duplicate "property" in PropertyCacheKey.toString() #26245
  • UrlPathHelper#removeJsessionid doesn't remove the jsessionid from the URL #26086
  • jsessionid breaks request mappings when removeSemicolonContent is turned off #25869

📔 Documentation

  • DateTimeFormat ISO.DATE_TIME javadoc contains misleading default note #26138
Assets 2

@snicoll snicoll released this Nov 10, 2020 · 227 commits to master since this release

New Features

  • Expose a public method "isClosed" to indicate whether the connection has been closed in WebSocketSession (WebFlux) #26043
  • WebFlux missing programmatic handling of MappingJacksonValue #26035
  • Optimize locking in AspectJProxyFactory for concurrent aspect instantiation #26034
  • Upgrade SpelCompiler bytecode level to 1.8 and optimize for concurrent access #26033
  • MergedAnnotationCollectors.toAnnotationSet() should not create intermediate ArrayList #26031
  • SpEL doesn't work nicely with records #26029
  • StompSubProtocolHandler logs failed authentication with error stack trace #26026
  • Expose toEntityFlux methods in WebClient.ResponseSpec #26023
  • Improve AdvisedSupport.getAdvisors() #26017
  • Improve URI/query strings sanitization #26012
  • DefaultSimpUserRegistry prevents event from being published if original SimpMessageHeaderAccessor cannot be found #26010
  • DefaultWebClientBuilder copies references #25992
  • Inefficient request handling inside ServletRequestDataBinder #25986
  • Avoid multiple volatile reads/writes in a row where only one is enough #25899
  • Allows Jackson2 encoders to log Throwable reason for not being able to serialize or deserialize #25892
  • Mechanism to access request bound objects in WebClient filter in servlet env #25710

🐞 Bug Fixes

  • Cannot be cast to class Publisher error with non suspending @Transactional functions #26052
  • Fix wrong reference in UrlPathHelper.removeSemicolonContentInternal() #26050
  • setTaskScheduler in StompBrokerRelayRegistration breaks chaining #26049
  • Add FullyQualifiedAnnotationBeanNameGenerator.INSTANCE #26025
  • Autowiring does not work reliably in case of dynamically changing prototype bean class #26019
  • Order of profiles in tests is not preserved #26004
  • @Transactional on suspending function returning a value always rollbacks #25998
  • SseEmitter: connection closed after first event #25987
  • @Nonnull annotation breaks ServletRequestMethodArgumentResolver for Principal #25981
  • Spring MVC's locale resolver can no longer be customized in parent context #25290

📔 Documentation

  • Fix kotlin example code which does not compile #26016
  • Fix a broken Asciidoctor syntax in core-resources.adoc #25999

❤️ Contributors

We'd like to thank all the contributors who worked on this release!

Assets 2

@snicoll snicoll released this Nov 10, 2020 · 1108 commits to master since this release

New Features

  • StompSubProtocolHandler logs failed authentication with error stack trace #26037
  • MergedAnnotationCollectors.toAnnotationSet() should not create intermediate ArrayList #26036
  • DefaultSimpUserRegistry prevents event from being published if original SimpMessageHeaderAccessor cannot be found #26013
  • DefaultWebClientBuilder copies references #25993
  • Inefficient request handling inside ServletRequestDataBinder #25990

🐞 Bug Fixes

  • Add FullyQualifiedAnnotationBeanNameGenerator.INSTANCE #26027
  • Autowiring does not work reliably in case of dynamically changing prototype bean class #26020
  • Order of profiles in tests is not preserved #26008
  • SseEmitter: connection closed after first event #25989

📔 Documentation

  • Fix a broken Asciidoctor syntax in core-resources.adoc #26000
Assets 2

@snicoll snicoll released this Oct 27, 2020 · 292 commits to master since this release

New Features

  • Allow cache eviction for ConcurrentLruCache #25963
  • Support Optional for query parameters in UriBuilder and UriComponentsBuilder #25951
  • Deprecate StringUtils.isEmpty(Object) and replace remaining usage (e.g. with ObjectUtils.isEmpty) #25945
  • Introduce RouterFunction attributes #25938
  • Discover @Sql, @SqlConfig, @SqlGroup, & @SqlMergeMode on enclosing class for nested test class #25913
  • Support Propagation.NEVER for disabling test-managed transactions #25909
  • Extensible invocation of TcpClient in ReactorNettyTcpClient #25889
  • Ignore duplicate configuration metadata for cache key in the TestContext framework #25800
  • Avoid use of String's for ContentDisposition type #25647
  • Expose access to STOMP SimpleMessageBroker sessions user Principal #25191
  • Allow programmatic registration of completion and error callbacks to transactional event listeners #24163
  • Support suspending functions annotated with @Transactional #23575
  • StompBrokerRelay doesn't send heartbeats to broker when @MessageMapping handles received messages #22822

🐞 Bug Fixes

  • @NestedTestConfiguration should not be discovered on enclosing class for nested interface #25917
  • UriComponentsBuilder controller method argument has no path #25822
  • Support multiple matchers in MockMvc Kotlin DSL #24103

📔 Documentation

  • Document @NestedTestConfiguration support #25912
  • Improve R2DBC DatabaseClient documentation regarding array/Collection-like bind parameters #25860
  • Document @DynamicPropertySource use cases that require @DirtiesContext #25850
  • Use lowercase property names in SpEL examples #25538

🔨 Dependency Upgrades

  • Upgrade to Kotlin Coroutines 1.4.0 #25969
  • Upgrade to RSocket 1.1.0 #25956
  • Upgrade to Reactor 2020.0.0 #25947
  • Upgrade to Gradle 6.7 #25918

❤️ Contributors

We'd like to thank all the contributors who worked on this release!

Assets 2

@snicoll snicoll released this Oct 27, 2020 · 1109 commits to master since this release

New Features

  • Optimize Jackson resource management in codecs #25910
  • Avoid creation of unused logger instance in AbstractMediaTypeExpression #25901
  • Native Hibernate 5 bootstrapping with JTA transaction manager requires hibernate.transaction.coordinator_class=jta to be set #25858
  • Cannot test @RequestPart multipart controllers with Servlet MockPart #25829
  • Add MariaDB to the supported database products for procedures and functions #25811
  • Optimize String argument resolution in MessageTag #25809
  • Avoid repeated Charset resolution in MimeType #25808

🐞 Bug Fixes

  • Incorrect http response for a request using the Range header for pre-compressed resources #25976
  • @ActiveProfiles with same profiles but different order results in duplicate ApplicationContext #25973
  • LinkedMultiValueMap downstream issue with MultiValueMapAdapter package private base class #25960
  • DataBufferUtils.CompositeMatcher causes poor performance when one or more matchers does not match #25915
  • HttpSeverOperations overrides content-length to 0 on HTTP HEAD #25908
  • jsessionid breaks request mappings when removeSemicolonContent is turned off #25864
  • JettyClientHttpConnector triggers early cancellation #25849
  • Race condition in DataBufferUtils.readAsynchronousFileChannel resulting in FD leak (Channel remains open) #25831
  • SimpMessagingTemplate.convertAndSend results in UnsupportedOperationException when Spring Cloud Sleuth is present #25821
  • ClassCastException when wiring bean using method injection (NullBean instead of 'null') #25806
  • Thread-scoped bean creation freezes if dependent bean is retrieved before dependency bean #25801
  • Sending an event as part of the EMF lock triggers a deadlock #25799
  • Wrong type inference in Kotlin while overriding RequestMappingHandlerMapping#getMappingForMethod #25657
  • SseEmitter (ResponseBodyEmitter) keeps collecting messages if not initialized #25442

📔 Documentation

  • Correct DispatcherServlet initialization sample webmvc.adoc #25965
  • Document that TransactionalEventListener only works with non-reactive transactions #25805
  • Published reference documentation contains unnecessary folders and files #25783
  • Incorrect example in javadocs of Assert.notNull(object, messageSupplier) #25774

🔨 Dependency Upgrades

  • Upgrade to RSocket 1.0.3 #25957
  • Upgrade to Reactor Dysprosium-SR13 #25946
Assets 2