Consistent handling on Servlet non-blocking error callbacks

See gh-26434
This commit is contained in:
Rossen Stoyanchev
2021-03-04 13:57:43 +00:00
parent 42e4ca1e2d
commit 78f65c4ca9

View File

@@ -65,7 +65,7 @@ class ServletServerHttpResponse extends AbstractListenerServerHttpResponse {
private final ServletServerHttpRequest request;
private final AsyncListener asyncListener;
private final ResponseAsyncListener asyncListener;
public ServletServerHttpResponse(HttpServletResponse response, AsyncContext asyncContext,
@@ -243,33 +243,35 @@ class ServletServerHttpResponse extends AbstractListenerServerHttpResponse {
handleError(event.getThrowable());
}
void handleError(Throwable ex) {
ResponseBodyFlushProcessor flushProcessor = bodyFlushProcessor;
if (flushProcessor != null) {
flushProcessor.cancel();
flushProcessor.onError(ex);
}
public void handleError(Throwable ex) {
ResponseBodyProcessor processor = bodyProcessor;
if (processor != null) {
processor.cancel();
processor.onError(ex);
}
else {
ResponseBodyFlushProcessor flushProcessor = bodyFlushProcessor;
if (flushProcessor != null) {
flushProcessor.cancel();
flushProcessor.onError(ex);
}
}
}
@Override
public void onComplete(AsyncEvent event) {
ResponseBodyFlushProcessor flushProcessor = bodyFlushProcessor;
if (flushProcessor != null) {
flushProcessor.cancel();
flushProcessor.onComplete();
}
ResponseBodyProcessor processor = bodyProcessor;
if (processor != null) {
processor.cancel();
processor.onComplete();
}
else {
ResponseBodyFlushProcessor flushProcessor = bodyFlushProcessor;
if (flushProcessor != null) {
flushProcessor.cancel();
flushProcessor.onComplete();
}
}
}
}
@@ -277,7 +279,7 @@ class ServletServerHttpResponse extends AbstractListenerServerHttpResponse {
private class ResponseBodyWriteListener implements WriteListener {
@Override
public void onWritePossible() throws IOException {
public void onWritePossible() {
ResponseBodyProcessor processor = bodyProcessor;
if (processor != null) {
processor.onWritePossible();
@@ -292,18 +294,7 @@ class ServletServerHttpResponse extends AbstractListenerServerHttpResponse {
@Override
public void onError(Throwable ex) {
ResponseBodyProcessor processor = bodyProcessor;
if (processor != null) {
processor.cancel();
processor.onError(ex);
}
else {
ResponseBodyFlushProcessor flushProcessor = bodyFlushProcessor;
if (flushProcessor != null) {
flushProcessor.cancel();
flushProcessor.onError(ex);
}
}
ServletServerHttpResponse.this.asyncListener.handleError(ex);
}
}