@Override
    public void close(CompletionHandler completionHandler) {
        byte[] requestContentBytes = accumulatedRequestContent.toByteArray();
        String content = new String(requestContentBytes, contentCharset);
        Map<String, List<String>> parameterMap;
        try {
            parameterMap = parseFormParameters(content);
        } catch (IllegalArgumentException e) {
            // Log for now until this is solved properly
            log.log(Level.INFO, "Failed to parse form parameters: %s".formatted(e.getMessage()));
            completionHandler.failed(new RequestException(BAD_REQUEST, "Failed to parse form parameters", e));
            return;
        }
        mergeParameters(parameterMap, request.parameters());
        ContentChannel contentChannel = null;
        try {
            contentChannel = delegateHandler.handleRequest(request, responseHandler);
        } catch (Throwable t) {
            completionHandler.failed(t);
            return;
        }
        if (contentChannel != null) {
            if (!removeBody) {
                ByteBuffer byteBuffer = ByteBuffer.wrap(requestContentBytes);
                contentChannel.write(byteBuffer, CompletionHandlers.noop());
            }
            contentChannel.close(CompletionHandlers.noop());
        }
        completionHandler.completed();
    }
@param delegateHandler the "real" request handler that this handler wraps
@param contentCharsetName name of the charset to use when interpreting the content data
container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/FormPostRequestHandler.java