Repository: helidon-io/helidon
Issue: NPE in ForwardingHandler


## Environment Details
* Helidon Version: 1.0.1-SNAPSHOT
* Helidon SE or Helidon MP
* JDK version: 1.8
* OS: n/a
* Docker version (if applicable): n/a
----------

## Problem Description

In `channelRead0()` the response completion handler accesses the requestContent field which will normally be `null` unless the response was completed without reading all of the request.
```
bareResponse.whenCompleted()
                        .thenRun(() -> {
                            RequestContext requestContext = this.requestContext;
                            requestContext.responseCompleted(true);  // <<== NPE
```

This field is set to `null` in the same method when handling a `LastHttpContent` message.

## Steps to reproduce

Make any request that reads all of the content before responding.


Changed files:
webserver/webserver/src/main/java/io/helidon/webserver/ForwardingHandler.java

diff --git a/webserver/webserver/src/main/java/io/helidon/webserver/ForwardingHandler.java b/webserver/webserver/src/main/java/io/helidon/webserver/ForwardingHandler.java
index 49510d73d0..b5a4e83e41 100644
--- a/webserver/webserver/src/main/java/io/helidon/webserver/ForwardingHandler.java
+++ b/webserver/webserver/src/main/java/io/helidon/webserver/ForwardingHandler.java
@@ -98,14 +98,16 @@ public class ForwardingHandler extends SimpleChannelInboundHandler<Object> {
             long requestId = REQUEST_ID_GENERATOR.incrementAndGet();
 
             BareRequestImpl bareRequest =
-                    new BareRequestImpl((HttpRequest) msg, requestContext.publisher(), webServer, ctx, sslEngine, requestId);
+                new BareRequestImpl((HttpRequest) msg, requestContext.publisher(), webServer, ctx, sslEngine, requestId);
             BareResponseImpl bareResponse =
-                    new BareResponseImpl(ctx, request, publisherRef::isCompleted, Thread.currentThread(), requestId);
+                new BareResponseImpl(ctx, request, publisherRef::isCompleted, Thread.currentThread(), requestId);
 
             bareResponse.whenCompleted()
                         .thenRun(() -> {
                             RequestContext requestContext = this.requestContext;
-                            requestContext.responseCompleted(true);
+                            if (requestContext != null) {
+                                requestContext.responseCompleted(true);
+                            }
                             /*
                              * Cleanup for these queues is done in HttpInitializer. However,
                              * it may take a while for the event loop on the channel to
@@ -128,7 +130,7 @@ public class ForwardingHandler extends SimpleChannelInboundHandler<Object> {
         if (msg instanceof HttpContent) {
             if (requestContext == null) {
                 throw new IllegalStateException("There is no request context associated with this http content. "
-                                                        + "This is never expected to happen!");
+                                                + "This is never expected to happen!");
             }
 
             HttpContent httpContent = (HttpContent) msg;