[ 
https://issues.apache.org/jira/browse/HTTPCLIENT-1170?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Oleg Kalnichevski resolved HTTPCLIENT-1170.
-------------------------------------------

    Resolution: Invalid

Unfortunately just your saying is not enough. If there is no more bytes 
available in the input stream the most likely explanation is that the server is 
simply is not sending any.

(1) Please remove your custom code and change your code to use a standard route 
to consume response content such as those provided HttpUtils. Once you get it 
to work you can change your application code to use whatever custom routine you 
see fit.
(2) Please provide a _complete_ wire / context log of the session [1]. 

If you re-open this issue without providing sufficient evidence the alleged 
bug, I'll close it without giving any additional explanations.

Oleg

[1] http://hc.apache.org/httpcomponents-client-ga/logging.html
                
> 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