Hi Team, We are currently trying to implement Apache HTTP Async Client API for handling HTTP 1.1 and HTTP 2.0 request (Using Servlet request and response). We have implemented classes using *AbstractClassicEntityConsumer* and *AbstractClassicEntityProducer* (as suggested in 5.2 migration guide) which generates request / consumes response into byte array. This results in all request being sent to web server (IIS / Apache) using *chuncked* encoding eventhough we don’t explicitly set it in request headers. Is this expected? Also we are seeing another issue wherein when using POST request the data in body is not sent to backend server which is causing in loss of the data. Is this behavior due to usage of byte array of response data. Tried to replace byte array in consumeData with different options like returning InputStream etc., but execute method is showing error. Is this usage valid or any other way to achieve POST using Async using Servlet streams (Request and Response)?
*Sample of what being defined in produceData and consumeData abstract methods are below* @Override protected void produceData(ContentType contentType, OutputStream outputStream) throws IOException { if (content != null) { byte[] buf = new byte[4096]; int length; while ((length = content.read(buf)) != -1) { outputStream.write(buf, 0, length); } } else { throw new IllegalStateException("Content must be set before entity is written"); } } @Override protected byte[] consumeData(ContentType contentType, InputStream instream) throws IOException { ByteArrayOutputStream buffer = new ByteArrayOutputStream(); byte[] data = new byte[4096]; int read; while ((read = instream.read(data, 0, data.length)) != -1) { buffer.write(data, 0, read); } buffer.flush(); return buffer.toByteArray(); } *Our HTTPClient method execute looks something below* Future<Message<HttpResponse, byte[]>> responseHandler = httpAsyncClient.execute(reqBuilder.build(), new BasicResponseConsumer<>(new AsyncResponseEntity<byte[]>()), null, HttpClientContext.create(), null); *AsyncRequestBuilder setEntity* method is set with new object created using implementation class extending *AbstractClassicEntityProducer* HTTPClient log extract 2023-02-08 10:52:46,728 DEBUG [org.apache.hc.client5.http.headers] c-0000000000 >> connection: Keep-Alive 2023-02-08 10:52:46,728 DEBUG [org.apache.hc.client5.http.headers] c-0000000000 >> Accept-Language: en-US 2023-02-08 10:52:46,728 DEBUG [org.apache.hc.client5.http.headers] c-0000000000 >> Accept-Encoding: gzip, deflate 2023-02-08 10:52:46,728 DEBUG [org.apache.hc.client5.http.headers] c-0000000000 >> user-agent: Mozilla/5.0 (Windows NT 6.1; rv:38.0) Gecko/20100101 Firefox/38.0 2023-02-08 10:52:46,728 DEBUG [org.apache.hc.client5.http.headers] c-0000000000 >> accept: */* 2023-02-08 10:52:46,728 DEBUG [org.apache.hc.client5.http.headers] c-0000000000 >> Transfer-Encoding: chunked 2023-02-08 10:52:46,728 DEBUG [org.apache.hc.client5.http.headers] c-0000000000 >> Host: server -- Regards, S. Sreenivas