[ https://issues.apache.org/jira/browse/HTTPCLIENT-1170?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Aniceto Pérez y Madrid reopened HTTPCLIENT-1170: ------------------------------------------------ The problem is not the serializing or deserializing an object. The problem is servlet is sending 30KB of binary data and httpclient only receives 17KB. With less than 14KB it works fine. But a browser receives the full content. So I say there is a bug. When the servlet says length 30830, I get this from the client log readline4096 van 4096 sz 30830 readline4096 van 8192 sz 30830 readline653 van 8845 sz 30830 readline4096 van 12941 sz 30830 readline4096 van 17037 sz 30830 readline808 van 17845 sz 30830 and here it gets stuck because no more bytes are available from the inputStream. Thanks > 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: dev-unsubscr...@hc.apache.org For additional commands, e-mail: dev-h...@hc.apache.org