com.linkedin.flashback.smartproxy.utils.NoMatchResponseGenerator.java Source code

Java tutorial

Introduction

Here is the source code for com.linkedin.flashback.smartproxy.utils.NoMatchResponseGenerator.java

Source

/*
 * Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license.
 * See LICENSE in the project root for license information.
 */

package com.linkedin.flashback.smartproxy.utils;

import com.linkedin.flashback.serializable.RecordedEncodedHttpBody;
import com.linkedin.flashback.serializable.RecordedHttpBody;
import com.linkedin.flashback.serializable.RecordedHttpRequest;
import com.linkedin.flashback.serializable.RecordedStringHttpBody;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.http.DefaultFullHttpResponse;
import io.netty.handler.codec.http.FullHttpResponse;
import io.netty.handler.codec.http.HttpResponseStatus;
import io.netty.handler.codec.http.HttpVersion;
import java.nio.charset.Charset;

/**
 * Util class to generate response to indicate request has no match in the scene
 */
public class NoMatchResponseGenerator {
    /*
     * Builds the 400/Bad Request response to return when there is no matching request
     */
    public static FullHttpResponse generateNoMatchResponse(RecordedHttpRequest recordedHttpRequest) {
        StringBuilder bodyTextBuilder = new StringBuilder();
        bodyTextBuilder.append("No Matching Request\n").append("Incoming Request Method: ")
                .append(recordedHttpRequest.getMethod()).append("\n").append("Incoming Request URI: ")
                .append(recordedHttpRequest.getUri()).append("\n").append("Incoming Request Headers: ")
                .append(recordedHttpRequest.getHeaders()).append("\n");
        RecordedHttpBody incomingBody = recordedHttpRequest.getHttpBody();
        if (incomingBody != null) {
            if (incomingBody instanceof RecordedEncodedHttpBody) {
                incomingBody = ((RecordedEncodedHttpBody) incomingBody).getDecodedBody();
            }
            if (incomingBody instanceof RecordedStringHttpBody) {
                bodyTextBuilder.append("Incoming Request Body: ")
                        .append(((RecordedStringHttpBody) incomingBody).getContent());
            } else {
                bodyTextBuilder.append("Incoming Request Body: (binary content)");
            }
        }
        ByteBuf badRequestBody = Unpooled
                .wrappedBuffer(bodyTextBuilder.toString().getBytes(Charset.forName("UTF-8")));
        return new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.BAD_REQUEST, badRequestBody);
    }

    private NoMatchResponseGenerator() {
    }
}