Uploaded image for project: 'HttpComponents HttpCore'
  1. HttpComponents HttpCore
  2. HTTPCORE-468

Allow HttpAsyncService subclasses to customize the HTTP status code

VotersWatch issueWatchersLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

    Details

    • Type: Improvement
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 4.4.6
    • Fix Version/s: 4.4.7, 5.0-alpha4
    • Component/s: HttpCore NIO
    • Labels:
      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.

        Attachments

          Activity

            People

            • Assignee:
              ggregory Gary D. Gregory
              Reporter:
              ggregory Gary D. Gregory

              Dates

              • Created:
                Updated:
                Resolved:

                Issue deployment