/*
* http://stackoverflow.com/questions/9064051/android-httppost-request-timeout
*
*
*/
package tr.com.stackdeveloper.lib;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpVersion;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicHttpResponse;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import android.util.Log;
public abstract class AbstractSoapClient
{
private String request;
private String response;
private String requestUrl;
private String soapAction;
private int connectionTimeout = 3000;
private int soTimeOut = 2000;
public abstract StringBuilder buildRequest();
public abstract void processResponse();
public abstract void processResponseExt();
public String doRequest(String envolope)
{
HttpPost httppost = new HttpPost(getRequestUrl());
StringEntity se;
try
{
se = new StringEntity(envolope, HTTP.UTF_8);
se.setContentType("text/xml");
httppost.setHeader("Content-Type","application/soap+xml;charset=UTF-8");
httppost.setHeader("Accept-Charset","utf-8");
httppost.setHeader("Accept","text/xml,application/text+xml,application/soap+xml");
if (this.soapAction!=null) httppost.setHeader("SOAPAction", this.soapAction);
httppost.setEntity(se);
HttpClient httpclient = Utils.getHttpsClient(new DefaultHttpClient());
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setSoTimeout(httpParameters, this.soTimeOut);
HttpConnectionParams.setConnectionTimeout(httpParameters, this.connectionTimeout);
HttpProtocolParams.setVersion(httpParameters, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(httpParameters, HTTP.UTF_8);
String strResponse = "";
if (httpclient != null)
{
BasicHttpResponse httpResponse = (BasicHttpResponse) httpclient.execute(httppost);
HttpEntity resEntity = httpResponse.getEntity();
strResponse = EntityUtils.toString(resEntity);
Log.d("Response", strResponse);
}
return strResponse;
} catch (Exception e)
{
Log.d("Response", e.getMessage());
return e.getMessage();
}
}
protected AbstractSoapClient(String requestUrl)
{
setRequestUrl(requestUrl);
}
public void execute()
{
setRequest(buildRequest().toString());
setResponse(doRequest(getRequest()));
processResponse();
processResponseExt();
}
public String getResponse()
{
return response;
}
public String getRequest()
{
return request;
}
public void setRequest(String request)
{
this.request = request;
}
public String getRequestUrl()
{
return requestUrl;
}
public void setRequestUrl(String requestUrl)
{
this.requestUrl = requestUrl;
}
public String getSoapAction() {
return soapAction;
}
public void setSoapAction(String soapAction) {
this.soapAction = soapAction;
}
public int getConnectionTimeout() {
return connectionTimeout;
}
public void setConnectionTimeout(int connectionTimeout) {
this.connectionTimeout = connectionTimeout;
}
public int getSoTimeOut() {
return soTimeOut;
}
public void setSoTimeOut(int soTimeOut) {
this.soTimeOut = soTimeOut;
}
public String getElementValue(Node n,String name)
{
Element e=(Element)n;
return e.getElementsByTagName(name).item(0).getTextContent();
}
public NodeList getSubNodes(Node n,String name)
{
Element token = (Element)n;
return token.getElementsByTagName(name);
}
public void setResponse(String response) {
this.response = response;
}
public XmlParser getXmlParser()
{
return XmlParser.create();
}
}