Hi,
first of all, kudos for your great work. We are using your framework
intensively in our production environment and it works like a charm.
I have stumbled with an issue with org.restlet.Client, that you might be able
to solve. We need to navigate through a website and retrieve a csv file in a
3-step process:
+ POST some credentials, inspect the response for a redirect,
+ GET to the redirect and
+ GET to a csv resource.
This is the code that hangs in the last GET for the csv file:
Form form = new Form();
form.add("organizationId", "xxxxx");
form.add("username", "CCCC");
form.add("password", "VVVVV");
Client ebcClient = new Client(Protocol.HTTPS);
Response loginResponse =
ebcClient.post("https://xxxxxxx.com/ebctest/login/LoginProcess.do",
form.getWebRepresentation());
Reference reference = loginResponse.getRedirectRef();
ebcClient.get(reference);
String yearMonthDay = "2007/08/28";
Response reportResponse =
ebcClient.get("https://xxxxxx/DownloadReport/"+yearMonthDay+
"/overstock_test/PaymentBatchDetailReport.csv");
However the following equivalent code works perfectly fine:
HttpClient httpClient = new HttpClient();
PostMethod httpLoginPost = new
PostMethod("https://xxxxx/ebctest/login/LoginProcess.do");
NameValuePair[] postData = {
new NameValuePair("organizationId", "xxxxxx"),
new NameValuePair("username", "xxxxxx"),
new NameValuePair("password", "xxxxxx")
};
httpLoginPost.setRequestBody(postData);
httpClient.executeMethod(httpLoginPost);
String redirectLocation =
httpLoginPost.getResponseHeader("location").getValue();
GetMethod getLogin = new GetMethod(redirectLocation);
httpClient.executeMethod(getLogin);
String yearMonthDay = "2007/08/28";
GetMethod csvGet = new
GetMethod("https://xxxxxx/ebctest/DownloadReport/"+yearMonthDay+
"/overstock_test/PaymentBatchDetailReport.csv");
httpClient.executeMethod(csvGet);
BufferedReader in = new BufferedReader(new
InputStreamReader(csvGet.getResponseBodyAsStream()));
String line;
while((line = in.readLine()) != null) {
logger.debug(line);
}
httpLoginPost.releaseConnection();
getLogin.releaseConnection();
This is the log where the org.restlet.Client hangs :
2007-08-31 09:25:49,303 [main] DEBUG
org.apache.commons.httpclient.HttpMethodBase -
enter
HttpMethodBase.processResponseHeaders(HttpState, HttpConnection)
2007-08-31 09:25:49,303 [main] DEBUG
org.apache.commons.httpclient.HttpMethodBase -
enter
HttpMethodBase.processCookieHeaders(Header[], HttpState, HttpConnection)
2007-08-31 09:25:49,303 [main] DEBUG
org.apache.commons.httpclient.HttpMethodBase -
enter
HttpMethodBase.readResponseBody(HttpState, HttpConnection)
2007-08-31 09:25:49,304 [main] DEBUG
org.apache.commons.httpclient.HttpMethodBase -
enter HttpMethodBase.readResponseBody(HttpConnection)
2007-08-31 09:25:49,304 [main] DEBUG
org.apache.commons.httpclient.HttpConnection -
enter HttpConnection.getResponseInputStream()
2007-08-31 09:25:49,304 [main] DEBUG
org.apache.commons.httpclient.HttpMethodBase -
enter HttpMethodBase.canResponseHaveBody(int)
2007-08-31 09:25:49,304 [main] DEBUG
org.apache.commons.httpclient.HttpMethodDirector -
Redirect required
2007-08-31 09:25:55,324 [main] DEBUG
org.apache.commons.httpclient.methods.GetMethod -
enter GetMethod(String)
2007-08-31 09:25:55,325 [main] DEBUG org.apache.commons.httpclient.HttpClient -
enter HttpClient.executeMethod(HttpMethod)
2007-08-31 09:25:55,325 [main] DEBUG org.apache.commons.httpclient.HttpClient -
enter HttpClient.executeMethod(HostConfiguration,HttpMethod,HttpState)
2007-08-31 09:25:55,326 [main] DEBUG
org.apache.commons.httpclient.MultiThreadedHttpConnectionManager -
enter HttpConnectionManager.getConnectionWithTimeout(HostConfiguration, long)
2007-08-31 09:25:55,326 [main] DEBUG
org.apache.commons.httpclient.MultiThreadedHttpConnectionManager -
HttpConnectionManager.getConnection: config =
HostConfiguration[host=https://ebctest.cybersource.com], timeout = 0
2007-08-31 09:25:55,326 [main] DEBUG
org.apache.commons.httpclient.MultiThreadedHttpConnectionManager -
enter HttpConnectionManager.ConnectionPool.getHostPool(HostConfiguration)
2007-08-31 09:25:55,326 [main] DEBUG
org.apache.commons.httpclient.MultiThreadedHttpConnectionManager -
Unable to get a connection, waiting...,
hostConfig=HostConfiguration[host=https://ebctest.cybersource.com]
Thanks
/Nic