Ortwin,
About 1, I have added the changes.
2, I need to add some id, pwd into the authentication logic, does httpclient api allow for setting this details?
3, Point noted, I will add that in.
Ortwin Glück wrote:
Some comments on the posted code:
1. You should execute releaseConnection in a finally block, to ensure the connection is returned to the pool in any case:
PostMethod post = null; try { post = new PostMethod(urlAddress); /* ... */ } finally { if (post != null) post.releaseConnection(); }
Otherwise you the connection pool might run out of connections if exceptions occur.
2. You are setting the Authorization header manually. You could use HttpClient's built-in authentication logic instead.
3. You are setting the encoding in the Content-Type header to ISO-8859-1, but you do not specify any encoding in xmlStr.getBytes(). This assumes that the default platform encoding be ISO-8859-1, which is true for Windows in certain locales but not for most other platforms. Furthermore this assumes your <?xml ?> Header uses encoding="ISO-8859-1", which I can not verify from the code. I suggest you get the XML Stream (not a String) from a DOM directly and specify the same encoding as in the Content-Type header.
paul wrote:
Ortwin,
It seems from the wire logs I gathered, that's the normal behaviour.
I am creating a new HttpMethod object for every send.
Only when I receive the response, then releaseConnection was called.
Here's the code : ================================= //convert trade to xml String xmlStr = convertTradeToXMLString(trade, some1id, someid);
PostMethod post = new PostMethod(urlAddress);
post.setRequestHeader("Content-type", "text/xml; charset=ISO-8859-1");
post.setRequestHeader ("Authorization", "Basic " + encoding);
post.setRequestHeader("HTTP-Version", "HTTP/1.1");
post.setRequestHeader ("Connection", "Keep-Alive");
xmlInBytes =new ByteArrayInputStream(xmlStr.getBytes());
post.setRequestBody(xmlInBytes);
if (xmlStr.length() < Integer.MAX_VALUE) {
post.setRequestContentLength(xmlStr.length());
}
else {
post.setRequestContentLength(EntityEnclosingMethod.CONTENT_LENGTH_CHUNKED);
} // Execute request
toConsole("B4 sending xml, connMgr.getConnectionsInUse()="+connMgr.getConnectionsInUse());
toConsole(">>>>>>>> Send xml to somewhere @ "+ new java.sql.Timestamp(System.currentTimeMillis()));
int result = httpClient.executeMethod(post);
//System.out.println("Response body: ");
MQClientConstants.toConsole(">>>>>>>> Reply from fxlink received @ "+ new java.sql.Timestamp(System.currentTimeMillis()));
String xml = post.getResponseBodyAsString();
post.releaseConnection();
=================================
Httpclient was created like this :
==================================
connMgr = new MultiThreadedHttpConnectionManager();
connMgr.setMaxConnectionsPerHost( MAXHOSTCONNECTIONS );//20 connections
MQClientConstants.toConsole("MultiThreadedHttpConnectionManager setMaxConnectionsPerHost = "+MAXHOSTCONNECTIONS);
connMgr.setConnectionStaleCheckingEnabled( true );
MQClientConstants.toConsole("MultiThreadedHttpConnectionManager setConnectionStaleCheckingEnabled = "+true);
httpClient = new HttpClient(connMgr);
httpClient.setTimeout(TIMEOUT);//5 secs
httpClient.setStrictMode(true);
==================================
Paul
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]