Replace close method with Undertow exchange listener

The Undertow HttpServerExchange has a complete listener which we can
use instead of the close() method UndertowServerHttpRequest.
This commit is contained in:
Rossen Stoyanchev 2016-12-14 13:48:40 -05:00
parent 8d786e8bba
commit d3e05296e1
2 changed files with 6 additions and 7 deletions

View File

@ -76,13 +76,11 @@ public class UndertowHttpHandlerAdapter extends HttpHandlerAdapterSupport
if (!exchange.isResponseStarted() && exchange.getStatusCode() <= 500) {
exchange.setStatusCode(500);
}
request.close();
exchange.endExchange();
}
@Override
public void onComplete() {
logger.debug("Successfully completed request");
request.close();
exchange.endExchange();
}
});

View File

@ -58,7 +58,7 @@ public class UndertowServerHttpRequest extends AbstractServerHttpRequest {
super(initUri(exchange), initHeaders(exchange));
this.exchange = exchange;
this.body = new RequestBodyPublisher(exchange, dataBufferFactory);
this.body.registerListener();
this.body.registerListener(exchange);
}
private static URI initUri(HttpServerExchange exchange) {
@ -107,9 +107,6 @@ public class UndertowServerHttpRequest extends AbstractServerHttpRequest {
return Flux.from(this.body);
}
void close() {
this.body.onAllDataRead();
}
private static class RequestBodyPublisher extends AbstractListenerReadPublisher<DataBuffer> {
@ -134,7 +131,11 @@ public class UndertowServerHttpRequest extends AbstractServerHttpRequest {
this.dataBufferFactory = dataBufferFactory;
}
private void registerListener() {
private void registerListener(HttpServerExchange exchange) {
exchange.addExchangeCompleteListener((ex, next) -> {
onAllDataRead();
next.proceed();
});
this.requestChannel.getReadSetter().set(this.readListener);
this.requestChannel.getCloseSetter().set(this.closeListener);
this.requestChannel.resumeReads();