Hi All, I have been trying to solve the below issue that show up in logs and unable to solve it from 2 weeks:
04/25/2017 15:37:30:513 FINEST: Invoking post method: https://localhost/localTomcat8_Rendezvous/comm/sendPayload [Thread-23: Downloader for default channel (C:\Program Files\Apache Software Foundation\Tomcat 8.5\Instance1\webapps\localTomcat8_Rendezvous\common), com.novoInnovations.network.protocol.Connection:sendRequest] 04/25/2017 15:22:33:677 WARNING: Could not get payload from localTomcat8_Rendezvous located at the path localhost/localTomcat8_Rendezvous/comm [Thread-23: Downloader for default channel (C:\Program Files\Apache Software Foundation\Tomcat 8.5\Instance1\webapps\localTomcat8_Rendezvous\common), com.novoInnovations.network.protocol.N2RProtocol:recvPayload] localhost:443 failed to respond org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:143) org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:57) org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259) org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:163) org.apache.http.impl.conn.CPoolProxy.receiveResponseHeader(CPoolProxy.java:167) org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:273) org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125) org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:271) org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184) org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88) org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110) org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184) org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:107) com.novoInnovations.network.protocol.Connection.sendRequest(Connection.java:329) com.novoInnovations.network.protocol.N2RProtocol.recvPayload(N2RProtocol.java:137) com.novoInnovations.network.node.Downloader.getFromRendezvous(Downloader.java:411) com.novoInnovations.network.node.Downloader.run(Downloader.java:141) the next failure is at 15:22:53:743 , 15:23:13:853, .. so on The code is below (commented out are the many other ways that i tried to solve the issue...), this code is called every 20 secs by a thread, the target is a url and 443 port since it is https , it works the first time .. the post methid has this url set : https://localhost/localTomcat8_Rendezvous/comm/sendPayload as postMethod = new HttpPost(this.url); Main function : public String sendRequest(Object obj) throws Exception { // temporary output stream to stream objects into ByteArrayOutputStream baos = new ByteArrayOutputStream(); oos = new ObjectOutputStream(baos); if (isValid) { myNovoLogger.finest("Writing node communicator version: " + VERSION); oos.writeObject(VERSION); myNovoLogger.finest("Writing node id: " + this.node.id()); oos.writeObject(this.node.id()); myNovoLogger.finest("Writing node's state"); oos.writeObject(this.state); myNovoLogger.finest("Writing communication channel: " + this.getCommunicationChannel()); oos.writeObject(Integer.toString(this.getCommunicationChannel())); if (obj != null) { myNovoLogger.finest("Streaming provided object."); oos.writeObject(obj); } // create an input stream out of the stream // we put objects into /* InputStream tis = new ByteArrayInputStream(baos.toByteArray()); /// take the created inputstream and make this the method's bidy InputStreamEntity inputStreamEntity = new InputStreamEntity(tis); HttpEntity httpEntity = new InputStreamEntity(tis, tis.available()); //ISSUE in uploading is from here postMethod.setEntity(inputStreamEntity);*/ InputStreamEntity temp = new InputStreamEntity(new ByteArrayInputStream(baos.toByteArray())); postMethod.setEntity(temp); //postMethod.setRequestBody(tis); RequestConfig config = RequestConfig.custom() .setConnectTimeout(20 * 1000) .setConnectionRequestTimeout(10* 60 * 1000) .setStaleConnectionCheckEnabled(true) .setSocketTimeout(10 * 60 * 1000).build(); myNovoLogger.finest("Invoking post method: " + postMethod.getURI().toString()); // execute method on server PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(); connManager.setValidateAfterInactivity(200); ConnectionConfig connectionConfig = ConnectionConfig.custom() .setBufferSize(1000) .build(); // HttpClientBuilder clientBuilder = HttpClients.custom(); // clientBuilder.setRetryHandler(new DefaultHttpRequestRetryHandler(3, false)); // HttpClient client = clientBuilder.setDefaultConnectionConfig(connectionConfig).build(); //HttpHost targetHost = new HttpHost(url, 443, "https"); //CloseableHttpResponse response = client1.execute(targetHost, postMethod); this.response = client.execute(postMethod); //====> line 329 String responseLine = null; /* HttpHost targetHost = new HttpHost(this.url); this.response = client.execute(targetHost, postMethod);*/ int rc =0; try { HttpEntity entity = response.getEntity(); if (entity != null) { entity = new BufferedHttpEntity(entity); } if (entity != null) { ObjectInputStream instream = new ObjectInputStream(entity.getContent()); try { myNovoLogger.finest("Getting response code."); myNovoLogger.finest("Got response:" + response.getStatusLine()); rc = response.getStatusLine().getStatusCode(); if (rc > 200) { myNovoLogger.warning("Response of " + rc); myNovoLogger.warning("ResponseBody:" + response.getStatusLine().getReasonPhrase()); } myNovoLogger.finest("Getting input stream."); //ois = new ObjectInputStream(entity.getContent()); //ois = new ObjectInputStream(postMethod.getResponseBodyAsStream()); myNovoLogger.finest("Done sending request."); if(instream != null) { myNovoLogger.finest("responseLine instream"+ EntityUtils.toString(entity)); responseLine = (String) instream.readObject(); setResponseLine(responseLine); if (Protocol.ACK.equals(responseLine)) { Object o = instream.readObject(); setPayload((Payload) o); } Object o2 = instream.readObject(); setDiscardList((HashMap) o2); //EntityUtils.consume(response.getEntity()); } } finally { myNovoLogger.finest("closing instream"); if(instream != null) { myNovoLogger.finest("closing instream"); instream.close(); myNovoLogger.finest("after closing instream"); } this.client.close(); isValid = false; connManager.close(); } } } finally { myNovoLogger.finest("Attempt to send request "+rc); return responseLine; } (Additional info : It works the first call then it fails consecutively...we are upgrading from client 3.2 to 4.5 , have included both core and client in the tomcat load path) Can some one find any problem , any inputs are welcome. I am new to httpclient coding. Thanks Hassan On Sat, Apr 22, 2017 at 9:35 PM, Hassan Khan <[email protected]> wrote: > Hi Oleg, > > Thanks for answering ... very excited (and humbled) to hear from you... > > Thanks > Hassan > > On Sat, Apr 22, 2017 at 12:26 PM, Oleg Kalnichevski <[email protected]> > wrote: > >> On Fri, 2017-04-21 at 10:21 -0400, Hassan Khan wrote: >> > Hi all, >> > >> > We have pinpointed the issue and looks like the code that deals >> > with >> > streaming a object from the client to the server. >> > With the old code (Httpclient 3.1) we would stream the object >> > through a >> > ObjectOutputStream and on the server side read it through a >> > ObjectInputStream. >> > But looks like that workflow is not working in the new httpclient >> > 4.5. >> > Is there any example or resource that specifically shows how >> > streaming >> > objects work ? >> > >> >> See this section of the tutorial >> >> http://hc.apache.org/httpcomponents-client-4.5.x/tutorial/html/fundamen >> tals.html#d5e95 >> <http://hc.apache.org/httpcomponents-client-4.5.x/tutorial/html/fundamentals.html#d5e95> >> >> >> What you most likely want is SerializableEntity >> >> http://hc.apache.org/httpcomponents-core-4.4.x/httpcore/apidocs/org/apa >> che/http/entity/SerializableEntity.html >> <http://hc.apache.org/httpcomponents-core-4.4.x/httpcore/apidocs/org/apache/http/entity/SerializableEntity.html> >> >> Oleg >> >> >> > Thanks >> > Hassan >> > >> > On Tue, Apr 18, 2017 at 9:27 AM, Hassan Khan <[email protected] >> > > >> > wrote: >> > >> > > Hi , >> > > >> > > Sorry the log images was filtered out. you can look at the uploaded >> > > image. >> > > >> > > http://imgur.com/a/Nxpcw >> > > >> > > in text the logs say: I/O read timed out. >> > > >> > > Thanks >> > > Hassan >> > > >> > > On Mon, Apr 17, 2017 at 1:35 PM, Gary Gregory <[email protected] >> > > om> >> > > wrote: >> > > >> > > > Hassan, >> > > > >> > > > Your attachments were filtered out. You might want to try an >> > > > image sharing >> > > > site. >> > > > >> > > > Gary >> > > > >> > > > On Mon, Apr 17, 2017 at 6:16 AM, Hassan Khan <hassankhan986@gmail >> > > > .com> >> > > > wrote: >> > > > >> > > > > + >> > > > > > >> > > > > >> > > > > >> > > > > > Hi All, >> > > > > > >> > > > > > >> > > > > > >> > > > > > We are upgrading the httpclient in our software from 3.1 >> > > > > > to 4.5 (we >> > > > > > are adding both core and client). But we are having some >> > > > > > issues in the >> > > > > > client and server communications. We are using the below >> > > > > > client code >> > > > > > (simplified the code ) to make a call every 60 secs and we >> > > > > > are getting >> > > > > > localhost not responding after few tries. >> > > > > > >> > > > > > Client code simplified is : >> > > > > > >> > > > > > RequestConfig config = RequestConfig.*custom*() >> > > > > > >> > > > > > .setConnectTimeout(20 * 1000) >> > > > > > >> > > > > > .setConnectionRequestTimeout(10* 60 * 1000) >> > > > > > >> > > > > > .*setStaleConnectionCheckEnabled**(**true**)* >> > > > > > >> > > > > > .setSocketTimeout(10 * 60 * 1000).build(); >> > > > > > >> > > > > > *this*.client = >> > > > > > HttpClients.*custom*().setDefaultRequestConfig(config >> > > > > > ).build(); >> > > > > > >> > > > > > HttpResponse response = client.execute(postMethod); >> > > > > > >> > > > > > *int* rc = response.getStatusLine().getStatusCode(); >> > > > > > >> > > > > > *if* (rc > 200) { >> > > > > > >> > > > > > log error >> > > > > > >> > > > > > } >> > > > > > >> > > > > > //using the object stream to read data.. >> > > > > > >> > > > > > ois = *new* >> > > > > > ObjectInputStream(response.getEntity().getContent()); >> > > > > > >> > > > > > //at the end we close it >> > > > > > >> > > > > > postMethod.releaseConnection(); >> > > > > > >> > > > > > >> > > > > > >> > > > > > But still we are getting the following issue: >> > > > > > >> > > > > > >> > > > > > [image: cid:[email protected]] >> > > > > > >> > > > > > >> > > > > > >> > > > > > Any recommendations would be appreciated. we have 2 thread >> > > > > > making a >> > > > > > request every 60 secs. When we used a spooling manager always >> > > > > > one >> > > > >> > > > route was >> > > > > > used.. >> > > > > > >> > > > > >> > > > > May be both thread that are calling the same URL >> > > > > simultaneously are >> > > > > sharing one connection , but they should share different >> > > > > connections.. >> > > > > >> > > > > > >> > > > > > >> > > > > > Thanks >> > > > > > >> > > > > > >> > > > > > >> > > > > > *Hassan Khan* >> > > > > > >> > > > > > Software Developer >> > > > > > >> > > > > > >> > > > > >> > > > > >> > > > > >> > > > >> > > > >> > > > -- >> > > > E-Mail: [email protected] | [email protected] >> > > > Java Persistence with Hibernate, Second Edition >> > > > <https://www.amazon.com/gp/product/1617290459/ref=as_li_tl? >> > > > ie=UTF8&camp=1789&creative=9325&creativeASIN=1617290459&link >> > > > Code=as2&tag=garygregory- >> > > > 20&linkId=cadb800f39946ec62ea2b1af9fe6a2b8> >> > > > >> > > > <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l= >> > > > am2&o=1&a=1617290459> >> > > > JUnit in Action, Second Edition >> > > > <https://www.amazon.com/gp/product/1935182021/ref=as_li_tl? >> > > > ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182021&link >> > > > Code=as2&tag=garygregory- >> > > > 20&linkId=31ecd1f6b6d1eaf8886ac902a24de418%22> >> > > > >> > > > <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l= >> > > > am2&o=1&a=1935182021> >> > > > Spring Batch in Action >> > > > <https://www.amazon.com/gp/product/1935182951/ref=as_li_tl? >> > > > ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182951&link >> > > > Code=%7B%7BlinkCode%7D%7D&tag=garygregory-20&linkId=%7B%7Bli >> > > > nk_id%7D%7D%22%3ESpring+Batch+in+Action> >> > > > <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l= >> > > > am2&o=1&a=1935182951> >> > > > Blog: http://garygregory.wordpress.com >> > > > Home: http://garygregory.com/ >> > > > Tweet! http://twitter.com/GaryGregory >> > > > >> > > >> > > >> > > >> > > -- >> > > Hassan Khan >> > > >> > >> > >> > >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [email protected] >> For additional commands, e-mail: [email protected] >> >> > > > -- > Hassan Khan > -- Hassan Khan
