Incomplete data received from servlet
-------------------------------------

                 Key: HTTPCLIENT-1170
                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1170
             Project: HttpComponents HttpClient
          Issue Type: Bug
          Components: HttpClient
    Affects Versions: 4.1.3
         Environment: java 1.7.0_0, Windows 7 x 64, Apache 7.0.22, connections 
are made throug http://localhost
            Reporter: Aniceto Pérez y Madrid
            Priority: Blocker


Hi
I have this servlet that generates on the fly a binary response by serializing 
an object. buf size is about 30 KB. I've been using this code to serve files 
for a long time. If I access that servlet using any web browser, the received 
file is OK.
                        byte[] buf = respObject.stringBinSerialize();
                        response.setContentLength(buf.length);
                        response.setContentType("binary/octet-stream");
                        response.setStatus(HttpServletResponse.SC_OK);
                        OutputStream out = response.getOutputStream();
                        out.write(buf);
                        out.flush();

Now I have this client code and it doesn't receive the full response. 
                byte[] completo = new byte[0], temporal;
                byte[] cbuf = new byte[4096];
                int cuenta = 0, esta = 0;
                HttpParams params = new SyncBasicHttpParams();
                HttpConnectionParams.setSocketBufferSize(params, 64000);
                HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
                HttpClient httpclient = new DefaultHttpClient(params);
                try {
                    HttpPost httpost = new HttpPost(targetURLinclServletName);
                    HttpGet httpget = new 
HttpGet("http://localhost:8080/myservlet";);
                    HttpResponse response = httpclient.execute(httpget);
                    HttpEntity entity = response.getEntity();
                    if (entity != null) {
                        System.out.println("ent sz " + 
entity.getContentLength() + " chk " + entity.isChunked() + " is rept " + 
entity.isRepeatable() + "  str " + entity.isStreaming());
//                        completo = EntityUtils.toByteArray(entity);
                        System.out.println("bytearrayed " + completo.length);
                        InputStream instream = entity.getContent();
                        while (completo.length != entity.getContentLength() && 
(esta = instream.read(cbuf)) != -1) {
                            if (selector.equals(RPCdefs.SELECTOR_PROYLIST) || 
true) {
                                cuenta += esta;
                                System.out.println("readline" + esta + "  van " 
+ cuenta);
                                System.out.println("sz " + 
entity.getContentLength());
                            }
                            temporal = new byte[completo.length + esta];
                            System.arraycopy(completo, 0, temporal, 0, 
completo.length);
                            System.arraycopy(cbuf, 0, temporal, 
completo.length, esta);
                            completo = temporal;
                            temporal = null;
                        }
                    }
                    EntityUtils.consume(entity);
                } finally {
                    httpclient.getConnectionManager().shutdown();
                }
The simplest way to receive is  EntityUtils.toByteArray(entity), but it gets 
hung. The loop for partial copy is to know how may bytes are received. They are 
about 17845. The initial params were added to check if the issue was related to 
flow control, but with 64 KB buffers it doesn't changes anything. 

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to