11/*
2+ * Copyright (c) 2025 Contributors to the Eclipse Foundation.
23 * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
34 * Copyright 2010 Ning, Inc.
45 *
2627import com .ning .http .client .HttpResponseStatus ;
2728import com .ning .http .client .Response ;
2829
30+ import org .eclipse .jetty .http .HttpCookie ;
31+ import org .eclipse .jetty .http .HttpField ;
32+ import org .eclipse .jetty .http .HttpFields ;
33+ import org .eclipse .jetty .http .HttpHeader ;
34+ import org .eclipse .jetty .http .HttpStatus ;
35+ import org .eclipse .jetty .io .Content ;
36+ import org .eclipse .jetty .server .Handler ;
2937import org .eclipse .jetty .server .ServerConnector ;
3038import org .eclipse .jetty .server .Request ;
3139import org .eclipse .jetty .server .Server ;
32- import org .eclipse .jetty .server . handler . AbstractHandler ;
33- import org .eclipse .jetty .server . handler . HandlerWrapper ;
40+ import org .eclipse .jetty .util . Callback ;
41+ import org .eclipse .jetty .util . Fields ;
3442import org .slf4j .Logger ;
3543import org .slf4j .LoggerFactory ;
3644import org .testng .Assert ;
3745import org .testng .annotations .AfterClass ;
3846import org .testng .annotations .BeforeClass ;
3947
40- import javax .servlet .ServletException ;
41- import javax .servlet .http .HttpServletRequest ;
42- import javax .servlet .http .HttpServletResponse ;
43-
4448import java .io .IOException ;
49+ import java .io .InputStream ;
4550import java .net .ServerSocket ;
46- import java .util .Enumeration ;
51+ import java .util .List ;
4752
4853public abstract class AbstractBasicTest {
4954
@@ -56,33 +61,32 @@ public abstract class AbstractBasicTest {
5661
5762 public final static int TIMEOUT = 30 ;
5863
59- public static class EchoHandler extends HandlerWrapper {
64+ public static class EchoHandler extends Handler . Abstract {
6065
6166 @ Override
62- public void handle (String pathInContext ,
63- Request request ,
64- HttpServletRequest httpRequest ,
65- HttpServletResponse httpResponse ) throws IOException , ServletException {
67+ public boolean handle (org .eclipse .jetty .server .Request request , org .eclipse .jetty .server .Response response ,
68+ Callback callback ) throws Exception {
69+
70+ final HttpFields requestHeaders = request .getHeaders ();
71+ final HttpFields .Mutable responseHeaders = response .getHeaders ();
6672
67- if (httpRequest . getHeader ("X-HEAD" ) != null ) {
68- httpResponse . setContentLength ( 1 );
73+ if (requestHeaders . get ("X-HEAD" ) != null ) {
74+ responseHeaders . put ( HttpHeader . CONTENT_LENGTH , 1L );
6975 }
7076
71- if (httpRequest . getHeader ("X-ISO" ) != null ) {
72- httpResponse . setContentType ( "text/html; charset=ISO-8859-1" );
77+ if (requestHeaders . get ("X-ISO" ) != null ) {
78+ responseHeaders . put ( HttpHeader . CONTENT_TYPE , "text/html; charset=ISO-8859-1" );
7379 } else {
74- httpResponse . setContentType ( TEXT_HTML_CONTENT_TYPE_WITH_UTF_8_CHARSET );
80+ responseHeaders . put ( HttpHeader . CONTENT_TYPE , TEXT_HTML_CONTENT_TYPE_WITH_UTF_8_CHARSET );
7581 }
7682
7783 if (request .getMethod ().equalsIgnoreCase ("OPTIONS" )) {
78- httpResponse . addHeader ( "Allow" , "GET,HEAD,POST,OPTIONS,TRACE" );
79- };
84+ responseHeaders . put ( HttpHeader . ALLOW , "GET,HEAD,POST,OPTIONS,TRACE" );
85+ }
8086
81- Enumeration <?> e = httpRequest .getHeaderNames ();
8287 String param ;
83- while (e .hasMoreElements ()) {
84- param = e .nextElement ().toString ();
85-
88+ for (final HttpField httpField : requestHeaders ) {
89+ param = httpField .getName ();
8690 if (param .startsWith ("LockThread" )) {
8791 try {
8892 Thread .sleep (40 * 1000 );
@@ -91,65 +95,67 @@ public void handle(String pathInContext,
9195 }
9296
9397 if (param .startsWith ("X-redirect" )) {
94- httpResponse .sendRedirect (httpRequest .getHeader ("X-redirect" ));
95- return ;
98+ org .eclipse .jetty .server .Response .sendRedirect (request , response , callback , httpField .getValue ());
99+ callback .succeeded ();
100+ return true ;
96101 }
97102 if (param .startsWith ("Y-" )) {
98- httpResponse . addHeader (param .substring (2 ), httpRequest . getHeader ( param ));
103+ responseHeaders . put (param .substring (2 ), httpField . getValue ( ));
99104 } else {
100- httpResponse . addHeader ("X-" + param , httpRequest . getHeader ( param ));
105+ responseHeaders . put ("X-" + param , httpField . getValue ( ));
101106 }
102107 }
103108
104- Enumeration <?> i = httpRequest .getParameterNames ();
105-
106- StringBuilder requestBody = new StringBuilder ();
107- while (i .hasMoreElements ()) {
108- param = i .nextElement ().toString ();
109- httpResponse .addHeader ("X-" + param , httpRequest .getParameter (param ));
109+ final StringBuilder requestBody = new StringBuilder ();
110+ final Fields allParameters = Request .getParameters (request );
111+ for (final Fields .Field field : allParameters ) {
112+ param = field .getName ();
113+ responseHeaders .put ("X-" + param , field .getValue ());
110114 requestBody .append (param );
111115 requestBody .append ("_" );
112116 }
113117
114- String pathInfo = httpRequest . getPathInfo ( );
118+ final String pathInfo = Request . getPathInContext ( request );
115119 if (pathInfo != null )
116- httpResponse . addHeader ("X-pathInfo" , pathInfo );
120+ responseHeaders . put ("X-pathInfo" , pathInfo );
117121
118- String queryString = httpRequest . getQueryString ();
122+ final String queryString = request . getHttpURI (). getQuery ();
119123 if (queryString != null )
120- httpResponse . addHeader ("X-queryString" , queryString );
124+ responseHeaders . put ("X-queryString" , queryString );
121125
122- httpResponse . addHeader ("X-KEEP-ALIVE" , httpRequest .getRemoteAddr () + ":" + httpRequest .getRemotePort ());
126+ responseHeaders . put ("X-KEEP-ALIVE" , Request .getRemoteAddr (request ) + ":" + Request .getRemotePort (request ));
123127
124- javax .servlet .http .Cookie [] cs = httpRequest .getCookies ();
125- if (cs != null ) {
126- for (javax .servlet .http .Cookie c : cs ) {
127- httpResponse .addCookie (c );
128- }
128+ final List <HttpCookie > cookies = Request .getCookies (request );
129+ for (final HttpCookie cookie : cookies ) {
130+ org .eclipse .jetty .server .Response .addCookie (response , cookie );
129131 }
130132
131133 if (requestBody .length () > 0 ) {
132- httpResponse . getOutputStream ( ).write (requestBody .toString ().getBytes ());
134+ Content . Sink . asOutputStream ( response ).write (requestBody .toString ().getBytes ());
133135 }
134136
135137 int size = 16384 ;
136- if (httpRequest . getContentLength () > 0 ) {
137- size = httpRequest . getContentLength ();
138+ if (request . getLength () > 0 ) {
139+ size = ( int ) request . getLength ();
138140 }
139141 byte [] bytes = new byte [size ];
140142 if (bytes .length > 0 ) {
141143 int read = 0 ;
142- while (read > -1 ) {
143- read = httpRequest .getInputStream ().read (bytes );
144- if (read > 0 ) {
145- httpResponse .getOutputStream ().write (bytes , 0 , read );
144+ try (final InputStream in = Content .Source .asInputStream (request )) {
145+ while (read > -1 ) {
146+ read = in .read (bytes );
147+ if (read > 0 ) {
148+ Content .Sink .asOutputStream (response ).write (bytes , 0 , read );
149+ }
146150 }
147151 }
148152 }
149153
150- httpResponse .setStatus (200 );
151- httpResponse .getOutputStream ().flush ();
152- httpResponse .getOutputStream ().close ();
154+ response .setStatus (HttpStatus .OK_200 );
155+ Content .Sink .asOutputStream (response ).flush ();
156+ Content .Sink .asOutputStream (response ).close ();
157+ callback .succeeded ();
158+ return true ;
153159 }
154160 }
155161
@@ -173,7 +179,7 @@ protected String getTargetUrl2() {
173179 return String .format ("https://127.0.0.1:%d/foo/test" , port2 );
174180 }
175181
176- public AbstractHandler configureHandler () throws Exception {
182+ public Handler . Abstract configureHandler () throws Exception {
177183 return new EchoHandler ();
178184 }
179185
0 commit comments