import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpServer;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.util.concurrent.Executors;

public class FailsParseHeaders {

    public static void main(final String[] args) throws IOException {
        final HttpServer server = HttpServer.create();
        final InetSocketAddress address = new InetSocketAddress("localhost", 8080);
        server.setExecutor(Executors.newCachedThreadPool());
        server.bind(address, 0);

        // register routes
        server.createContext(
                "/ping",
                exchange -> {
                    exchange.sendResponseHeaders(204, 0);
                    exchange.getResponseBody().close();
                });
        server.createContext(
                "/echo",
                exchange -> {
                    final int length =
                            exchange.getRequestHeaders().get("content-length").stream()
                                    .findFirst()
                                    .map(Integer::parseInt)
                                    .orElse(0);
                    if (length > 0) {
                        exchange.sendResponseHeaders(200, length);
                        try (InputStream request = exchange.getRequestBody();
                             OutputStream response = exchange.getResponseBody()) {
                            byte[] buffer = new byte[1024];
                            int read;
                            while ((read = request.read(buffer, 0, buffer.length)) >= 0) {
                                response.write(buffer, 0, read);
                            }
                        }
                    } else {
                        discardInputStream(exchange);
                        exchange.sendResponseHeaders(204, 0);
                    }
                });

        server.start();
    }

    static void discardInputStream(final HttpExchange exchange) throws IOException {
        try (InputStream body = exchange.getRequestBody()) {
            while (body.read() >= 0) {}
        }
    }
}