Skip to content

Commit 379ffac

Browse files
committed
Add state and response wrapping to StandardServletAsyncWebRequest
The wrapped response prevents use after AsyncListener onError or completion to ensure compliance with Servlet Spec 2.3.3.4. The wrapped response is applied in RequestMappingHandlerAdapter. The wrapped response raises AsyncRequestNotUsableException that is now handled in DefaultHandlerExceptionResolver. See gh-32340
1 parent 380184e commit 379ffac

File tree

8 files changed

+622
-31
lines changed

8 files changed

+622
-31
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/*
2+
* Copyright 2002-2024 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.springframework.web.context.request.async;
18+
19+
import java.io.IOException;
20+
21+
/**
22+
* Raised when the response for an asynchronous request becomes unusable as
23+
* indicated by a write failure, or a Servlet container error notification, or
24+
* after the async request has completed.
25+
*
26+
* <p>The exception relies on response wrapping, and on {@code AsyncListener}
27+
* notifications, managed by {@link StandardServletAsyncWebRequest}.
28+
*
29+
* @author Rossen Stoyanchev
30+
* @since 5.3.33
31+
*/
32+
@SuppressWarnings("serial")
33+
public class AsyncRequestNotUsableException extends IOException {
34+
35+
36+
public AsyncRequestNotUsableException(String message) {
37+
super(message);
38+
}
39+
40+
public AsyncRequestNotUsableException(String message, Throwable cause) {
41+
super(message, cause);
42+
}
43+
44+
}

0 commit comments

Comments
 (0)