Обновление причала с 8.1.x до 9.4.x — класс HttpExchange не найден

#java #migration #jetty

Вопрос:

Я пытаюсь обновить версию jetty с 8.1.13 до 9.4.43. Поскольку это серьезное обновление, класс HttpExchange был сильно изменен. Многие методы HttpExchange устарели, и мне трудно найти альтернативу этим методам.

   HttpExchange exchange = new HttpExchange() {
            protected void onRequestCommitted() throws IOException {
            }

            protected void onRequestComplete() throws IOException {
            }

            protected void onResponseComplete() throws IOException {
            }

            protected void onResponseContent(Buffer content) throws IOException {
                content.writeTo(out);
            }

            protected void onResponseHeaderComplete() throws IOException {
            }

            protected void onResponseStatus(Buffer version, int status, Buffer reason) throws IOException {
            }

            protected void onResponseHeader(Buffer name, Buffer value) throws IOException {
                
            }

            protected void onConnectionFailed(Throwable ex) {
                onException(ex);
            }

            protected void onException(Throwable ex) {
                
            }

            protected void onExpire() {
                onException(new SocketTimeoutException());
            }

        };

        exchange.setScheme(HttpSchemes.HTTPS.equals(request.getScheme()) ? HttpSchemes.HTTPS_BUFFER
                : HttpSchemes.HTTP_BUFFER);
        exchange.setMethod(request.getMethod());
        exchange.setURL(url.toString());
        exchange.setVersion(request.getProtocol());
        exchange.setRequestHeader("Host", _hostHeader);
         
        exchange.setRequestHeader("Via", request.getProtocol()   " "   host   " ("   getClass().getSimpleName()   ")");
        if (!xForwardedFor) {
            exchange.addRequestHeader("X-Forwarded-For", request.getRemoteAddr());
            exchange.addRequestHeader("X-Forwarded-Proto", scheme);
            exchange.addRequestHeader("X-Forwarded-Host", host);
            exchange.addRequestHeader("X-Forwarded-Server", request.getLocalName());
            exchange.addRequestHeader(HttpServer.PROXY_URI_HEADER, from.toString());
        }
 

Каковы альтернативы всем методам «обмена» объектом?

Комментарии:

1. На самом деле, обновление с Jetty 8.1.x до 9.4.x отличается от 5 основных версий. (Напоминание: Версия Jetty с 1995 <servlet_support>.<major_version>.<minor_version> года ). Этот класс значительно эволюционировал с течением времени и сократился примерно до Jetty 9.1.x. Пожалуйста, отредактируйте свой вопрос и укажите, что вам нужно сделать, и мы сможем ответить более четко. (Также обратите внимание, что HttpExchange в какой-то момент это был как класс сервера, так и класс клиента, и ваш вопрос не указывает, какой из них вы хотите использовать)

2. Там также есть намеки на то, что вы управляете прокси-сервером, с которым лучше ProxyServlet всего обращаться AsyncProxyServlet , или, если вам нужно возиться с содержимым, то AsyncMiddleManServlet . Просто расширьте один из них и внесите необходимые изменения.

3. Кроме того, X-Forwarded-* заголовки являются устаревшими и нестандартными, пожалуйста, используйте официальный Forwarded заголовок спецификации, который определен по адресу datatracker.ietf.org/doc/html/rfc7239 (который также поддерживает причал)

4. спасибо @JoakimErdfelt