Browse Source

Polishing

See gh-32342
pull/32754/head
rstoyanchev 2 years ago
parent
commit
3b7c435134
  1. 44
      spring-web/src/main/java/org/springframework/web/context/request/async/StandardServletAsyncWebRequest.java

44
spring-web/src/main/java/org/springframework/web/context/request/async/StandardServletAsyncWebRequest.java

@ -96,7 +96,7 @@ public class StandardServletAsyncWebRequest extends ServletWebRequest implements @@ -96,7 +96,7 @@ public class StandardServletAsyncWebRequest extends ServletWebRequest implements
}
//noinspection DataFlowIssue
((LifecycleHttpServletResponse) getResponse()).setParent(this);
((LifecycleHttpServletResponse) getResponse()).setAsyncWebRequest(this);
}
@ -207,23 +207,25 @@ public class StandardServletAsyncWebRequest extends ServletWebRequest implements @@ -207,23 +207,25 @@ public class StandardServletAsyncWebRequest extends ServletWebRequest implements
private static final class LifecycleHttpServletResponse extends HttpServletResponseWrapper {
@Nullable
private StandardServletAsyncWebRequest parent;
private StandardServletAsyncWebRequest asyncWebRequest;
@Nullable
private ServletOutputStream outputStream;
public LifecycleHttpServletResponse(HttpServletResponse response) {
super(response);
}
public void setParent(StandardServletAsyncWebRequest parent) {
this.parent = parent;
public void setAsyncWebRequest(StandardServletAsyncWebRequest asyncWebRequest) {
this.asyncWebRequest = asyncWebRequest;
}
@Override
public ServletOutputStream getOutputStream() {
if (this.outputStream == null) {
Assert.notNull(this.parent, "Not initialized");
this.outputStream = new LifecycleServletOutputStream((HttpServletResponse) getResponse(), this.parent);
Assert.notNull(this.asyncWebRequest, "Not initialized");
this.outputStream = new LifecycleServletOutputStream(
(HttpServletResponse) getResponse(), this.asyncWebRequest);
}
return this.outputStream;
}
@ -236,13 +238,15 @@ public class StandardServletAsyncWebRequest extends ServletWebRequest implements @@ -236,13 +238,15 @@ public class StandardServletAsyncWebRequest extends ServletWebRequest implements
*/
private static final class LifecycleServletOutputStream extends ServletOutputStream {
private final HttpServletResponse response;
private final HttpServletResponse delegate;
private final StandardServletAsyncWebRequest asyncWebRequest;
private final StandardServletAsyncWebRequest parent;
private LifecycleServletOutputStream(
HttpServletResponse delegate, StandardServletAsyncWebRequest asyncWebRequest) {
private LifecycleServletOutputStream(HttpServletResponse response, StandardServletAsyncWebRequest parent) {
this.response = response;
this.parent = parent;
this.delegate = delegate;
this.asyncWebRequest = asyncWebRequest;
}
@Override
@ -258,7 +262,7 @@ public class StandardServletAsyncWebRequest extends ServletWebRequest implements @@ -258,7 +262,7 @@ public class StandardServletAsyncWebRequest extends ServletWebRequest implements
public void write(int b) throws IOException {
checkState();
try {
this.response.getOutputStream().write(b);
this.delegate.getOutputStream().write(b);
}
catch (IOException ex) {
handleIOException(ex, "ServletOutputStream failed to write");
@ -268,7 +272,7 @@ public class StandardServletAsyncWebRequest extends ServletWebRequest implements @@ -268,7 +272,7 @@ public class StandardServletAsyncWebRequest extends ServletWebRequest implements
public void write(byte[] buf, int offset, int len) throws IOException {
checkState();
try {
this.response.getOutputStream().write(buf, offset, len);
this.delegate.getOutputStream().write(buf, offset, len);
}
catch (IOException ex) {
handleIOException(ex, "ServletOutputStream failed to write");
@ -279,7 +283,7 @@ public class StandardServletAsyncWebRequest extends ServletWebRequest implements @@ -279,7 +283,7 @@ public class StandardServletAsyncWebRequest extends ServletWebRequest implements
public void flush() throws IOException {
checkState();
try {
this.response.getOutputStream().flush();
this.delegate.getOutputStream().flush();
}
catch (IOException ex) {
handleIOException(ex, "ServletOutputStream failed to flush");
@ -290,7 +294,7 @@ public class StandardServletAsyncWebRequest extends ServletWebRequest implements @@ -290,7 +294,7 @@ public class StandardServletAsyncWebRequest extends ServletWebRequest implements
public void close() throws IOException {
checkState();
try {
this.response.getOutputStream().close();
this.delegate.getOutputStream().close();
}
catch (IOException ex) {
handleIOException(ex, "ServletOutputStream failed to close");
@ -298,15 +302,15 @@ public class StandardServletAsyncWebRequest extends ServletWebRequest implements @@ -298,15 +302,15 @@ public class StandardServletAsyncWebRequest extends ServletWebRequest implements
}
private void checkState() throws AsyncRequestNotUsableException {
if (this.parent.state.get() != State.ACTIVE) {
String reason = this.parent.state.get() == State.COMPLETED ?
"async request completion" : "Servlet container onError notification";
throw new AsyncRequestNotUsableException("Response not usable after " + reason + ".");
if (this.asyncWebRequest.state.get() != State.ACTIVE) {
throw new AsyncRequestNotUsableException("Response not usable after " +
(this.asyncWebRequest.state.get() == State.COMPLETED ?
"async request completion" : "onError notification") + ".");
}
}
private void handleIOException(IOException ex, String msg) throws AsyncRequestNotUsableException {
this.parent.transitionToErrorState();
this.asyncWebRequest.transitionToErrorState();
throw new AsyncRequestNotUsableException(msg, ex);
}

Loading…
Cancel
Save