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

Allow HttpAsyncService subclasses to customize the HTTP status code

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 4.4.6
    • 4.4.7, 5.0-alpha4
    • HttpCore NIO
    • 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

            ggregory Gary D. Gregory
            ggregory Gary D. Gregory
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: