Hi I'm working on an old android project which use org.apache.httpclient
class which now depreciated and will be remove from API 22. How do we make a migration to httpUrlConnection
but still keep the original functionality? ALl my http POST is now not working with the error
22 16:16:33.755 5553-6064/com.singPost D/SingPost: payload: <OverseasPostalInfoDetailsRequest xmlns="http://singpost.com/paw/ns"><Country>AFAFG</Country><Weight>100</Weight><DeliveryServiceName></DeliveryServiceName><ItemType></ItemType><PriceRange>999</PriceRange><DeliveryTimeRange>999</DeliveryTimeRange></OverseasPostalInfoDetailsRequest>
08-22 16:16:33.755 5553-6064/com.singPost D/SingPost: Utils-request: https://prdesb1.singpost.com/ma/FilterOverseasPostalInfo
08-22 16:16:35.667 5553-6064/com.singPost E/SingPost: IOException: javax.net.ssl.SSLHandshakeException: Handshake failed
08-22 16:16:35.691 5553-6008/com.singPost E/Surface: getSlotFromBufferLocked: unknown buffer: 0x7f67d844e5c0
here is my webservice API call:
public static String callWS(String url, String module, String method, String payload) throws UnsupportedEncodingException, ClientProtocolException, IOException, ParseException, Exception{
HttpClient httpsClient;
HttpPost httppost;
HttpResponse response = null;
String ret = "";
httpsClient = getHTTPSClient();
String request = url;
if(!module.equalsIgnoreCase("") && !method.equalsIgnoreCase("")){
request += "/" + module + "/" + method;
}else if(!module.equalsIgnoreCase("")){
request += "/" + module;
}else if(!method.equalsIgnoreCase("")){
request += "/" + method;
}
if(Constants.DEBUG_MODE){
Log.d(Constants.TAG, Utils.class.getSimpleName() + "-request: " + request);
}
try {
httppost = new HttpPost(request);
httppost.setHeader("Content-Type", Constants.contentType);
if(payload!=null && !payload.equalsIgnoreCase("")){
httppost.setEntity(new StringEntity(payload, HTTP.UTF_8));
}
response = httpsClient.execute(httppost);
System.out.println("??**"+response.toString());
if (response != null) {
ret = EntityUtils.toString(response.getEntity(), "UTF-8");
System.out.println("Response: "+ret);
System.out.println("#############################################");
}
}catch(SocketTimeoutException e){
if(Constants.DEBUG_MODE){
Log.d(Constants.TAG, "SocketTimeoutException: " + e.toString());
}
}catch(Exception e){
//e.printStackTrace();
if(Constants.DEBUG_MODE){
Log.d(Constants.TAG, "Exception: " + e.toString());
}
}
return ret;
}
My getHTTPSClient()
public static DefaultHttpClient getHTTPSClient() {
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
schemeRegistry.register(new Scheme("https", new EasySSLSocketFactory(), 443));
HttpParams params = new BasicHttpParams();
params.setParameter(ConnManagerPNames.MAX_TOTAL_CONNECTIONS, 30);
params.setParameter(ConnManagerPNames.MAX_CONNECTIONS_PER_ROUTE, new ConnPerRouteBean(30));
params.setParameter(HttpProtocolParams.USE_EXPECT_CONTINUE, false);
HttpConnectionParams.setConnectionTimeout(params, Constants.DEFAULT_CONNECTION_TIMEOUT);
HttpConnectionParams.setSoTimeout(params, Constants.DEFAULT_SOCKET_TIMEOUT);
ConnManagerParams.setTimeout(params, Constants.DEFAULT_SOCKET_TIMEOUT);
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
ClientConnectionManager cm = new SingleClientConnManager(params, schemeRegistry);
DefaultHttpClient httpClient= new DefaultHttpClient(cm, params);
return httpClient;
}
And in activity(Fragment), I call like that
result = Utils.callWS(Constants.getSP_WS_URL(), Constants.MODULE_MA, Constants.METHOD_POST_FILTER_OVERSEAS_POSTAL_INFO, payload);
One possile endpoint:
https://prdesb1.singpost.com/ma/FilterOverseasPostalInfo
My checked payload which is correct:
<OverseasPostalInfoDetailsRequest xmlns="http://singpost.com/paw/ns"><Country>AFAFG</Country><Weight>100</Weight><DeliveryServiceName></DeliveryServiceName><ItemType></ItemType><PriceRange>999</PriceRange><DeliveryTimeRange>999</DeliveryTimeRange></OverseasPostalInfoDetailsRequest>
Anyone know possible of the error and how can we handle it? Thanks a lot