OutputObjectStreams are supported in 4.5 (3.0 does).
All our objects are marked as serializable.
Hi All,
I have been trying to solve the below issue that show up in logs and
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);
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
Post by Hassan KhanHi Oleg,
Thanks for answering ... very excited (and humbled) to hear from you...
Thanks
Hassan
Post by Oleg KalnichevskiPost by Hassan KhanHi 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
Post by Hassan KhanThanks
Hassan
Post by Hassan KhanHi ,
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
om>
Post by Gary GregoryHassan,
Your attachments were filtered out. You might want to try an image sharing
site.
Gary
.com>
Post by Hassan Khan+
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.
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();
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
Post by Hassan Khanused..
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
--
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
---------------------------------------------------------------------
--
Hassan Khan
--
Hassan Khan