Spring Framework

Overview

Spring Framework Build Status Revved up by Gradle Enterprise

This is the home of the Spring Framework: the foundation for all Spring projects. Collectively the Spring Framework and the family of Spring projects are often referred to simply as "Spring".

Spring provides everything required beyond the Java programming language for creating enterprise applications for a wide range of scenarios and architectures. Please read the Overview section as reference for a more complete introduction.

Code of Conduct

This project is governed by the Spring Code of Conduct. By participating, you are expected to uphold this code of conduct. Please report unacceptable behavior to [email protected].

Access to Binaries

For access to artifacts or a distribution zip, see the Spring Framework Artifacts wiki page.

Documentation

The Spring Framework maintains reference documentation (published and source), Github wiki pages, and an API reference. There are also guides and tutorials across Spring projects.

Micro-Benchmarks

See the Micro-Benchmarks Wiki page.

Build from Source

See the Build from Source Wiki page and the CONTRIBUTING.md file.

Continuous Integration Builds

Information regarding CI builds can be found in the Spring Framework Concourse pipeline documentation.

Stay in Touch

Follow @SpringCentral, @SpringFramework, and its team members on Twitter. In-depth articles can be found at The Spring Blog, and releases are announced via our news feed.

License

The Spring Framework is released under version 2.0 of the Apache License.

Issues
  • Maven 2 support (POMs) [SPR-1484]

    Maven 2 support (POMs) [SPR-1484]

    Aleksander Blomskøld opened SPR-1484 and commented

    Maven 2 POMs with dependencies is missing for Spring. It's a lot of extra job for maven 2 users to find out which dependencies Spring needs, and to have to include them manually.


    Attachments:

    Issue Links:

    • #6209 maven pom hosed on repo1.maven.org ("is duplicated by")
    • #6533 Missing m2 POMs at ibiblio.net ("is duplicated by")

    121 votes, 60 watchers

    has: votes-jira type: enhancement 
    opened by spring-projects-issues 75
  • Add support for iBatis 3 [SPR-5991]

    Add support for iBatis 3 [SPR-5991]

    Gabriel Axel opened SPR-5991 and commented

    iBatis 3 beta 1 introduced API changes which break the existing Spring support.


    Affects: 3.0 M3

    Attachments:

    Issue Links:

    • #10803 Add support for iBatis 3 ("is duplicated by")
    • DATAJDBC-2 Add support for MyBatis 3

    50 votes, 55 watchers

    has: votes-jira in: data status: declined type: enhancement 
    opened by spring-projects-issues 73
  • Response writing fails to complete with WebFlux on Tomcat

    Response writing fails to complete with WebFlux on Tomcat

    Affects: \v5.3.3

    The symptom of this issue is similar to previous issue https://github.com/spring-projects/spring-framework/issues/23096 (response handling never completes) though the underlying cause is different.

    I've reproduced this issue with the small demo spring-boot project which uses WebFlux on Tomcat, seen here: https://github.com/danielra/webflux_race_investigation The project can be built with ./gradlew clean build and then run via ./start.sh. To reproduce the problem I've been successful using wrk (https://github.com/wg/wrk) to throw some load at the service, stop and then throw some more etc.. For example:

    for i in {1..100}; do   ./wrk -t 2 -c 1000 -d 10s --latency --timeout 9s --script ./myPost.lua http://localhost:8080/post; done
    

    Where ./myPost.lua looks like:

    wrk.method = "POST"
    wrk.body   = "[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]"
    wrk.headers["Content-Type"] = "application/json"
    

    (I don't think this being a POST request really ended up being relevant, but I started here because I was trying to start the more isolated repro somewhere somewhat similar to the real system that was experiencing the problem.)

    This will result in a lot of trace level logging under a logs directory in the demo project. This can be searched through to find any occurrences like:

    find . -name \*.gz -print0 | xargs -0 zgrep "Response timeout"
    

    And then another search for the logPrefix found in resulting log entries can be performed to gain more context on the processing for the relevant request.

    This is an example set of log entries for a repro case (with irrelevant line prefixes ommitted):

    12:31:47,007 INFO c.e.d.f.DemoWebFilter [http-nio-8080-exec-368] [33d6780] Incoming request observed.
    12:31:47,007 TRACE _.s.h.s.r.AbstractListenerReadPublisher [http-nio-8080-exec-368] [33d6780] UNSUBSCRIBED -> SUBSCRIBING
    12:31:47,007 TRACE _.s.h.s.r.AbstractListenerReadPublisher [http-nio-8080-exec-368] [33d6780] 9223372036854775807 requested
    12:31:47,007 TRACE _.s.h.s.r.AbstractListenerReadPublisher [http-nio-8080-exec-368] [33d6780] SUBSCRIBING -> DEMAND
    12:31:47,007 TRACE _.s.h.s.r.AbstractListenerReadPublisher [http-nio-8080-exec-368] [33d6780] onDataAvailable
    12:31:47,007 TRACE _.s.h.s.r.AbstractListenerReadPublisher [http-nio-8080-exec-368] [33d6780] DEMAND -> READING
    12:31:47,007 TRACE _.s.h.s.r.AbstractListenerReadPublisher [http-nio-8080-exec-368] [33d6780] Read 8092 bytes
    12:31:47,007 TRACE _.s.h.s.r.AbstractListenerReadPublisher [http-nio-8080-exec-368] [33d6780] Publishing data read
    12:31:47,007 TRACE _.s.h.s.r.AbstractListenerReadPublisher [http-nio-8080-exec-368] [33d6780] Read 8192 bytes
    12:31:47,007 TRACE _.s.h.s.r.AbstractListenerReadPublisher [http-nio-8080-exec-368] [33d6780] Publishing data read
    12:31:47,007 TRACE _.s.h.s.r.AbstractListenerReadPublisher [http-nio-8080-exec-368] [33d6780] Read 4067 bytes
    12:31:47,007 TRACE _.s.h.s.r.AbstractListenerReadPublisher [http-nio-8080-exec-368] [33d6780] Publishing data read
    12:31:47,007 TRACE _.s.h.s.r.AbstractListenerReadPublisher [http-nio-8080-exec-368] [33d6780] No more data to read
    12:31:47,007 TRACE _.s.h.s.r.AbstractListenerReadPublisher [http-nio-8080-exec-368] [33d6780] READING -> DEMAND
    12:31:47,007 TRACE _.s.h.s.r.AbstractListenerReadPublisher [http-nio-8080-exec-368] [33d6780] onAllDataRead
    12:31:47,007 TRACE _.s.h.s.r.AbstractListenerReadPublisher [http-nio-8080-exec-368] [33d6780] DEMAND -> COMPLETED
    12:31:47,780 TRACE _.s.h.s.r.AbstractListenerWriteFlushProcessor [parallel-2] [33d6780] UNSUBSCRIBED -> REQUESTED
    12:31:47,780 TRACE _.s.h.s.r.AbstractListenerWriteFlushProcessor [parallel-2] [33d6780] Received onNext publisher
    12:31:47,780 TRACE _.s.h.s.r.AbstractListenerWriteFlushProcessor [parallel-2] [33d6780] REQUESTED -> RECEIVED
    12:31:47,780 TRACE _.s.h.s.r.AbstractListenerWriteProcessor [parallel-2] [33d6780] UNSUBSCRIBED -> REQUESTED
    12:31:47,780 TRACE _.s.h.s.r.AbstractListenerWriteProcessor [parallel-2] [33d6780] Item to write
    12:31:47,780 TRACE _.s.h.s.r.AbstractListenerWriteProcessor [parallel-2] [33d6780] REQUESTED -> RECEIVED
    12:31:47,780 TRACE _.s.h.s.r.AbstractListenerWriteProcessor [parallel-2] [33d6780] onWritePossible
    12:31:47,780 TRACE _.s.h.s.r.AbstractListenerWriteProcessor [parallel-2] [33d6780] RECEIVED -> WRITING
    12:31:47,780 TRACE _.s.h.s.r.AbstractListenerWriteProcessor [parallel-2] [33d6780] Wrote 12931 of 12931 bytes
    12:31:47,780 TRACE _.s.h.s.r.AbstractListenerWriteProcessor [parallel-2] [33d6780] WRITING -> REQUESTED
    12:31:47,780 TRACE _.s.h.s.r.AbstractListenerWriteProcessor [parallel-2] [33d6780] No more items to write
    12:31:47,780 TRACE _.s.h.s.r.AbstractListenerWriteProcessor [parallel-2] [33d6780] REQUESTED -> RECEIVED
    12:31:47,780 TRACE _.s.h.s.r.AbstractListenerWriteProcessor [parallel-2] [33d6780] isWritePossible: false
    12:31:47,780 TRACE _.s.h.s.r.WriteResultPublisher [parallel-2] [33d6780] UNSUBSCRIBED subscribe: org.springframework.http.server.reactive.[email protected]7a996bbf
    12:31:47,780 TRACE _.s.h.s.r.WriteResultPublisher [parallel-2] [33d6780] SUBSCRIBING request: 9223372036854775807
    12:31:47,780 TRACE _.s.h.s.r.AbstractListenerWriteFlushProcessor [parallel-2] [33d6780] Received onComplete
    12:31:47,780 TRACE _.s.h.s.r.WriteResultPublisher [parallel-2] [33d6780] UNSUBSCRIBED subscribe: [email protected]
    12:31:47,780 TRACE _.s.h.s.r.WriteResultPublisher [parallel-2] [33d6780] SUBSCRIBING request: 9223372036854775807
    12:31:47,781 TRACE _.s.h.s.r.AbstractListenerWriteProcessor [http-nio-8080-exec-348] [33d6780] onWritePossible
    12:31:47,781 TRACE _.s.h.s.r.AbstractListenerWriteProcessor [http-nio-8080-exec-348] [33d6780] RECEIVED -> COMPLETED
    12:31:47,781 TRACE _.s.h.s.r.WriteResultPublisher [http-nio-8080-exec-348] [33d6780] SUBSCRIBED publishComplete
    12:31:47,781 TRACE _.s.h.s.r.AbstractListenerWriteFlushProcessor [http-nio-8080-exec-348] [33d6780] RECEIVED writeComplete
    12:31:47,781 TRACE _.s.h.s.r.AbstractListenerWriteFlushProcessor [http-nio-8080-exec-348] [33d6780] Flush attempt
    12:31:47,781 TRACE _.s.h.s.r.AbstractListenerWriteFlushProcessor [http-nio-8080-exec-348] [33d6780] RECEIVED flushingFailed
    12:31:59,588 TRACE _.s.h.s.r.AbstractListenerReadPublisher [parallel-4] [33d6780] Cancellation
    12:31:59,588 TRACE _.s.h.s.r.WriteResultPublisher [parallel-4] [33d6780] SUBSCRIBED cancel
    12:31:59,588 ERROR c.e.d.f.DemoWebFilter [parallel-4] [33d6780] Response timeout after 12581 milliseconds for null request with uri 'http://localhost:8080/post'. Response status code was already committed: '200 OK'.                                                                                                                                                                                                               12:31:59,588 TRACE o.s.h.s.r.ServletHttpHandlerAdapter [parallel-4] [33d6780] Handling completed
    

    Here the line 12:31:47,781 TRACE _.s.h.s.r.AbstractListenerWriteFlushProcessor [http-nio-8080-exec-348] [33d6780] RECEIVED flushingFailed comes from a modification I made locally to the spring-framework to add an additional trace log line here: https://github.com/spring-projects/spring-framework/blob/v5.3.3/spring-web/src/main/java/org/springframework/http/server/reactive/AbstractListenerWriteFlushProcessor.java#L194-L195 like so:

    if (rsWriteFlushLogger.isTraceEnabled()) {
                rsWriteFlushLogger.trace(this.logPrefix + this.state + " flushingFailed", t);
    }
    

    For reference, the relevant Throwable logged at these lines in these reproductions with this demo project looks like:

    org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe
            at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:309) ~[tomcat-embed-core-9.0.41.jar!/:9.0.41]
            at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:272) ~[tomcat-embed-core-9.0.41.jar!/:9.0.41]
            at org.apache.catalina.connector.CoyoteOutputStream.flush(CoyoteOutputStream.java:118) ~[tomcat-embed-core-9.0.41.jar!/:9.0.41]
            at org.springframework.http.server.reactive.ServletServerHttpResponse.flush(ServletServerHttpResponse.java:198) ~[spring-web-5.3.3.jar!/:5.3.3]
            at org.springframework.http.server.reactive.ServletServerHttpResponse.access$500(ServletServerHttpResponse.java:50) ~[spring-web-5.3.3.jar!/:5.3.3]
            at org.springframework.http.server.reactive.ServletServerHttpResponse$ResponseBodyFlushProcessor.flush(ServletServerHttpResponse.java:316) ~[spring-web-5.3.3.jar!/:5.3.3]
            at org.springframework.http.server.reactive.AbstractListenerWriteFlushProcessor$State$3.writeComplete(AbstractListenerWriteFlushProcessor.java:291) ~[spring-web-5.3.3.jar!/:5.3.3]
            at org.springframework.http.server.reactive.AbstractListenerWriteFlushProcessor$State$WriteResultSubscriber.onComplete(AbstractListenerWriteFlushProcessor.java:437) ~[spring-web-5.3.3.jar!/:5.3.3]
            at org.springframework.http.server.reactive.WriteResultPublisher$State.publishComplete(WriteResultPublisher.java:256) ~[spring-web-5.3.3.jar!/:5.3.3]
            at org.springframework.http.server.reactive.WriteResultPublisher.publishComplete(WriteResultPublisher.java:84) ~[spring-web-5.3.3.jar!/:5.3.3]
            at org.springframework.http.server.reactive.AbstractListenerWriteProcessor.changeStateToComplete(AbstractListenerWriteProcessor.java:280) ~[spring-web-5.3.3.jar!/:5.3.3]
            at org.springframework.http.server.reactive.AbstractListenerWriteProcessor.access$300(AbstractListenerWriteProcessor.java:46) ~[spring-web-5.3.3.jar!/:5.3.3]
            at org.springframework.http.server.reactive.AbstractListenerWriteProcessor$State$3.onWritePossible(AbstractListenerWriteProcessor.java:368) ~[spring-web-5.3.3.jar!/:5.3.3]
            at org.springframework.http.server.reactive.AbstractListenerWriteProcessor.onWritePossible(AbstractListenerWriteProcessor.java:153) ~[spring-web-5.3.3.jar!/:5.3.3]
            at org.springframework.http.server.reactive.ServletServerHttpResponse$ResponseBodyWriteListener.onWritePossible(ServletServerHttpResponse.java:270) ~[spring-web-5.3.3.jar!/:5.3.3]
            at org.apache.coyote.Response.onWritePossible(Response.java:762) ~[tomcat-embed-core-9.0.41.jar!/:9.0.41]
            at org.apache.catalina.connector.CoyoteAdapter.asyncDispatch(CoyoteAdapter.java:188) ~[tomcat-embed-core-9.0.41.jar!/:9.0.41]
            at org.apache.coyote.AbstractProcessor.dispatch(AbstractProcessor.java:241) ~[tomcat-embed-core-9.0.41.jar!/:9.0.41]
            at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:59) ~[tomcat-embed-core-9.0.41.jar!/:9.0.41]
            at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888) ~[tomcat-embed-core-9.0.41.jar!/:9.0.41]
            at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597) ~[tomcat-embed-core-9.0.41.jar!/:9.0.41]
            at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.41.jar!/:9.0.41]
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[?:1.8.0_282]
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[?:1.8.0_282]
            at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.41.jar!/:9.0.41]
            at java.lang.Thread.run(Thread.java:748) [?:1.8.0_282]
    Caused by: java.io.IOException: Broken pipe
            at sun.nio.ch.FileDispatcherImpl.write0(Native Method) ~[?:1.8.0_282]
            at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47) ~[?:1.8.0_282]
            at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93) ~[?:1.8.0_282]
            at sun.nio.ch.IOUtil.write(IOUtil.java:65) ~[?:1.8.0_282]
            at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:470) ~[?:1.8.0_282]
            at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:138) ~[tomcat-embed-core-9.0.41.jar!/:9.0.41]
            at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite(NioEndpoint.java:1269) ~[tomcat-embed-core-9.0.41.jar!/:9.0.41]
            at org.apache.tomcat.util.net.SocketWrapperBase.doWrite(SocketWrapperBase.java:764) ~[tomcat-embed-core-9.0.41.jar!/:9.0.41]
            at org.apache.tomcat.util.net.SocketWrapperBase.flushNonBlocking(SocketWrapperBase.java:735) ~[tomcat-embed-core-9.0.41.jar!/:9.0.41]
            at org.apache.tomcat.util.net.SocketWrapperBase.flush(SocketWrapperBase.java:709) ~[tomcat-embed-core-9.0.41.jar!/:9.0.41]
            at org.apache.coyote.http11.Http11OutputBuffer$SocketOutputBuffer.flush(Http11OutputBuffer.java:572) ~[tomcat-embed-core-9.0.41.jar!/:9.0.41]
            at org.apache.coyote.http11.filters.IdentityOutputFilter.flush(IdentityOutputFilter.java:117) ~[tomcat-embed-core-9.0.41.jar!/:9.0.41]
            at org.apache.coyote.http11.Http11OutputBuffer.flush(Http11OutputBuffer.java:220) ~[tomcat-embed-core-9.0.41.jar!/:9.0.41]
            at org.apache.coyote.http11.Http11Processor.flush(Http11Processor.java:1195) ~[tomcat-embed-core-9.0.41.jar!/:9.0.41]
            at org.apache.coyote.AbstractProcessor.action(AbstractProcessor.java:402) ~[tomcat-embed-core-9.0.41.jar!/:9.0.41]
            at org.apache.coyote.Response.action(Response.java:209) ~[tomcat-embed-core-9.0.41.jar!/:9.0.41]
            at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:305) ~[tomcat-embed-core-9.0.41.jar!/:9.0.41]
            ... 25 more
    

    And appears to me to be a result of the client hanging up the connection before response handling is complete on the server.

    After this flushingFailed log line, we can see a relatively large (~12 second) gap in time before the next log line which was triggered by the response timeout being triggered which is setup in the DemoWebFilter in the demo project here: https://github.com/danielra/webflux_race_investigation/blob/main/src/main/java/com/example/demo/filter/DemoWebFilter.java#L38 And only after this timeout does ServletHttpHandlerAdapter log a line indicating that handling is complete.

    I note that the flushingFailed method where I added the extra log line above has a comment which reads:

    Invoked when an error happens while flushing. Sub-classes may choose to ignore this if they know the underlying API will provide an error notification in a container thread. Defaults to no-op.

    Based on this description and the observed behavior, it seems to me that perhaps a notification of the error was expected elsewhere, but it was never actually received so handling of the response is never completed (without a timeout present). I don't know enough yet to say whether that was due to a bug in the code that should have emitted the error notification or on the listening side - or if there should actually be a real non-no-op operation implemented of flushingFailed in the relevant subclass in the Tomcat case. However, my expectation is that regardless of when a client hangs up the connection the server should proceed with completing response handling.

    Please let me know if any additional information would be helpful. Thank you for your time!


    in: web type: bug 
    opened by danielra 55
  • Spring component scanning does not work within JBoss EJB container [SPR-5120]

    Spring component scanning does not work within JBoss EJB container [SPR-5120]

    Pedro Santos opened SPR-5120 and commented

    The spring scanner functionality do not work when I create my ApplicationContext from a EJB managed by JBoss. I do test the same spring application context on diferents enviroments. Just on a managed EJB on a JBoos it is not workin.

    EJB code appContext = new GenericApplicationContext(); ClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner(appContext); scanner.scan("com"); appContext.refresh();

    Annotated class @Service public class TransactionService {

    Exception ERROR: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'transactionService' is defined


    Affects: 2.5.5

    Attachments:

    Issue Links:

    • #10814 JBoss AS 5.0 VFS handling (SPR-5120) backport 2.5.X ("is depended on by")
    • #11051 Context Scanning doesnt work in Jboss 5 ("is duplicated by")
    • #10013 PathMatchingResourcePatternResolver.determineRootDir fails for jar on JBoss
    • #10454 PersistenceUnitReader#determinePersistenceUnitRootUrl returns wrong root url on JBoss 5, causing no detection of entity beans

    Referenced from: commits https://github.com/spring-projects/spring-framework/commit/184f63f68951ed1c199dddc27a6a266f09e9e0ce, https://github.com/spring-projects/spring-framework/commit/10c30f0315b41cd3168a7d6c8b984a12f49c62b1, https://github.com/spring-projects/spring-framework/commit/64c46d48bb916bc52ff2f38b4f5d4a9ffb5b794c

    24 votes, 34 watchers

    has: votes-jira type: enhancement 
    opened by spring-projects-issues 48
  • Add Kotlin DSL for working with MockMvc

    Add Kotlin DSL for working with MockMvc

    This DSL make working with MockMvc much cleaner.

    Example:

    	@Test
    	fun json() {
    		mockMvc.performGet("/person/{name}", "Lee") {    // 1
    			builder { accept(MediaType.APPLICATION_JSON) } // 2
    			printRequestAndResponse() // 3
    			expect { // 4
    				status { isOk }
    				content { contentType("application/json;charset=UTF-8") }
    				jsonPath("$.name") { value("Lee") }
    				json("""{"someBoolean": false}""", strict = false)
    			}
    		}
    	}
    

    Highlights:

    1. Extension methods to mockMvc to start dsl
    2. Builder block for configuring request
    3. Useful equivalent to andDo(print()) that avoids static imports
    4. Expect block that highlights response expectations

    This code is based on the work of @petrbalat and myself in https://github.com/petrbalat/kd4smt

    in: test in: web type: enhancement 
    opened by checketts 46
  • on JDK 11 - WARNING: Illegal reflective access by org.springframework.cglib.core.ReflectUtils$1 (file:/C:/Users/.../spring-core/4.3.22.RELEASE/spring-core-4.3.22.RELEASE.jar)

    on JDK 11 - WARNING: Illegal reflective access by org.springframework.cglib.core.ReflectUtils$1 (file:/C:/Users/.../spring-core/4.3.22.RELEASE/spring-core-4.3.22.RELEASE.jar)

    Error for Spring Boot 1.5.x (1.5.19.RELEASE, using the latest spring-core-4.3.22.RELEASE.jar)

    I have not seen this error before within previous boot 1.5.17.RELEASE.
    And frankly upgrade to the latest 1.5.19.RELEASE/spring-core-4.3.22.RELEASE.jar was maybe 1-2 weeks ago.

    So why this error appeared?

    14:43:23.388 [main] INFO  o.s.b.f.s.DefaultListableBeanFactory#registerBeanDefinition:826 - Overriding bean definition for bean 'managementServletContext' with a different definition: replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.actuate.autoconfigure.EndpointWebMvcHypermediaManagementContextConfiguration; factoryMethodName=managementServletContext; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/actuate/autoconfigure/EndpointWebMvcHypermediaManagementContextConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.actuate.autoconfigure.EndpointWebMvcAutoConfiguration; factoryMethodName=managementServletContext; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/actuate/autoconfigure/EndpointWebMvcAutoConfiguration.class]]
    WARNING: An illegal reflective access operation has occurred
    WARNING: Illegal reflective access by org.springframework.cglib.core.ReflectUtils$1 (file:/C:/Users/myuserlogin/.m2/repository/org/springframework/spring-core/4.3.22.RELEASE/spring-core-4.3.22.RELEASE.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
    WARNING: Please consider reporting this to the maintainers of org.springframework.cglib.core.ReflectUtils$1
    WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
    WARNING: All illegal access operations will be denied in a future release
    14:43:25.687 [main] INFO  o.s.b.f.a.AutowiredAnnotationBeanPostProcessor#<init>:155 - JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
    

    image

    ref https://github.com/spring-projects/spring-framework/issues/22019

    in: core 
    opened by paulvi 45
  • Illegal reflective access operation on Java 11 for lazy-init beans registered with MBeanServer

    Illegal reflective access operation on Java 11 for lazy-init beans registered with MBeanServer

    I'm using spring-boot 2.2.0.M2 with Java 11 and i am getting this warning:

    WARNING: An illegal reflective access operation has occurred
    WARNING: Illegal reflective access by org.springframework.cglib.core.ReflectUtils (file:/home/porfirio/.m2/repository/org/springframework/spring-core/5.2.0.M1/spring-core-5.2.0.M1.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
    WARNING: Please consider reporting this to the maintainers of org.springframework.cglib.core.ReflectUtils
    WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
    WARNING: All illegal access operations will be denied in a future release
    

    I don't know if it is a know bug with spring-boot+java11 or an issue on my end

    <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-security</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.postgresql</groupId>
                <artifactId>postgresql</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
    in: core status: feedback-provided 
    opened by porfirioribeiro 44
  • InMemoryWebSessionStore indirectly causing infinite loop inside tomcat-native OpenSSL under load

    InMemoryWebSessionStore indirectly causing infinite loop inside tomcat-native OpenSSL under load

    This is a fun one....

    When load testing a new app using...

    • Spring Boot 2.4.2
    • WebFlux 5.3.3
    • Spring Security 5.4.2
    • Tomcat 9.0.41
    • tomcat-native 1.2.25
    • APR 1.6.5
    • OpenSSL 1.1.1f

    ...CPU utilization will max out, and stay maxed out even after the load test completes.

    When investigating, I found that threads in the global boundedElastic Scheduler are consuming the entire CPU, as seen in top (broken out by threads)...

    top - 17:56:42 up 12 min,  0 users,  load average: 0.61, 0.24, 0.15
    Threads: 112 total,   3 running, 109 sleeping,   0 stopped,   0 zombie
    %Cpu(s): 53.8 us,  0.3 sy,  0.0 ni, 45.7 id,  0.0 wa,  0.0 hi,  0.1 si,  0.1 st
    MiB Mem :  11852.9 total,   8478.8 free,   1267.9 used,   2106.2 buff/cache
    MiB Swap:      0.0 total,      0.0 free,      0.0 used.  10278.6 avail Mem
    
      PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
      212 bogus     20   0 6635460 493008  18064 R  99.9   4.1   0:07.44 boundedElastic-  <--- CPU maxed out
      170 bogus     20   0 6635460 493008  18064 R  99.7   4.1   0:21.02 boundedElastic-  <--- CPU maxed out
       17 bogus     20   0 6635460 493008  18064 S   9.6   4.1   0:26.19 C2 CompilerThre
      235 bogus     20   0 6635460 493008  18064 S   1.3   4.1   0:00.13 boundedElastic-
       18 bogus     20   0 6635460 493008  18064 S   0.7   4.1   0:04.61 C1 CompilerThre
      234 bogus     20   0 6635460 493008  18064 S   0.7   4.1   0:00.79 boundedElastic-
       85 bogus     20   0    9416   2340   1468 R   0.7   0.0   0:00.43 top
       36 bogus     20   0 6635460 493008  18064 S   0.3   4.1   0:00.39 https-openssl-n
       47 bogus     20   0 6635460 493008  18064 S   0.3   4.1   0:01.70 https-openssl-n
      166 bogus     20   0 6635460 493008  18064 S   0.3   4.1   0:00.77 parallel-4
      167 bogus     20   0 6635460 493008  18064 S   0.3   4.1   0:00.15 https-openssl-n
      175 bogus     20   0 6635460 493008  18064 S   0.3   4.1   0:00.11 https-openssl-n
      179 bogus     20   0 6635460 493008  18064 S   0.3   4.1   0:00.09 https-openssl-n
      184 bogus     20   0 6635460 493008  18064 S   0.3   4.1   0:00.11 https-openssl-n
      192 bogus     20   0 6635460 493008  18064 S   0.3   4.1   0:00.09 https-openssl-n
      204 bogus     20   0 6635460 493008  18064 S   0.3   4.1   0:00.09 https-openssl-n
      210 bogus     20   0 6635460 493008  18064 S   0.3   4.1   0:00.10 https-openssl-n
    ...
    

    Taking a stackdump of the process reveals the two threads are inside tomcat's OpenSSLEngine... (note that nid=0xd4 correlates to PID 212 above)

    "boundedElastic-8" #86 daemon prio=5 os_prio=0 cpu=128128.31ms elapsed=215.53s allocated=28746K defined_classes=1 tid=0x00007fee00035800 nid=0xd4 runnable  [0x00007fed91cbe000]
       java.lang.Thread.State: RUNNABLE
    	at org.apache.tomcat.util.net.openssl.OpenSSLEngine.unwrap(OpenSSLEngine.java:603)
    	- locked <0x00000007576d7df8> (a org.apache.tomcat.util.net.openssl.OpenSSLEngine)
    	at javax.net.ssl.SSLEngine.unwrap([email protected]/SSLEngine.java:637)
    	at org.apache.tomcat.util.net.SecureNioChannel.read(SecureNioChannel.java:617)
    	at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1229)
    	at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1141)
    	at org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:795)
    	at org.apache.coyote.http11.Http11InputBuffer.available(Http11InputBuffer.java:675)
    	at org.apache.coyote.http11.Http11Processor.available(Http11Processor.java:1201)
    	at org.apache.coyote.AbstractProcessor.isReadyForRead(AbstractProcessor.java:838)
    	at org.apache.coyote.AbstractProcessor.action(AbstractProcessor.java:577)
    	at org.apache.coyote.Request.action(Request.java:432)
    	at org.apache.catalina.connector.InputBuffer.isReady(InputBuffer.java:305)
    	at org.apache.catalina.connector.CoyoteInputStream.isReady(CoyoteInputStream.java:201)
    	at org.springframework.http.server.reactive.ServletServerHttpRequest$RequestBodyPublisher.checkOnDataAvailable(ServletServerHttpRequest.java:295)
    	at org.springframework.http.server.reactive.AbstractListenerReadPublisher.changeToDemandState(AbstractListenerReadPublisher.java:222)
    	at org.springframework.http.server.reactive.AbstractListenerReadPublisher.access$1000(AbstractListenerReadPublisher.java:48)
    	at org.springframework.http.server.reactive.AbstractListenerReadPublisher$State$2.request(AbstractListenerReadPublisher.java:333)
    	at org.springframework.http.server.reactive.AbstractListenerReadPublisher$ReadSubscription.request(AbstractListenerReadPublisher.java:260)
    	...
    

    In a debug session, I discovered that an infinite loop is executing in tomcat's OpenSSLEngine.unwrap where:

    • pendingApp = 2
    • idx = 1
    • endOffset = 1
    • capacity = 16384

    I would have expected the OpenSSL I/O code to execute on one of the https-openssl-nio-* threads, not the boundedElastic Scheduler. Therefore, I started investigating why this code was executing on the boundedElastic Scheduler.

    After more debugging I narrowed it down to InMemoryWebSessionStore.createWebSession(). This is the only location in this particular app that uses the boundedElastic Scheduler.

    The WebSession is being created because Spring Security's WebSessionServerRequestCache is being used, which persists requests in the WebSession.

    If I disable the request cache (which removes the usage of WebSession, which removes the call to InMemoryWebSessionStore.createWebSession(), which removes usage of boundedElastic), then all I/O is performed on the https-openssl-nio-* threads, and the infinite loop does not occur.

    I haven't fully investigated why the infinite loop occurs, but I assume there is a threadsafety bug somewhere in tomcat's OpenSSLEngine. (Either that or it was never intended to be used from multiple threads.) Having said that, I don't think that the I/O should be occurring on the boundedElastic thread, so I did not investigate further.

    In other words, in my opinion, using InMemoryWebSessionStore should not cause the OpenSSL I/O to occur on a boundedElastic thread.

    I have attached a simple application that can be used to reproduce the problem. After extracting, use docker-compose up to build and start a container with the spring boot app with the above configuration. Sending a lot of load (>= 2000 calls per second) to the /echo endpoint will reproduce the infinite loop. However, you can see OpenSSL I/O occurring on the boundedElastic threads with any amount of load.

    status: superseded 
    opened by philsttr 42
  • Support for hibernate3 in sandbox [SPR-300]

    Support for hibernate3 in sandbox [SPR-300]

    Artur Karazniewicz opened SPR-300 and commented

    Hello,

    Last few days I worked on support for hibernate3 in spring sandbox. I created new packages in sandbox and refactored org.springframework.orm.hibernate (and support) packages into org.springframework.orm.hibernate3 in sandbox. The task was quite easy, there are minor problems though:

    • hibernate package changed to org.hibernate,
    • hibernate team split Session into two pieces org.hibernate.Session and org.hibernate.classic.Session (extends Session) - where some deprecated methods live. SessionFactory returns now "classic" session, but I decided to use org.hibernate.Session everywhere,
    • hibernate team changed exceptions to unchecked and changed method signature for getPersistentClass() it returns String now (instead of Class),
    • saveOrUpdateCopy(..) and int delete(...) dissapeard (in fact these methods are moved into "classic" session), so I removed them from HibernateTemplate
    • I ported complete test suite from spring hibernate packages, all tests passed (with minor changes, though)

    Currently i didn't implemented new methods from Session yet, but will do it ASAP. This project uses this - two new jars must be added into project: hibernate3.jar and antlr-2.7.4.jar.

    This project must be compiled against CVS HEAD, since it needs some changes done by Juergen recently.

    Hope it'll help people interested in new hibernate support in spring.

    Artur


    Attachments:

    14 votes, 10 watchers

    has: votes-jira type: enhancement 
    opened by spring-projects-issues 41
  • AnnotationDrivenStaticEntityMockingControl in spring-aspects module require javax.persistence.Entity on compiler classpath  [SPR-6819]

    AnnotationDrivenStaticEntityMockingControl in spring-aspects module require javax.persistence.Entity on compiler classpath [SPR-6819]

    Pavel Král opened SPR-6819 and commented

    Aspect org.springframework.mock.staticmock.AnnotationDrivenStaticEntityMockingControl require for ajc javax.persistence.Entity to be on classpath, hovewer spring-aspect pom.xml doesn't provide such dependency. As workaround one must declare dependency in affected module pom.xml

    <dependency>
      <groupId>javax.persistence</groupId>
      <artifactId>persistence-api</artifactId>
      <version>1.0</version>
      <scope>provided</scope>
    </dependency>
    

    Affects: 3.0 GA

    Attachments:

    Issue Links:

    • #16777 JCache dependency in spring-aspects
    • #11943 Spring aspects depends on javax.persistence/persistence-api 1.0. Conflicts with ROO including hibernate-jpa-2.0-api

    Referenced from: commits https://github.com/spring-projects/spring-framework/commit/bd88bbab4a929dd07d4e29a08ba3d27749b8ec36, https://github.com/spring-projects/spring-framework/commit/4ddcd35d133d5274b8698f6f1758f6892ef487e2, https://github.com/spring-projects/spring-framework/commit/353781021d135f33cc727cf43c20bbb126871dda, https://github.com/spring-projects/spring-framework/commit/99c5a70ce3a3e7c4b0c36c70bdf37013be4e67ed, https://github.com/spring-projects/spring-framework/commit/82ec515e598caa971b92cdc4f86c8f894705deb7, https://github.com/spring-projects/spring-framework/commit/d9df50c6cd4c5b126b621dd932f1a0611baf4b7b, https://github.com/spring-projects/spring-framework/commit/94292cad1ceb3c541f5ab3906758fe2c67cfd144, https://github.com/spring-projects/spring-framework/commit/6e516b7281e92e3ae00343437ce5d16ebc9bacf5

    7 votes, 19 watchers

    in: core type: bug 
    opened by spring-projects-issues 41
  • Add PreFlightWebFilter

    Add PreFlightWebFilter

    Similar to CorsWebFilter there should be a PreFlightWebFilter in Spring Framework that leverages the PreFlightRequestHandler API.

    Related gh-26257 spring-projects/spring-boot#24541

    status: waiting-for-triage 
    opened by rwinch 0
  • getBeansOfType does not find some beans which are wrapped into a proxy

    getBeansOfType does not find some beans which are wrapped into a proxy

    Affects: 5.2.11.RELEASE, 5.3.6

    Issue: If the bean is wrapped by aop (for example if it was marked with @Transactional somewhere) into a proxy AND signleton instance was precreated (injected into some @Autowired field) already then ListableBeanFactory.getBeansOfType will not find it.

    What i am trying to achieve: I have a bunch of services implementations which all extend CrudService abstract generic class and I want find all implementations automatically.

    Possible fix - change ResolvableType.isInstance(Object obj) implementation from: return (obj != null && isAssignableFrom(obj.getClass())); to: return (obj != null && isAssignableFrom(obj.getClass())) || (checkSomehowIsItAProxy(obj) && isInstance(getWrappedObjectSomehow(obj)));

    status: waiting-for-triage 
    opened by Raigedas 0
  • DataClassRowMapper doesn't correctly convert generic fields

    DataClassRowMapper doesn't correctly convert generic fields

    DataClassRowMapper doesn't pass generic field information to internal TypeConverter: https://github.com/spring-projects/spring-framework/blob/b595dc1dfad9db534ca7b9e8f46bb9926b88ab5a/spring-jdbc/src/main/java/org/springframework/jdbc/core/DataClassRowMapper.java#L94

    As a result any field like this List<MyEnumType> values will be populated with String values (heap pollution).

    This problem can be solved by replacing the code above with something like this:

    args[i] = tc.convertIfNecessary(
        getColumnValue(rs, rs.findColumn(name), type),
        type,
        MethodParameter.forParameter(mappedConstructor.getParameters()[0]))
    

    mappedConstructor.getParameters() should be extracted as a field for performance reason.

    in: data type: bug 
    opened by belovaf 0
  • WebFlux loosing content of the reactive context

    WebFlux loosing content of the reactive context

    SpringBoot 2.4.5, spring-boot-starter-webflux

    WebFilter places a value into reactive context at the beginning of the request processing and retrieves it after. It works fine when request is handled by Controller but if the request is made to the non-existent path (no Controller is mapped to the request path) the value is missing in the reactive context (ctx.get() call fails).

    WebFilter code is:

    @Component
    public class CorrelationIdFilter implements WebFilter {
        public static final String CORRELATION_ID_HEADER_NAME = "X-correlationId";
        private final Logger logger = LoggerFactory.getLogger(getClass());
    
        @Override
        public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
            exchange.getResponse().beforeCommit(() -> Mono.deferContextual(ctx -> {
                logger.info("### Setting response header");
                exchange.getResponse().getHeaders().add(CORRELATION_ID_HEADER_NAME, ctx.get(CORRELATION_ID_HEADER_NAME));
                return Mono.empty();
            }));
    
            return chain.filter(exchange)
                    .contextWrite(ctx -> {
                        String correlationId = UUID.randomUUID().toString();
                        logger.info("### CorrelationId generated: {}", correlationId);
                        return ctx.put(CORRELATION_ID_HEADER_NAME, correlationId);
                    });
        }
    }
    
    

    Code to reproduce: https://github.com/maximdim/webflux-context

    Specifically HomeControllerTest.testNonExistingPath

    status: waiting-for-triage 
    opened by maximdim 0
  • Remove dependency on java.desktop and other modules

    Remove dependency on java.desktop and other modules

    Spring requires the java.desktop module to be present at Java runtimes only so that it can use the classes in the java.beans package.

    Would be a good start for modernizing Spring apps on a post Java 9+ era of modules if Spring could at least work on slim Java runtimes produced with jlink.

    Other modules to consider adjusting the dependency are java.naming, java.xml, java.sql, jdk.*, java.instrument, java.management,java.rmi, java.scripting.

    This is not about making Spring compatible with Java SE modules. This is only to allow developers to have smaller Java runtimes created with jlink.

    In an ideal world, a Java runtime, created with the following jlink command should be sufficient to run a Spring Boot Hello World with the Web dependency:

    $ jlink \
            --add-modules java.base,java.logging \
            --strip-debug \
            --no-man-pages \
            --no-header-files \
            --compress=2 \
            --output /javaruntime
    
    in: core type: enhancement 
    opened by brunoborges 3
  • `CorsRegistration::combine` is a noop

    `CorsRegistration::combine` is a noop

    The call to CorsConfiguration::combine returns a new configuration object, which is ignored.

    https://github.com/spring-projects/spring-framework/blob/607d918340c7a3a0282e1722354c689359dac201/spring-webflux/src/main/java/org/springframework/web/reactive/config/CorsRegistration.java#L151-L154

    https://github.com/spring-projects/spring-framework/blob/607d918340c7a3a0282e1722354c689359dac201/spring-web/src/main/java/org/springframework/web/cors/CorsConfiguration.java#L479-L501

    Affects: 5.3

    I was expecting the following to work:

    @Configuration
    class CorsGlobalConfiguration : WebFluxConfigurer {
    
        override fun addCorsMappings(corsRegistry: CorsRegistry) {
            val config = CorsConfiguration()
            config.addAllowedOrigin("http://localhost:3000")
            config.addAllowedMethod("*")
            config.applyPermitDefaultValues()
    
            corsRegistry.addMapping("/api/**").combine(config)
        }
    }
    

    This works:

    @Configuration
    class CorsGlobalConfiguration : WebFluxConfigurer {
    
        override fun addCorsMappings(corsRegistry: CorsRegistry) {
              corsRegistry.addMapping("/api/**")
                    .allowedOrigins("http://localhost:3000")
                    .allowedMethods("*")
    
        }
    }
    

    in: web type: bug 
    opened by bertwin 1
  • `@ModelAttribute` in WebFlux does not bind an HTTP query parameter

    `@ModelAttribute` in WebFlux does not bind an HTTP query parameter

    The behavior of @ModelAttribute in Web MVC and WebFlux is different.

    Except for #26856, the HTTP GET parameter cannot be bound normally.

    In WebFlux and Web MVC 5.3.4 :

    @RestController
    @SpringBootApplication
    public class MyApp  {
    
        public static void main(String[] args) {
            SpringApplication.run(MyApp.class);
        }
    
        @GetMapping("/echo")
        public String echo(@ModelAttribute("msg") String msg) {
            return msg;
        }
    }
    

    when I call http://localhost:8080/echo?msg=hello, I get `` for WebFlux but hello for Web MVC.

    in: web status: feedback-provided status: waiting-for-triage 
    opened by aoyvx 4
  • Add ApplicationEvent constructor for specifying timestamp

    Add ApplicationEvent constructor for specifying timestamp

    Unit testing listener behaviour where the time between events is important is a pain because it is impossible to specify the time of the event.

    I don't think there is a way to expose this behaviour in only test code, but I can do so if someone points out how.

    Lastly, if the constructor is intentionally left out, it might be good to document this.

    in: core in: test status: feedback-provided status: waiting-for-triage 
    opened by medwards 3
  • Upgrade to gradle 7.0

    Upgrade to gradle 7.0

    Here is tasks I can remember

    status: waiting-for-triage 
    opened by quaff 0
  • Support Kotlin suspending functions in SpEL expressions

    Support Kotlin suspending functions in SpEL expressions

    Referencing parameter names in SpEL expressions fails when using Kotlin suspending functions.

    For example

    @Cacheable(cacheNames = ["cache"], condition = "#key.startsWith('hello')")
    open suspend fun getConditionalCache(key: String): Any {
        // …
    

    Fails with:

    EL1004E: Method call: Method startsWith(java.lang.String) cannot be found on type java.lang.Object[]
    org.springframework.expression.spel.SpelEvaluationException: EL1004E: Method call: Method startsWith(java.lang.String) cannot be found on type java.lang.Object[]
    	at org.springframework.expression.spel.ast.MethodReference.findAccessorForMethod(MethodReference.java:226)
    	at org.springframework.expression.spel.ast.MethodReference.getValueInternal(MethodReference.java:135)
    	at org.springframework.expression.spel.ast.MethodReference.access$000(MethodReference.java:55)
    	at org.springframework.expression.spel.ast.MethodReference$MethodValueRef.getValue(MethodReference.java:387)
    	at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:92)
    	at org.springframework.expression.spel.ast.SpelNodeImpl.getTypedValue(SpelNodeImpl.java:117)
    	at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:308)
    	at org.springframework.cache.interceptor.CacheOperationExpressionEvaluator.condition(CacheOperationExpressionEvaluator.java:108)
    	at org.springframework.cache.interceptor.CacheAspectSupport$CacheOperationContext.isConditionPassing(CacheAspectSupport.java:763)
    	at org.springframework.cache.interceptor.CacheAspectSupport.isConditionPassing(CacheAspectSupport.java:583)
    	at org.springframework.cache.interceptor.CacheAspectSupport.findCachedItem(CacheAspectSupport.java:534)
    	at org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheAspectSupport.java:402)
    	at org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheAspectSupport.java:345)
    	at org.springframework.cache.interceptor.CacheInterceptor.invoke(CacheInterceptor.java:64)
    	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)
    	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)
    

    The type java.lang.Object[] comes from the suspending function, getConditionalCache, having an additional Continuation parameter that is implicitly passed to it when it is invoked.

    status: waiting-for-triage 
    opened by eleftherias 0
Releases(v5.2.14.RELEASE)
  • v5.2.14.RELEASE(Apr 13, 2021)

    :star: New Features

    • Add missing nullable annotation to ResponseEntity ok convenience method #26614
    • Support cookies with Expires attribute but no Max-Age attribute in MockHttpServletResponse #26559

    :beetle: Bug Fixes

    • @DirtiesContext not applied when class-level @EnabledIf evaluates to false #26697
    • StatusAssertion value methods fail when used with custom status code #26666
    • Local @CrossOrigin maxAge value should override global value #26620
    • Correctly set auto-growing array's element #26606
    • Fix handling of "file:" paths to non-existent files on Windows #26589
    • ClassLoader.getResource can throw IllegalArgumentException #26588
    • LoadTimeWeaver no longer weaves bean classes annotated with @Component #26584
    • ResourceUrlProvider detects wrong set of handler mappings #26562

    :hammer: Dependency Upgrades

    • Upgrade to Reactor Dysprosium-SR19 #26768
    Source code(tar.gz)
    Source code(zip)
  • v5.3.6(Apr 13, 2021)

    :star: New Features

    • Make sure file storage directory exists before usage in DefaultPartHttpMessageReader #26790
    • Allow spring-expression to be more easily repackaged for embedding in third-party JARs #26779
    • Support 'Accept-Patch' header in MVC and WebFlux #26759
    • Invalid IPv6 Address with X-Forwarded-For leads to number format exception #26748
    • awaitBodyOrNull function to handle empty body #26731
    • Reactive AbstractErrorWebExceptionHandler#htmlEscape() may be blocking #26712
    • Improve Docs on Testing Streaming Responses in Spring MVC #26687
    • Exceptions for missing request values should expose information when they are missing after conversion #26679

    :beetle: Bug Fixes

    • Addition of fallback patterns to temporal parser loses cause in Spring 5.3.5 #26777
    • ResourceHttpRequestHandler fails to resolve encoded paths when PathPattern is used #26775
    • Scheduling a task that runs once a day results in March 28 being skipped #26744
    • Support UTF-8 in DefaultPartHttpMessageReader #26736
    • Root path resolution for java.nio.Path properties does not work on Linux anymore #26702
    • @DirtiesContext not applied when class-level @EnabledIf evaluates to false #26694
    • MappedInterceptor in 5.3 does not support all AntPatternMatcher patterns #26690
    • BridgeMethodResolver#isBridgeMethodFor return incorrect result for kotlin code in certain circumstance #26585

    :notebook_with_decorative_cover: Documentation

    • Update ref docs regarding RequiredAnnotationBeanPostProcessor registration #26783
    • Update documentation for <context:annotation-config/> #26782
    • Fix javadoc link syntax #26776

    :hammer: Dependency Upgrades

    • Upgrade to Objenesis 3.2 #26714
    • Upgrade to Reactor 2020.0.6 #26767

    :heart: Contributors

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

    Source code(tar.gz)
    Source code(zip)
  • v5.3.5(Mar 16, 2021)

    :star: New Features

    • Expose @JmsListener endpoint id to annotation-derived listener container (for transaction definition name) #26683
    • Add support for Oracle bind marker scheme using R2DBC #26680
    • Add HTTP request cookies to the WebSocket handshake info #26674
    • Add an MockMVC alwaysDo equivalent to WebTestClient #26662
    • Ensure ClientResponse logPrefix Contains the Connection Id When Available #26656
    • Make use of Reactor Netty API for request id #26649
    • WriteResultPublisher does not pass cancel signals #26642
    • @EventListener annotated bean cannot be removed from the ApplicationEventMulticaster #26638
    • Support global @MessageExceptionHandler via @ControllerAdvice in RSocket #26636
    • Support UTF-16 and UTF-32 in Jackson HttpMessageConverters #26627
    • Add missing nullable annotation to ResponseEntity ok convenience method #26613
    • OncePerRequestFilter.isAsyncDispatch may return a NPE #26602
    • Allow AOP proxies to be created using the original ClassLoader #26601
    • WebSocketHandlerRegistration is missing option for allowedOriginPatterns #26593
    • HandlerMapping for WebSocket Requests Only #26565
    • Support cookies with Expires attribute but no Max-Age attribute in MockHttpServletResponse #26558
    • Allow logging REST endpoint mappings independent of other log categories #26539
    • Introduce 'idleReceivesPerTaskLimit' in DefaultMessageListenerContainer #26442
    • Improve handling of malformed Accept header for @ExceptionHandler methods #24539
    • Support fallback parsing patterns in @DateTimeFormat #20292

    :beetle: Bug Fixes

    • StatusAssertion value methods fail when used with custom status code #26658
    • Jaxb2XmlEncoder Support for Custom XML Media Types #26655
    • Local @CrossOrigin maxAge value should override global value #26619
    • Multipart boundary should strip quotes #26616
    • ServerHttpRequest content-type cannot be mutated #26615
    • Correctly set auto-growing array's element #26600
    • Change in behaviour for cron expression with day of the week range starting with SUN #26598
    • Fix handling of "file:" paths to non-existent files on Windows #26575
    • ClassLoader.getResource can throw IllegalArgumentException #26574
    • ResourceUrlProvider detects wrong set of handler mappings #26561
    • Dependency on Servlet 4.0 in spring-test makes it challenging to have Servlet 3.1 at runtime #26555
    • Response writing fails to complete with WebFlux on Tomcat #26434
    • LoadTimeWeaver no longer weaves bean classes annotated with @Component #26199

    :notebook_with_decorative_cover: Documentation

    • Fix Commons FileUpload URL in reference guide #26678
    • Update reference to deprecated CronSequenceGenerator #26651
    • Update ref docs regarding deprecated @Required annotation #26578
    • Fix build output directory for ref docs in CONTRIBUTING.md #26556
    • Document all supported SpringProperties keys in the reference manual #26554

    :hammer: Dependency Upgrades

    • Upgrade to Reactor 2020.0.5 #26650

    :heart: Contributors

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

    Source code(tar.gz)
    Source code(zip)
  • v5.2.13.RELEASE(Feb 16, 2021)

    :star: New Features

    • Inefficient reflection operations for destroy method determination #26499
    • No way to affect response when unhandled exceptions thrown from ForwardedHeaderTransformer #26465
    • Fail early FactoryBean instantiation for LinkageError #26426
    • Close mapping streams after the ValidatorFactory has been built in LocalValidatorFactoryBean #26424
    • Defensively handle loadClass null result in BeanUtils.findEditorByConvention (against misbehaving ClassLoader impl such as in the GWT JettyLauncher) #26256

    :beetle: Bug Fixes

    • Avoid unnecessary wrapping for SqlParameterValue #26547
    • Autowiring shortcut fails with NoSuchBeanDefinitionException after removeBeanDefinition call #26518
    • SimpleJdbcInsert (sporadically) does not insert all columns #26503
    • DefaultHandlerExceptionResolver handling of media type exception on Tomcat 7+ #26475
    • Websocket extensions not working #26452
    • AbstractBeanDefinition#equals handles propertyValues incorrectly #26435
    • Remove obsolete commandName attribute in spring-form.tld #26338
    • NettyHeadersAdapter.add() accepts @Nullable value but throws NullPointerException #26277

    :notebook_with_decorative_cover: Documentation

    • Document the "SpringProperties mechanism" mentioned in the testing chapter #26494
    • UriComponentsBuilder documentation error for HTTP request encoding #26455
    • Wrong documentation for CachePut #26404

    :hammer: Dependency Upgrades

    • Upgrade to Reactor Dysprosium-SR17 #26549
    Source code(tar.gz)
    Source code(zip)
  • v5.3.4(Feb 16, 2021)

    :star: New Features

    • Enforce standard Java types in YamlProcessor #26530
    • Fall back on awaitToBodylessEntity when awaitBody is used with Unit #26504
    • Expose HttpHandler Decoration as a bean #26502
    • Inefficient reflection operations for destroy method determination #26498
    • Missing CORS Headers for Static Resources in WebFlux #26495
    • Ignore null Locale in MockHttpServletResponse #26493
    • Ignore null header value in MockHttpServletResponse #26488
    • Add application/vnd.google.protobuf to ProtobufCodecSupport #26487
    • Expose ChannelId in ReactorNettyWebsocketSession #26485
    • Exclude User Destination Messages in Broker Message Handler #26474
    • UriComponentsBuilder '{' '}' may not be encoded although invalid characters #26466
    • Support BASE64 file name encoding in ContentDisposition #26463
    • Allow AbstractEnvironment subclasses to use custom ConfigurablePropertyResolver and MutablePropertySources #26462
    • Allow AbstractEnvironment to bypass active/default properties #26461
    • No way to affect response when unhandled exceptions thrown from ForwardedHeaderTransformer #26459
    • Support for servletPath prefix with PathPatternParser in Spring MVC #26445
    • Add unique number to WebFlux log prefix for Undertow server #26430
    • Provide a way to modify RequestMappingInfo conditions #26428
    • Provide better lifecyle for WebMvcConfigurer.configurePathMatch #26427
    • Fail early FactoryBean instantiation for LinkageError #26425
    • Unwrap DataSource hidden behind InfrastructureProxy in SqlScriptsTestExecutionListener #26422
    • Close mapping streams after the ValidatorFactory has been built in LocalValidatorFactoryBean #26418
    • Introduce public defineClass variant for SmartClassLoader implementations #26403
    • Return 415 for form data via @RequestBody in WebFlux #26386
    • Make set operator for MapSqlParameterSource accept nullable value #26288
    • Provide API to Expose the Handling of PreFlight Requests in WebFlux #26257
    • Configure the ObjectMappers to Use for a Class by MediaType #26212
    • Jetty 10 Support #26123
    • Introduce a NativeDetector utility class #25795
    • Add overload for MockRestServiceServer.verify with a timeout #22618

    :beetle: Bug Fixes

    • IllegalArgumentException due to lack of a cached lookupPath #26546
    • BeanUtils does not copy properties with generics from a Proxy since 5.3.0 #26531
    • Autowiring shortcut fails with NoSuchBeanDefinitionException after removeBeanDefinition call #26517
    • MockPart in request is not recieved in RequestPart in controller #26501
    • CORS Headers Added to Pre-Flight Request on Ambiguous Match Even Without @CrossOrigin #26490
    • SimpleJdbcInsert (sporadically) does not insert all columns #26486
    • Avoid unnecessary wrapping for SqlParameterValue #26471
    • DefaultHandlerExceptionResolver handling of media type exception on Tomcat 7+ #26470
    • Websocket extensions not working #26449
    • AbstractBeanDefinition#equals handles propertyValues incorrectly #26433
    • WebMvcConfigurationSupport.beanNameHandlerMapping does not set PathPatternParser #26414
    • Simple URL Mapping not working with PathPatternParser when Servlet context path is used #26411
    • BodyInserters.fromMultipartData swallows content type in certain cases #26410
    • MockPart is not added to parameter list anymore for Content-Type application/json #26400
    • CronExpression skips a temporal when last day of the month and * expression is used #26390
    • Malformed Content-Type Header in Response #26315

    :notebook_with_decorative_cover: Documentation

    • Update ref docs for nested class names #26540
    • RSocket support not linked from user guide index #26534
    • Document the "SpringProperties mechanism" mentioned in the testing chapter #26492
    • Document UriComponentsBuilder.pathSegment doesn't allow segments "without text" #26457
    • UriComponentsBuilder documentation error for HTTP request encoding #26453
    • Improve reference documentation on Resources #26447
    • Update documentation with details on content negotiation and the order of converter registrations #26388
    • Wrong documentation for CachePut #26186
    • Document choices for async ResponseEntity return values #22614

    :hammer: Dependency Upgrades

    • Update Gradle Enterprise Plugin versions #26374
    • Upgrade to JUnit 4.13.2 #26543
    • Upgrade to JUnit 5.7.1 #26510
    • Upgrade to Kotlin 1.4.30 #26545
    • Upgrade to Reactor 2020.0.4 #26548

    :heart: Contributors

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

    Source code(tar.gz)
    Source code(zip)
  • v5.3.3(Jan 12, 2021)

    :star: 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

    :beetle: 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

    :notebook_with_decorative_cover: 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

    :hammer: Dependency Upgrades

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

    :heart: Contributors

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

    Source code(tar.gz)
    Source code(zip)
  • v4.3.30.RELEASE(Dec 9, 2020)

    :star: 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

    :beetle: 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

    :notebook_with_decorative_cover: Documentation

    • DateTimeFormat ISO.DATE_TIME javadoc contains misleading default note #26138
    Source code(tar.gz)
    Source code(zip)
  • v5.0.20.RELEASE(Dec 9, 2020)

    :star: 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

    :beetle: 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

    :notebook_with_decorative_cover: Documentation

    • DateTimeFormat ISO.DATE_TIME javadoc contains misleading default note #26137
    • Incorrect example in javadocs of Assert.notNull(object, messageSupplier) #25871
    Source code(tar.gz)
    Source code(zip)
  • v5.1.20.RELEASE(Dec 9, 2020)

    :star: 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

    :beetle: 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

    :notebook_with_decorative_cover: Documentation

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

    :hammer: Dependency Upgrades

    • Upgrade to Reactor Californium-SR23 #26233
    Source code(tar.gz)
    Source code(zip)
  • v5.2.12.RELEASE(Dec 9, 2020)

    :star: 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

    :beetle: 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

    :notebook_with_decorative_cover: 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

    :hammer: Dependency Upgrades

    • Upgrade to Reactor Dysprosium-SR15 #26175
    Source code(tar.gz)
    Source code(zip)
  • v5.3.2(Dec 9, 2020)

    :star: 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

    :beetle: 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

    :notebook_with_decorative_cover: 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

    :hammer: Dependency Upgrades

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

    :heart: Contributors

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

    Source code(tar.gz)
    Source code(zip)
  • v5.3.1(Nov 10, 2020)

    :star: 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

    :beetle: 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

    :notebook_with_decorative_cover: Documentation

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

    :heart: Contributors

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

    Source code(tar.gz)
    Source code(zip)
  • v5.2.11.RELEASE(Nov 10, 2020)

    :star: 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

    :beetle: 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

    :notebook_with_decorative_cover: Documentation

    • Fix a broken Asciidoctor syntax in core-resources.adoc #26000
    Source code(tar.gz)
    Source code(zip)
  • v5.3.0(Oct 27, 2020)

    :star: 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

    :beetle: 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

    :notebook_with_decorative_cover: 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

    :hammer: 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

    :heart: Contributors

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

    Source code(tar.gz)
    Source code(zip)
  • v5.2.10.RELEASE(Oct 27, 2020)

    :star: 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

    :beetle: 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

    :notebook_with_decorative_cover: 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

    :hammer: Dependency Upgrades

    • Upgrade to RSocket 1.0.3 #25957
    • Upgrade to Reactor Dysprosium-SR13 #25946
    Source code(tar.gz)
    Source code(zip)
  • v5.1.19.RELEASE(Oct 27, 2020)

    :star: New Features

    • Optimize String argument resolution in MessageTag #25923
    • Avoid creation of unused logger instance in AbstractMediaTypeExpression #25902
    • Cannot test @RequestPart multipart controllers with Servlet MockPart #25894
    • Native Hibernate 5 bootstrapping with JTA transaction manager requires hibernate.transaction.coordinator_class=jta to be set #25862
    • Add MariaDB to the supported database products for procedures and functions #25812

    :beetle: Bug Fixes

    • Incorrect http response for a request using the Range header for pre-compressed resources #25979
    • @ActiveProfiles with same profiles but different order results in duplicate ApplicationContext #25974
    • LinkedMultiValueMap downstream issue with MultiValueMapAdapter package private base class #25961
    • jsessionid breaks request mappings when removeSemicolonContent is turned off #25867
    • SimpMessagingTemplate.convertAndSend results in UnsupportedOperationException when Spring Cloud Sleuth is present #25835
    • Wrong type inference in Kotlin while overriding RequestMappingHandlerMapping#getMappingForMethod #25818
    • ClassCastException when wiring bean using method injection (NullBean instead of 'null') #25807

    :notebook_with_decorative_cover: Documentation

    • Published reference documentation contains unnecessary folders and files #25794
    • Incorrect example in javadocs of Assert.notNull(object, messageSupplier) #25775

    :hammer: Dependency Upgrades

    • Upgrade to Reactor Californium-SR22 #25948
    Source code(tar.gz)
    Source code(zip)
  • v5.3.0-RC2(Oct 13, 2020)

    :star: New Features

    • Compatibility with Jackson 2.12 #25907
    • Loggers apparently constructed on a per HTTP request basis in reactive web code cause CPU overhead #25900
    • @ControllerAdvice order defined via @Order on a @Bean method is not applied #25872
    • Add missing awaitBodilessEntity and createExceptionAndAwait ClientResponse extensions #25866
    • Add Dependencies Manifest Entry to spring-core #25852
    • Subclasses of UrlBasedViewResolver could avoid reflection when creating instances of View #25847
    • Add option to disable Last-Modified handling when serving static resources #25845
    • FormHttpMessageConverter to preserve parameters from the input MediaType #25839
    • Request data binding fails for params with an empty array "[]" suffix #25836
    • Support for an async determination of status and headers with a WebMvc HandlerFunction #25828
    • Deprecate LiveBeansView #25820
    • MultipartFile[] required controller param, not throwing exception #25819
    • Optimize StringUtils trimLeading/Trailing methods #25810
    • Set the sameSite cookie attribute in ClientHttpResponse implementations #25785
    • Unable to change Clock for spring framework scheduling #25782
    • Resolve Principal argument only when not annotated #25780
    • Use the function endpoint, filter the handler function, and find that remoteAddress is null, params is empty #25776
    • Add kotlinx.serialization JSON support to Spring WebFlux #25771
    • Make path pattern optional in router functions #25752
    • Deprecate WebClient#exchange() and provide safer alternatives #25751
    • Easing the application of CORS default settings through the WebMvcConfigurer#corsConfigurer method #25716
    • Empty or blank required UUID header validation results in 200 response status #23939
    • Support suspending handler methods in Spring MVC #23611
    • Introduce Converter.andThen(...) #23379
    • Remove inefficiency in HttpStatus.series() #22366
    • Provide Gson/JSON-B MessageConverter for spring-messaging (aligned with spring-web) #21496
    • Discover test configuration on enclosing class for nested test class [SPR-15366] #19930

    :beetle: Bug Fixes

    • WebTestClient no longer captures the URI template #25854
    • Webflux Routing DSL's onError filters execute in unexpected order #25541
    • TransactionalOperator.executeAndAwait returns value too early #25007

    :notebook_with_decorative_cover: Documentation

    • Document DefaultPartHttpMessageReader #25827
    • Update WebFlux documentation with regards to logging appenders #25547
    • Upgrade to Asciidoctor Gradle plugin 3.x #24991

    :hammer: Dependency Upgrades

    • Upgrade to Kotlin Coroutines 1.4.0-M1 #25914
    • Upgrade to RSocket 1.1.0-RC1 #25898
    • Upgrade to Reactor 2020.0.0-RC2 #25884
    • Upgrade to Kotlin 1.4.10 #25779

    :heart: Contributors

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

    Source code(tar.gz)
    Source code(zip)
  • v5.3.0-RC1(Sep 15, 2020)

    :star: New Features

    • MimeMessageHelper should not encode attachment filenames by default #25770
    • A beforeCommit chain failure invariably results in a 500 response #25753
    • Improve performance of JdkDynamicAopProxy.getProxy(ClassLoader) #25660
    • Add URI variables to request context in AbstractUrlHandlerMapping (reactive) #25648
    • Public method in RSocketMessageHandler to register any handler method #25639
    • Allow early decoration of request and response in WebFlux #25633
    • Spring Test: Methods should allow supertypes of Matcher using lower bounded wildcards #25610
    • WebSocket configuration doesn't work properly with the buffer size limitation #25581
    • Declare interfaces as @FunctionalInterface where feasible #25580
    • Call StartupStep.end in finally block #25572
    • Support filename hint for client side use of ResourceDecoder #25516
    • No way to set timeout for the requests when using Jetty reactive httpclient #25493
    • Mime type "application/*" is not compatible with "application/vnd+json" #25350
    • Avoid resizing of fixed-size HashMap #25349
    • Support RSocket Load Balancing #25333
    • WebClient HTTP Request Timeout #25115
    • Support a RowMapper<T> for Java record classes #24695
    • Data binding for Java record classes #24391
    • Failure to bind a component of a form backing object using constructor binding causes the object to be null #24372
    • Concurrent access to ParsedSql cache in NamedParameterJdbcTemplate #24197
    • WebClient: wrap connection exceptions #23842
    • Extract MimeTypeUtils.ConcurrentLruCache and make it public #22789
    • WebSocket support with @EnableWebFlux #22587
    • Add kotlinx.serialization JSON support to Spring MVC #21188
    • Common API for MockMvc tests and for real HTTP tests #19647

    :beetle: Bug Fixes

    • Upgrading from Boot 2.3.3 or 2.4-M1 to Boot 2.4-M2 uses 125mb heap in BitsCronField #25687
    • Copy httpHandlerDecorator in copy constructor for WebHttpHandlerBuilder #25656
    • MockMvc does not correctly initialize the request for non-file mock Part uploads #25602
    • WebFlux application server add server.forward- Headers - Strategy = Framework RouterFunction endpoint 404 #25270

    :notebook_with_decorative_cover: Documentation

    • Fix typo in Regular Expression Pointcuts docs #25767
    • Fix typo regarding Ordered interface in core-aop.adoc #25759
    • Fix typo in websocket.adoc #25630
    • Eliminate unnecessary word in core-bean.adoc that causes repetition #25585
    • Publish documentation under reference/html folder #25071

    :hammer: Dependency Upgrades

    • Upgrade to RSocket 1.1 M2 #25729
    • Upgrade to Reactor 2020 RC1 #25728
    • Upgrade to Kotlin 1.4.0 #25617
    • Upgrade to Gradle 6.6 #25578
    • Upgrade to JUnit 5.7 #25527

    :heart: Contributors

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

    Source code(tar.gz)
    Source code(zip)
  • v4.3.29.RELEASE(Sep 15, 2020)

    :star: New Features

    • PropertiesLoaderSupport should ignore socket/connect exceptions as well #25722
    • Refine use of substring operations #25515

    :beetle: Bug Fixes

    • VerifyErrors when using SpEL compilation with Thymeleaf when invoking a default method defined in an interface #25713
    • SQLErrorCodesFactory.getErrorCodes(DataSource) returns empty error codes if access to transactional connection fails #25694
    • Potential integer overflow in AbstractResourceBasedMessageSource.setCacheSeconds(int) #25644
    • Lazy dependency proxy does not populate bean dependencies #25565
    • Synchronized blocks in MethodOverrides are hurting concurrency #25549
    • StaticListableBeanFactory.isSingleton() returns false for singleton beans #25525
    • MockHttpServletResponse reset() does not reset charset field #25512

    :notebook_with_decorative_cover: Documentation

    • Prevent confusion about build(boolean) method in UriComponentsBuilder #25703
    Source code(tar.gz)
    Source code(zip)
  • v5.0.19.RELEASE(Sep 15, 2020)

    :star: New Features

    • PropertiesLoaderSupport should ignore socket/connect exceptions as well #25721
    • Possible optimization in UrlResource #25551
    • Refine use of substring operations #25514

    :beetle: Bug Fixes

    • FileUrlResource isWritable method returns true if URL protocol is not indicating a file #25740
    • VerifyErrors when using SpEL compilation with Thymeleaf when invoking a default method defined in an interface #25712
    • CallMetaDataContext.reconcileParameters overwrites cursor name #25709
    • SQLErrorCodesFactory.getErrorCodes(DataSource) returns empty error codes if access to transactional connection fails #25693
    • Joda-Time presence check fails to detect Joda-Time 2.x specifically #25659
    • Potential integer overflow in AbstractResourceBasedMessageSource.setCacheSeconds(int) #25643
    • Lazy dependency proxy does not populate bean dependencies #25564
    • StaticListableBeanFactory.isSingleton() returns false for singleton beans #25524
    • MockHttpServletResponse reset() does not reset charset field #25511

    :notebook_with_decorative_cover: Documentation

    • Document how to specify Jackson JSON view serialization hints with @RestController and Webflux #25705
    • Prevent confusion about build(boolean) method in UriComponentsBuilder #25702
    Source code(tar.gz)
    Source code(zip)
  • v5.1.18.RELEASE(Sep 15, 2020)

    :star: New Features

    • PropertiesLoaderSupport should ignore socket/connect exceptions as well #25720
    • Avoid full singleton lock for DefaultSingletonBeanRegistry.getSingleton(beanName, false) #25695
    • Possible optimization in UrlResource #25550
    • Refine use of substring operations #25513

    :beetle: Bug Fixes

    • FileUrlResource isWritable method returns true if URL protocol is not indicating a file #25739
    • VerifyErrors when using SpEL compilation with Thymeleaf when invoking a default method defined in an interface #25711
    • CallMetaDataContext.reconcileParameters overwrites cursor name #25708
    • SQLErrorCodesFactory.getErrorCodes(DataSource) returns empty error codes if access to transactional connection fails #25692
    • Make "org.springframework.util.unit.DataSize" class Serializable #25676
    • Joda-Time presence check fails to detect Joda-Time 2.x specifically #25658
    • Potential integer overflow in AbstractResourceBasedMessageSource.setCacheSeconds(int) #25642
    • Lazy dependency proxy does not populate bean dependencies #25563
    • StaticListableBeanFactory.isSingleton() returns false for singleton beans #25523
    • MockHttpServletResponse reset() does not reset charset field #25510

    :notebook_with_decorative_cover: Documentation

    • Document how to specify Jackson JSON view serialization hints with @RestController and Webflux #25704
    • Prevent confusion about build(boolean) method in UriComponentsBuilder #25701

    :hammer: Dependency Upgrades

    • Upgrade to Reactor Californium-SR21 #25731
    Source code(tar.gz)
    Source code(zip)
  • v5.2.9.RELEASE(Sep 15, 2020)

    :star: New Features

    • HttpHeaders.setContentDispositionFormData should ignore empty filename #25769
    • StringDecoder does not provide a way to configure the default charset #25762
    • MimeMessageHelper.addAttachment: configurable encoding of attachment filename #25755
    • Current log level not checked by LogAccessor supplier-enabled logging methods #25741
    • PropertiesLoaderSupport should ignore socket/connect exceptions as well #25717
    • Avoid repeated calls to getPathWithinApplication from UrlPathHelper.getLookupPathForRequest #25669
    • Avoid full singleton lock for DefaultSingletonBeanRegistry.getSingleton(beanName, false) #25667
    • XStreamMarshaller should avoid direct use of CompositeClassLoader which is not exported by XStream in OSGi #25662
    • Avoid LinkedList performance issues through use of ArrayDeque #25652
    • Introduce createContext() factory method in AbstractGenericContextLoader #25600
    • Declare MessagePostProcessor as a @FunctionalInterface #25571
    • Assert preconditions for MergedAnnotations.from() factory methods #25568
    • Provide access to AbstractRoutingDataSource's resolved target DataSources #25544
    • Possible optimization in UrlResource #25531
    • Refine use of substring operations #25445
    • Cache abstraction does not log hit / miss for synchronized access #25248

    :beetle: Bug Fixes

    • Issue with Forwarded Header and Multiple Values #25737
    • CallMetaDataContext.reconcileParameters overwrites cursor name #25707
    • VerifyErrors when using SpEL compilation with Thymeleaf when invoking a default method defined in an interface #25706
    • SQLErrorCodesFactory.getErrorCodes(DataSource) returns empty error codes if access to transactional connection fails #25681
    • Make "org.springframework.util.unit.DataSize" class Serializable #25675
    • Joda-Time presence check fails to detect Joda-Time 2.x specifically #25655
    • Regression in SimpleThreadScope introduced in 5.2.7 #25618
    • Potential integer overflow in ExecutorConfigurationSupport.setAwaitTerminationSeconds(int) and AbstractResourceBasedMessageSource.setCacheSeconds(int) #25613
    • Remove session on 4xx response from WebSocket handshake #25608
    • spring-jdbc don't set out parameter name from metadata for Postgresql function after issue#25399 #25588
    • FileUrlResource isWritable method returns true if URL protocol is not indicating a file #25584
    • Lazy dependency proxy does not populate bean dependencies #25562
    • Bean creation fails with StackOverflowError after upgrading from 5.1.13 to 5.2.7 #25546
    • StaticListableBeanFactory.isSingleton() returns false for singleton beans #25522
    • Standalone MockMvc ignores @RestControllerAdvice annotation attributes #25520
    • MockHttpServletResponse reset() does not reset charset field #25501
    • AnnotationTypeMappings does not filter repeatable annotations #25483
    • Wrong error message for type mismatch in jsonPath().value() #25480
    • Fix infinite loop bug in AnnotationScanner #25429
    • Overloaded @Bean method with name mismatch causes bean to be created twice (in case of ASM processing) #25263

    :notebook_with_decorative_cover: Documentation

    • Prevent confusion about build(boolean) method in UriComponentsBuilder #25604
    • Document how to specify Jackson JSON view serialization hints with @RestController and Webflux #25596
    • Inconsistent log level in @Bean javadoc and ConfigurationClassEnhancer #25590
    • Fix asciidoctor syntax for source #25539
    • Improve Javadoc for @RequestMapping#params #25482
    • Document that SimpleCacheManager requires caches to be initialized when not used as a bean #22988

    :hammer: Dependency Upgrades

    • Upgrade to Reactor Dysprosium-SR12 #25730

    :heart: Contributors

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

    Source code(tar.gz)
    Source code(zip)
  • v5.3.0-M2(Aug 11, 2020)

    :star: New Features

    • Introduce getBeanProvider variants with allowEagerInit flag #25559
    • Allow to access the underlying ConnectionFactory from DatabaseClient #25521
    • Optimize DefaultLifecycleProcessor::startBeans #25506
    • Refactoring opportunity in HandlerExecutionChain #25500
    • Support macros in crontab expressions #25471
    • Introduce CronExpression #25464
    • Use System.currentTimeMillis() in AbstractSockJsService #25447
    • Simplified return statement #25415
    • Improve UriComponents.sanitizeSource() #25401
    • Use Math.min() in ExponentialBackOff #25381
    • Allow auto grow for entries without default constructor in SpEL #25367
    • Remove redundant Character.toLowerCase() in BeanPropertyRowMapper #25361
    • Leverage spring.ignore.xml flag to avoid XmlBeanDefinitionReader #25338
    • Leverage spring.ignore.xml flag to avoid SQLErrorCodeSQLExceptionTranslator #25335
    • Check for valid IPv6 host in UriComponentsBuilder.fromUriString #25334
    • Support use of RSocketClient #25332
    • Enhance HandlerMappingIntrospector to cache parsed patterns #25312
    • DefaultSubscriptionRegistry: Reduced thread contention #25298
    • Support multiple Content-Language header values in MockHttpServletResponse #25281
    • added possibility to extend ModelAttributeMethodArgumentResolver #25265
    • WebSocketMessage's methods fromMessage and toFrames ignore Netty WebSocketFrame metadata #25099
    • Support for pattern based origin cors configuration #25016
    • Collect metrics during application context startup #24878
    • Sort detected PersistenceExceptionTranslator beans #24644
    • Constructor based bean binding should support url path variables, not only request parameters #24107
    • Feature request: provide support for JSR 310 types in CronTrigger #23496
    • RouterFunction does not respect path matching set in WebFluxConfigurer #23236
    • Turn MethodArgumentNotValidException into subclass of BindException #23107
    • Support for direct path lookups in WebFlux #22961
    • ExceptionHandlerExceptionResolver should support exceptions from any handler #22619
    • @Scheduled(cron = "0 0 0 ? * 5#3") is not supported #22436
    • Consider updating the default Hibernate dialect for MySQL databases #22326
    • Spring MVC - Kotlin: Cannot bind MultipartFile in constructor [SPR-17640] #22169
    • Support JSON streaming formats besides application/stream+json #21283
    • Support raising exception with a custom HTTP status code #20336
    • Support for the last day in month cron expression [SPR-15547] #20106
    • Cron Expression validation [SPR-14933] #19500
    • Cron expression with fixed weekday and fixed date may or may not lead to IllegalStateException (runaway search for next trigger) [SPR-8981] #13621

    :beetle: Bug Fixes

    • MockHttpServletResponse's setCharacterEncoding() does not update contentType property #25536
    • Bean overriding for 'taskExecutor' alias is not detected #25430
    • Creating ServerRequest from MockHttpServletRequest changed behaviour 5.3.0-M1 #25353
    • CaffeineCache does not support LoadingCache consistently #25173
    • CronSequenceGenerator - Friday 13th issue [SPR-17036] #21574

    :notebook_with_decorative_cover: Documentation

    • Use Groovy syntax highlighting in reference manual #25554
    • Fix comment syntax in xml examples #25537
    • Fix links in Javadoc #25448
    • Fix typo in javadoc #25396
    • Add logging reference documentation [SPR-17626] #22158

    :hammer: Dependency Upgrades

    • Upgrade to Jackson 2.11.2 #25398
    • Upgrade to Reactor 2020.0.0-M2 #25373
    • Upgrade to RSocket 1.1 M1 #25331
    • Upgrade to ASM 9.0 #24872
    • Upgrade to Kotlin 1.4 RC #24171

    :heart: Contributors

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

    Source code(tar.gz)
    Source code(zip)
  • v5.2.8.RELEASE(Jul 21, 2020)

    :star: New Features

    • Defer creating logger in StandardWebSocketHandlerAdapter #25427
    • MutablePropertySources will not find or remove proxied sources #25369
    • Profiles should be comparable when created via Profiles.of() #25340
    • Avoid re-creating RSocketRequester instance per subscriber #25330
    • Hoist Class.getName() from String concatenation to dodge an issue related to profile pollution #25324
    • Improve Random seed in SocketUtils #25321
    • Support fragments in UriComponentsBuilder.fromHttpUrl() #25300
    • Support for custom cache registration in CaffeineCacheManager #25230
    • Don't get ContentCachingResponseWrapper in ShallowEtagHeaderFilter so that users can extend this wrapper #24976
    • Unnecessarily alarming stack trace logged during scheduler resolution #23268
    • Expose a setExceptionListener method in DefaultJmsListenerContainerFactory [SPR-17570] #22102

    :beetle: Bug fixes

    • UriComponentsBuilder.cloneBuilder() cause sharing query parameters between builders #25423
    • SimpleJdbcCall does not find stored function with PostgreSQL driver 42.2.11 #25399
    • MappingJackson2HttpMessageConverter might be too specific in its Charset support #25322
    • ReactorNetty websocket issue for multiple clients with different protocols #25315
    • Mutating a ServerHttpRequest breaks the existing context path #25279
    • ServerHttpRequest.getSslInfo() always returns null for reactor-netty HTTP/2 requests #25278
    • NoRollbackFor rule causes TransactionAspectSupport to log unwarranted "exception overridden" error on WebSphere #25253
    • AbstractJackson2HttpMessageConverter - Check for encoding breaks JSON to POJO de-serialization experience #25247
    • The AbstractTemplateViewResolver class is not abstract #25240
    • WebClient: NPE and leak in case connection is reset by server. #25216
    • Oracle LOB segments holding TEMP space after executing SP using SimpleJdbcCall with SqlParameterSource #22972
    • IllegalReferenceCountException happens when the operation was canceled #22594
    • DefaultListableBeanFactory.getBean(Class) may throw NoSuchBeanDefinitionException when removeBeanDefinition is being called simultaneously to remove an unrelated bean #22263

    :notebook_with_decorative_cover: Documentation

    • Clarify enforceInitMethod/enforceDestroyMethod default values in AbstractBeanDefinition #25402
    • Improve JavaDoc for ConfigurableApplicationContext.refresh() #25380
    • Fix interface and class names in examples in core-aop doc #25351
    • Wording changes #25314
    • Fix typo in Java example for handler class #25302
    • Improve Javadoc for @Value regarding supported expressions #25284
    • Fix syntax in validation examples #25251
    • Document exception handling limitations in TaskDecorator implementations (specifically for ThreadPoolTaskExecutor#submit) #25231

    :hammer: Dependency upgrades

    • Upgrade to Reactor Dysprosium-SR10 #25376
    • Upgrade to nohttp 0.0.5 #25266

    :heart: Contributors

    We’d like to thank all the contributors who worked on our current release!

    Source code(tar.gz)
    Source code(zip)
  • v5.1.17.RELEASE(Jul 21, 2020)

    :star: New Features

    • Defer creating logger in StandardWebSocketHandlerAdapter #25433
    • Unnecessarily alarming stack trace logged during scheduler resolution #25416
    • MutablePropertySources will not find or remove proxied sources #25406
    • Profiles should be comparable when created via Profiles.of() #25363

    :beetle: Bug fixes

    • UriComponentsBuilder.cloneBuilder() cause sharing query parameters between builders #25424
    • DefaultListableBeanFactory.getBean(Class) may throw NoSuchBeanDefinitionException when removeBeanDefinition is being called simultaneously to remove an unrelated bean #25421
    • Oracle LOB segments holding TEMP space after executing SP using SimpleJdbcCall with SqlParameterSource #25417
    • MappingJackson2HttpMessageConverter might be too specific in its Charset support #25343
    • ServerHttpRequest.getSslInfo() always returns null for reactor-netty HTTP/2 requests #25286
    • NoRollbackFor rule causes TransactionAspectSupport to log unwarranted "exception overridden" error on WebSphere #25267
    • AbstractJackson2HttpMessageConverter - Check for encoding breaks JSON to POJO de-serialization experience #25252
    • The AbstractTemplateViewResolver class is not abstract #25241

    :notebook_with_decorative_cover: Documentation

    • Clarify enforceInitMethod/enforceDestroyMethod default values in AbstractBeanDefinition #25403
    • Document exception handling limitations in TaskDecorator implementations (specifically for ThreadPoolTaskExecutor#submit) #25233

    :hammer: Dependency upgrades

    • Upgrade to Reactor Californium-SR20 #25412
    Source code(tar.gz)
    Source code(zip)
  • v5.0.18.RELEASE(Jul 21, 2020)

    :star: New Features

    • Defer creating logger in StandardWebSocketHandlerAdapter #25434
    • Missing null checks in AbstractMessageChannel.addInterceptor/setInterceptors #25220
    • Avoid full synchronization in AbstractRefreshableApplicationContext.getBeanFactory() since it can lead to massive thread blocking #25218

    :beetle: Bug fixes

    • UriComponentsBuilder.cloneBuilder() cause sharing query parameters between builders #25425
    • DefaultListableBeanFactory.getBean(Class) may throw NoSuchBeanDefinitionException when removeBeanDefinition is being called simultaneously to remove an unrelated bean #25422
    • Oracle LOB segments holding TEMP space after executing SP using SimpleJdbcCall with SqlParameterSource #25418
    • NoRollbackFor rule causes TransactionAspectSupport to log unwarranted "exception overridden" error on WebSphere #25268
    • The AbstractTemplateViewResolver class is not abstract #25242
    • MultiValueMapAdapter.getFirst fails with IndexOutOfBoundsException in case of empty List #25226
    • WebSphereUowTransactionManager causes exception for PROPAGATION_SUPPORTS when timeout is specified #25224
    • Avoid ClassCastException on IllegalArgumentException when invoking sync get cache method #25222

    :notebook_with_decorative_cover: Documentation

    • Clarify enforceInitMethod/enforceDestroyMethod default values in AbstractBeanDefinition #25404
    • Document exception handling limitations in TaskDecorator implementations (specifically for ThreadPoolTaskExecutor#submit) #25234
    Source code(tar.gz)
    Source code(zip)
  • v4.3.28.RELEASE(Jul 21, 2020)

    :star: New Features

    • Defer creating logger in StandardWebSocketHandlerAdapter #25435
    • Alignment of CORS default values with 5.x #25414
    • Missing null checks in AbstractMessageChannel.addInterceptor/setInterceptors #25221
    • Avoid full synchronization in AbstractRefreshableApplicationContext.getBeanFactory() since it can lead to massive thread blocking #25219

    :beetle: Bug fixes

    • UriComponentsBuilder.cloneBuilder() cause sharing query parameters between builders #25426
    • Oracle LOB segments holding TEMP space after executing SP using SimpleJdbcCall with SqlParameterSource #25419
    • NoRollbackFor rule causes TransactionAspectSupport to log unwarranted "exception overridden" error on WebSphere #25269
    • The AbstractTemplateViewResolver class is not abstract #25243
    • MultiValueMapAdapter.getFirst fails with IndexOutOfBoundsException in case of empty List #25227
    • WebSphereUowTransactionManager causes exception for PROPAGATION_SUPPORTS when timeout is specified #25225
    • Avoid ClassCastException on IllegalArgumentException when invoking sync get cache method #25223

    :notebook_with_decorative_cover: Documentation

    • Clarify enforceInitMethod/enforceDestroyMethod default values in AbstractBeanDefinition #25405
    • Document exception handling limitations in TaskDecorator implementations (specifically for ThreadPoolTaskExecutor#submit) #25235
    Source code(tar.gz)
    Source code(zip)
  • v5.3.0-M1(Jun 25, 2020)

    :star: New Features

    • Use @SafeVarargs in Jackson builder and factory #25311
    • Use JDBC 4 API for connection validation #25305
    • Reduce String creation in BeanPropertyRowMapper #25301
    • Align DispatcherServlet defaults for Java and XML #25260
    • Make DispatcherServlet.properties loading lazy #25257
    • Rollback reactive transaction on cancel #25256
    • Support multi-value X-Forwarded-Prefix headers #25254
    • Refactor method name dispatching to switch statements in AutowireUtils #25199
    • Disable and remove unsupported features from native images #25179
    • Refactor method name dispatching to switch statements #25170
    • Refactor method name dispatching to switch statements #25163
    • Provide a flag to disable SpEL support #25153
    • Provide a flag to disable XML support #25151
    • Allow customization of JPA EntityManager before use #25125
    • Make use of HttpServletMapping when available #25100
    • Add support for R2DBC #25065
    • Support configurable timeout in @Transactional #25052
    • Use same default ClassLoader in SpringFactoriesLoader #24992
    • SpringFactoriesLoader should filter out duplicates #24985
    • DefaultResourceLoader's default constructor makes it easy to introduce a ClassLoader leak #24957
    • Reject "/path/**/other" patterns in PathPatternParser #24952
    • Support for PathPatternParser in Spring MVC #24945
    • Introduce ClientHttpConnector test suite #24941
    • Add file parameters as request parts in HtmlUnitRequestBuilder #24926
    • BeanNameAutoProxyCreator proxies the wrong beans when custom TargetSourceCreator specified #24915
    • Expose multipart data in ServerRequest #24909
    • VersionResourceResolver should use weak ETags to allow for HTTP compression #24898
    • Extend transaction attributes with labels #24890
    • Avoid using regex matching for static patterns #24887
    • Align TransactionManagementConfigurer support in TestContext framework with production #24869
    • Add Encoder and Decoder for Netty ByteBuf #24866
    • Allow setting SerializationInclusion with JsonInclude.Value #24824
    • ObjectProvider.ifAvailable throws exception for scoped bean without an active scope #24822
    • Wrap XMLStreamException in DecodingException #24778
    • Improve MediaType parsing performance #24769
    • Add BeanPostProcessors in bulk #24756
    • Integrate Apache Http client with WebClient #24700
    • Improve performance of AbstractAutowireCapableBeanFactory#predictBeanType #24681
    • Improve efficiency of mutating of ClientHttpResponse and ServerHttpRequest #24680
    • Support user-defined key type in JDBC KeyHolder #24655
    • PartsHttpMessageWriter introduced #24535
    • Support URI templates in RequestEntity #24406
    • Allow re-initialization of DataBinder to and from direct field or bean property access #24347
    • Add support for metadata push to RSocketRequester #24322
    • Support setting spring.test.constructor.autowire.mode via junit-platform.properties file #24285
    • Honor generic type information in BeanUtils.copyProperties() #24281
    • Fix behavior in ExceptionHandlerExceptionResolver.setResponseBodyAdvice #24204
    • Support for RxJava 3 #24170
    • Add Nullable to Joinpoint and MethodInterceptor #24117
    • DataSourceTransactionManager does not consider SQLExceptionTranslator on commit #24064
    • Turn off useSuffixPatternMatching by default #23915
    • Support matching against multiple header values in HeaderAssertions #23878
    • Multipart request support in MockRestServiceServer #23772
    • Enhanced form data request support in MockRestServiceServer #23671
    • Add support for X-Forwarded-For and Forwarded for #23582
    • @ExceptionHandler to keep nesting beyond the first cause #23380
    • Support separate annotation introspectors in Jackson2ObjectMapperBuilder #23017
    • Improve GraalVM native support #22968
    • Provide access to the WebSocket close status in WebFlux #22079
    • Make WebFlux multipart support fully Reactive [SPR-17122] #21659
    • Add iterable JDBC template to process large amount of data [SPR-13900] #18474

    :beetle: Bug fixes

    • AllEncompassingFormHttpMessageConverter now uses both JAXB and Jackson by default #25291
    • Align @RequestPart support in WebFlux with Spring MVC #22973

    :notebook_with_decorative_cover: Documentation

    • Fix obsolete link in Kotlin docs #25192
    • Switch to googlecode theme for syntax highlighting in reference manual #24865
    • fix WebRequest.checkNotModified docs #1035

    :hammer: Dependency upgrades

    • Upgrade to Gradle 6.5 #25180
    • Upgrade to Reactor 2020.0.0 M1 #25085
    • Upgrade to Dom4j 2.1.3 and Jaxen 1.2.0 #25078
    • Upgrade to Gradle 6.4 #25020
    • Upgrade to ASM 8.1 #24872
    • Upgrade to TestNG 7.1.0 #24298
    • Upgrade to Groovy 3.0 #24215
    • Upgrade to JUnit 4.13 #22894

    :heart: Contributors

    We’d like to thank all the contributors who worked on our current release!

    Source code(tar.gz)
    Source code(zip)
  • v5.1.16.RELEASE(Jun 9, 2020)

    :star: New Features

    • Performance enhancement in execution of ResponseEntity.of() #25197
    • Support for shared GroovyClassLoader in GroovyScriptFactory #25181
    • Make use of custom types configurable in YamlProcessor #25154
    • Missing null checks in AbstractMessageChannel.addInterceptor #25089
    • Avoid full synchronization in AbstractRefreshableApplicationContext.getBeanFactory() since it can lead to massive thread blocking #25083
    • Fix concurrency issues in XStreamMarshaller #25026
    • Avoid logging exception for closed session in AbstractSockJsSession #25003

    :beetle: Bug Fixes

    • AbstractJackson2HttpMessageConverter does not respect character encoding in canRead/canWrite #25185
    • ExchangeStrategies custom codec's reader & writer are not registered #25150
    • MultiValueMapAdapter.getFirst fails with IndexOutOfBoundsException in case of empty List #25141
    • WebSphereUowTransactionManager causes exception for PROPAGATION_SUPPORTS when timeout is specified #25135
    • Avoid ClassCastException on IllegalArgumentException when invoking sync get cache method #25118
    • DefaultServerRequestBuilder does not respect attributes when building the ServerRequest #25107
    • Fix race condition in WriteResultPublisher between subscription and error in publishError #25102
    • HttpHeaders equals may return false without comparing actual content #25035
    • Fix race condition in WriteResultPublisher between subscription and completion in publishComplete #25004

    :hammer: Dependency Upgrades

    • Upgrade to Reactor Californium-SR19 #25211
    Source code(tar.gz)
    Source code(zip)
  • v5.2.7.RELEASE(Jun 9, 2020)

    :star: New Features

    • Implement reliable invocation order for advice within an @Aspect #25186
    • Performance enhancement in execution of ResponseEntity.of() #25183
    • Support for shared GroovyClassLoader in GroovyScriptFactory #25177
    • Suggest making a Set.size() > 0 judgement for AbstractApplicationContext.earlyApplicationEvents #25161
    • Make use of custom types configurable in YamlProcessor #25152
    • Avoid need for default constructor in ContextAnnotationAutowireCandidateResolver subclasses #25131
    • ConstructorResolver.resolveConstructorArguments() return value issue #25130
    • Introduce serializeToByteArray/deserializeFromByteArray convenience methods #25117
    • Custom HTTP Method on MockServerHttpRequest #25109
    • Missing null checks in AbstractMessageChannel.addInterceptor/setInterceptors #25088
    • Avoid full synchronization in AbstractRefreshableApplicationContext.getBeanFactory() since it can lead to massive thread blocking #25081
    • Simplify use of HttpContext in HttpComponentsClientHttpRequestFactory in support of user associated connections #25066
    • ResolvableType forClass fails when a type in the generic signature isn't present #25064
    • Include timeout unit in shutdown failure logging #25058
    • Drop unnecessary intermediate StringBuilder.toString() call in ServerSentEventHttpMessageReader #25024
    • Fix concurrency issues in XStreamMarshaller #25017
    • Introduce mechanism to discover whether a reactive type registered in ReactiveAdapterRegistry uses deferred computation #24995
    • Avoid logging exception for closed session in AbstractSockJsSession #24986
    • Include response body in RestTemplate exception when there is no suitable HttpMessageConverter #24964

    :beetle: Bug Fixes

    • ExchangeStrategies custom codec's reader & writer are not registered #25149
    • MultiValueMapAdapter.getFirst fails with IndexOutOfBoundsException in case of empty List #25140
    • WebSphereUowTransactionManager causes exception for PROPAGATION_SUPPORTS when timeout is specified #25132
    • Avoid ClassCastException on IllegalArgumentException when invoking sync get cache method #25110
    • DefaultServerRequestBuilder does not respect attributes when building the ServerRequest #25106
    • Fix race condition in WriteResultPublisher between subscription and error in publishError #25096
    • Jackson message converters and codecs do not respect character encoding in canRead/canWrite #25076
    • DefaultClientResponseBuilder empty logPrefix when creating a DefaultClientResponse based on another #25069
    • HttpHeaders equals may return false without comparing actual content #25034
    • Fix race condition in WriteResultPublisher between subscription and completion in publishComplete #24989

    :notebook_with_decorative_cover: Documentation

    • Javadoc for hibernate5 OpenSessionInViewFilter mentions FlushMode.NEVER #25158
    • Document that the Map backing a MapPropertySource should not contain null values #25142
    • Javadoc for JdbcOperations.batchUpdate should mention that negative values are possible #25138
    • Fix URI pattern example in webflux.adoc #25137
    • Document how reactive transactions work for cancellation in 5.2 and how it will work in 5.3 #25091
    • Document whether code can rely on specific subclasses of HttpClientErrorException/HttpServerErrorException being thrown from DefaultResponseErrorHandler #25067
    • Fix SpelEvaluationException with example code #25045
    • javadoc: remove a comment documented a limitation on @Lookup annotation #25044
    • Document all predefined variables from ApplicationContext available in SpEL expressions #25037
    • Document ReactiveTransactionManager support in reference manual #25036
    • Document ReactiveTransactionManager support #25030
    • Change to placeholder value in XML is not reevaluated at runtime #25022
    • Add missing @PathVariable declarations in examples in webmvc.adoc #25006

    :hammer: Dependency Upgrades

    • Upgrade to Reactor Dysprosium-SR8 #25210

    :heart: Contributors

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

    Source code(tar.gz)
    Source code(zip)
Spring Framework

Spring Framework This is the home of the Spring Framework: the foundation for all Spring projects. Collectively the Spring Framework and the family of

Spring 41.8k Mar 13, 2021
🚀 The best rbac web framework. base on Spring Boot 2.4、 Spring Cloud 2020、 OAuth2 . Thx Give a star

?? The best rbac web framework. base on Spring Boot 2.4、 Spring Cloud 2020、 OAuth2 . Thx Give a star

pig-mesh 1k Apr 10, 2021
Realtime Client Server Framework for the JVM, supporting WebSockets with Cross-Browser Fallbacks

Welcome to Atmosphere: The Event Driven Framework supporting WebSocket and HTTP The Atmosphere Framework contains client and server side components fo

Atmosphere Framework 3.5k Mar 13, 2021
Apache Wicket - Component-based Java web framework

What is Apache Wicket? Apache Wicket is an open source, java, component based, web application framework. With proper mark-up/logic separation, a POJO

The Apache Software Foundation 549 Mar 10, 2021
Vaadin 6, 7, 8 is a Java framework for modern Java web applications.

Vaadin Framework Vaadin allows you to build modern web apps efficiently in plain Java, without touching low level web technologies. This repository co

Vaadin 1.7k Apr 24, 2021
True Object-Oriented Java Web Framework

Project architect: @paulodamaso Takes is a true object-oriented and immutable Java8 web development framework. Its key benefits, comparing to all othe

Yegor Bugayenko 669 Mar 12, 2021
DEPRECATED: use https://github.com/jhipster/jhipster-bom instead

JHipster BOM and server-side library - DEPRECATED Full documentation and information is available on our website at https://www.jhipster.tech/ This pr

JHipster 399 Mar 21, 2021
Play Framework

Play Framework - The High Velocity Web Framework The Play Framework combines productivity and performance making it easy to build scalable web applica

Play Framework 11.8k Mar 13, 2021
:rocket: Lightning fast and elegant mvc framework for Java8

Based on Java8 + Netty4 to create a lightweight, high-performance, simple and elegant Web framework ?? Spend 1 hour to learn it to do something intere

Blade Framework 5.5k Mar 9, 2021
:rocket: Lightning fast and elegant mvc framework for Java8

Based on Java8 + Netty4 to create a lightweight, high-performance, simple and elegant Web framework ?? Spend 1 hour to learn it to do something intere

Blade Framework 5.5k Mar 13, 2021
CUBA Platform is a high level framework for enterprise applications development

Java RAD framework for enterprise web applications Website | Online Demo | Documentation | Guides | Forum CUBA Platform is a high level framework for

CUBA Platform 1.1k Mar 11, 2021
Ninja is a full stack web framework for Java. Rock solid, fast and super productive.

_______ .___ _______ ____. _____ \ \ | |\ \ | | / _ \ / | \| |/ | \ | |/ /_\ \ / | \

Ninja Web Framework 1.9k Mar 11, 2021
Micro Java Web Framework

Micro Java Web Framework It's an open source (Apache License) micro web framework in Java, with minimal dependencies and a quick learning curve. The g

Pippo 743 Mar 9, 2021
An Intuitive, Lightweight, High Performance Full Stack Java Web Framework.

mangoo I/O mangoo I/O is a Modern, Intuitive, Lightweight, High Performance Full Stack Java Web Framework. It is a classic MVC-Framework. The foundati

Sven Kubiak 52 Mar 1, 2021