Details
-
Improvement
-
Status: Closed
-
Major
-
Resolution: Fixed
-
4.4.6
-
None
Description
As a developer, I would like to allow my HttpAsyncService subclasses to customize the HTTP status code. I propose to refactor the method org.apache.http.nio.protocol.HttpAsyncService.handleException(Exception, HttpContext) like so:
diff --git a/httpcore-nio/src/main/java/org/apache/http/nio/protocol/HttpAsyncService.java b/httpcore-nio/src/main/java/org/apache/http/nio/protocol/HttpAsyncService.java index f941399..789b304 100644 --- a/httpcore-nio/src/main/java/org/apache/http/nio/protocol/HttpAsyncService.java +++ b/httpcore-nio/src/main/java/org/apache/http/nio/protocol/HttpAsyncService.java @@ -614,6 +614,17 @@ protected HttpAsyncResponseProducer handleException( final Exception ex, final HttpContext context) { + String message = ex.getMessage(); + if (message == null) { + message = ex.toString(); + } + final HttpResponse response = this.responseFactory.newHttpResponse(HttpVersion.HTTP_1_1, + toStatusCode(ex, context), context); + return new ErrorResponseProducer(response, + new NStringEntity(message, ContentType.DEFAULT_TEXT), false); + } + + protected int toStatusCode(final Exception ex, final HttpContext context) { final int code; if (ex instanceof MethodNotSupportedException) { code = HttpStatus.SC_NOT_IMPLEMENTED; @@ -624,14 +635,7 @@ } else { code = HttpStatus.SC_INTERNAL_SERVER_ERROR; } - String message = ex.getMessage(); - if (message == null) { - message = ex.toString(); - } - final HttpResponse response = this.responseFactory.newHttpResponse(HttpVersion.HTTP_1_1, - code, context); - return new ErrorResponseProducer(response, - new NStringEntity(message, ContentType.DEFAULT_TEXT), false); + return code; } /**
As in dev/4.4.x/HTTPCORE-468.