public void _execute() {
        log.trace("Received request {0}", vertxRequest.absoluteURI()); //$NON-NLS-1$

        // First, pause the request to avoid losing any data
        vertxRequest.pause();

        // Transform Vert.x request object into apiman's intermediate representation.
        ApiRequest request = HttpApiFactory.buildRequest(vertxRequest, isTls);

        // Exception
        vertxRequest.exceptionHandler(ex -> {
            handleError(request, ex, vertxResponse);
        }); // TODO: Should probably log error also.

        // Set up executor to run conversation through apiman's policy engine.
        IApiRequestExecutor executor = engine.executor(request, result -> {
            if (result.isSuccess()) {
                handleEngineResult(request, result.getResult());
            } else {
                // An unexpected problem occurred somewhere.
                handleError(request, result.getError(), vertxResponse);
            }
        });

        // Write data into executor. Called when ready.
        executor.streamHandler(writeStream -> {
            vertxRequest.handler(bufferChunk -> {
                // Apply back-pressure.
                if (writeStream.isFull()) {
                    vertxRequest.pause();
                }
                // Wrap Vert.x buffer into apiman's buffer IR, then write into engine.
                writeStream.write(new VertxApimanBuffer(bufferChunk));
            });

            // Called when back-pressure has reduced sufficiently to resume.
            writeStream.drainHandler(onDrain -> vertxRequest.resume());

            vertxRequest.endHandler(end -> writeStream.end());

            // Now safe to resume body transmission.
            vertxRequest.resume();
        });

        // Actually execute
        executor.execute();
    }
@author Marc Savy {@literal <msavy@redhat.com>}
gateway/platforms/vertx3/vertx3/src/main/java/io/apiman/gateway/platforms/vertx3/http/HttpPolicyAdapter.java