| @@ -18,7 +18,9 @@ import javax.xml.xpath.XPathFactory; | |||||
| import org.apache.commons.httpclient.ConnectTimeoutException; | import org.apache.commons.httpclient.ConnectTimeoutException; | ||||
| import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; | import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; | ||||
| import org.apache.commons.httpclient.Header; | |||||
| import org.apache.commons.httpclient.HttpClient; | import org.apache.commons.httpclient.HttpClient; | ||||
| import org.apache.commons.httpclient.HttpURL; | |||||
| import org.apache.commons.httpclient.methods.PostMethod; | import org.apache.commons.httpclient.methods.PostMethod; | ||||
| import org.apache.commons.httpclient.methods.StringRequestEntity; | import org.apache.commons.httpclient.methods.StringRequestEntity; | ||||
| import org.apache.commons.httpclient.params.HttpMethodParams; | import org.apache.commons.httpclient.params.HttpMethodParams; | ||||
| @@ -169,53 +171,91 @@ public class PostBack | |||||
| } | } | ||||
| xml.append("</"); xml.append(xmlTopElement); xml.append(">"); | xml.append("</"); xml.append(xmlTopElement); xml.append(">"); | ||||
| CommonLogger.activity.info(getName() + ": posting " + xml.toString()); | |||||
| PostMethod post = new PostMethod(postBackURL); | |||||
| PostMethod post = new PostMethod(); | |||||
| String responseBody = null; | String responseBody = null; | ||||
| StringRequestEntity requestEntity = null; | |||||
| try | try | ||||
| { | { | ||||
| post.setRequestEntity(new StringRequestEntity(xml.toString(), | |||||
| "application/xml", "utf-8")); | |||||
| requestEntity = new StringRequestEntity(xml.toString(), "application/xml", "utf-8"); | |||||
| } | } | ||||
| catch (UnsupportedEncodingException e) | catch (UnsupportedEncodingException e) | ||||
| { | { | ||||
| CommonLogger.alarm.warn(getName() + ": While adding this application/xml content to PostBack: " + xml + " -- " + e); | CommonLogger.alarm.warn(getName() + ": While adding this application/xml content to PostBack: " + xml + " -- " + e); | ||||
| return PostBackStatus.IRRECOVERABLE_ERROR; | return PostBackStatus.IRRECOVERABLE_ERROR; | ||||
| } | } | ||||
| post.setRequestEntity(requestEntity); | |||||
| post.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, | post.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, | ||||
| new DefaultHttpMethodRetryHandler(3, false)); | new DefaultHttpMethodRetryHandler(3, false)); | ||||
| /* | |||||
| CommonLogger.activity.debug("Before calling setFolloweRedirects()"); | |||||
| post.setFollowRedirects(false); | |||||
| CommonLogger.activity.debug("After calling setFolloweRedirects()"); | |||||
| */ | |||||
| HttpClient client = new HttpClient(); | HttpClient client = new HttpClient(); | ||||
| try | |||||
| String url = postBackURL; | |||||
| for (int redirectCount = 0; redirectCount < 3; redirectCount++) | |||||
| { | { | ||||
| client.getHttpConnectionManager().getParams().setConnectionTimeout(5 * 1000); | |||||
| int statusCode = client.executeMethod(post); | |||||
| if (statusCode != 200) | |||||
| try | |||||
| { | |||||
| client.getHttpConnectionManager().getParams().setConnectionTimeout(5 * 1000); | |||||
| post.setURI(new HttpURL(url)); | |||||
| if (redirectCount == 0) | |||||
| { | |||||
| CommonLogger.activity.info(getName() + ": posting " + xml.toString() + " to " + url); | |||||
| } | |||||
| else | |||||
| { | |||||
| CommonLogger.activity.info(getName() + ": redirected to " + url); | |||||
| } | |||||
| int statusCode = client.executeMethod(post); | |||||
| if (statusCode == 302) | |||||
| { | |||||
| Header locationHeader = post.getResponseHeader("Location"); | |||||
| if (locationHeader != null) | |||||
| { | |||||
| url = locationHeader.getValue(); | |||||
| post.releaseConnection(); | |||||
| continue; | |||||
| } | |||||
| else | |||||
| { | |||||
| CommonLogger.alarm.warn(getName() + ": When posting to \"" + url + "\": " + " received status 302 but without location header"); | |||||
| return PostBackStatus.IRRECOVERABLE_ERROR; | |||||
| } | |||||
| } | |||||
| else if (statusCode != 200) | |||||
| { | |||||
| CommonLogger.alarm.warn(getName() + ": Received problem status code " + statusCode + " from posting to \"" + url + "\": " + xml); | |||||
| return PostBackStatus.HTTP_STATUS_ERROR; | |||||
| } | |||||
| responseBody = post.getResponseBodyAsString().trim(); | |||||
| post.releaseConnection(); | |||||
| CommonLogger.activity.info(getName() + ": Received response: " + (responseBody.length() == 0? "[empty]" : responseBody)); | |||||
| if (responseBody.trim().length() == 0) return PostBackStatus.SUCCESS; | |||||
| break; | |||||
| } | |||||
| catch (ConnectTimeoutException e) | |||||
| { | { | ||||
| CommonLogger.alarm.warn(getName() + ": Received problem status code " + statusCode + " from posting to \"" + postBackURL + "\": " + xml); | |||||
| return PostBackStatus.HTTP_STATUS_ERROR; | |||||
| CommonLogger.alarm.warn(getName() + ": IO problem while posting to \"" + url + "\": " + xml + " -- " + e.getMessage()); | |||||
| return PostBackStatus.SERVER_IO_ERROR; | |||||
| } | |||||
| catch (IOException e) | |||||
| { | |||||
| CommonLogger.alarm.warn(getName() + ": IO problem while posting to \"" + url + "\": " + xml + " -- " + e.getMessage()); | |||||
| return PostBackStatus.SERVER_IO_ERROR; | |||||
| } | |||||
| catch (IllegalArgumentException e) | |||||
| { | |||||
| CommonLogger.alarm.warn(getName() + ": When posting to \"" + url + "\": " + e.getMessage()); | |||||
| return PostBackStatus.IRRECOVERABLE_ERROR; | |||||
| } | } | ||||
| responseBody = post.getResponseBodyAsString().trim(); | |||||
| CommonLogger.activity.info(getName() + ": Received response: " + (responseBody.length() == 0? "[empty]" : responseBody)); | |||||
| if (responseBody.trim().length() == 0) return PostBackStatus.SUCCESS; | |||||
| } | |||||
| catch (ConnectTimeoutException e) | |||||
| { | |||||
| CommonLogger.alarm.warn(getName() + ": IO problem while posting to \"" + postBackURL + "\": " + xml + " -- " + e.getMessage()); | |||||
| return PostBackStatus.SERVER_IO_ERROR; | |||||
| } | |||||
| catch (IOException e) | |||||
| { | |||||
| CommonLogger.alarm.warn(getName() + ": IO problem while posting to \"" + postBackURL + "\": " + xml + " -- " + e.getMessage()); | |||||
| return PostBackStatus.SERVER_IO_ERROR; | |||||
| } | } | ||||
| catch (IllegalArgumentException e) | |||||
| if (responseBody == null) | |||||
| { | { | ||||
| CommonLogger.alarm.warn(getName() + ": When posting to \"" + postBackURL + "\": " + e.getMessage()); | |||||
| CommonLogger.alarm.warn(getName() + ": When posting to \"" + url + "\": " + " Exhausted allowable redirects"); | |||||
| return PostBackStatus.IRRECOVERABLE_ERROR; | return PostBackStatus.IRRECOVERABLE_ERROR; | ||||
| } | } | ||||
| // parse into xml doc | // parse into xml doc | ||||
| Document xmlDoc = null; | Document xmlDoc = null; | ||||
| try | try | ||||