Author: jleroux
Date: Mon Apr 4 13:30:27 2016 New Revision: 1737688 URL: http://svn.apache.org/viewvc?rev=1737688&view=rev Log: "SagePay classes make use of deprecated httpclient features" - https://issues.apache.org/jira/browse/OFBIZ-6286 No functional change. Replaces deprecated code. I stumbled upon this by chance. I wanted to entertain myself and learn something, this was much fun (not really :/) The new CloseableHttpClient is great but I was very surprise to have to put a catch block into a finally. I double-checked I see no other ways (but to throw a IOException and I wanted to log) In SagePayUtil.java, I wondered if deprecated BasicHttpParams was useless or not. I checked the source, which extends AbstractHttpParams and HttpParams, the default constructor does not set anything. We can get rid of it, I guess it was forgotten there. Modified: ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/sagepay/SagePayServices.java ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/sagepay/SagePayUtil.java Modified: ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/sagepay/SagePayServices.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/sagepay/SagePayServices.java?rev=1737688&r1=1737687&r2=1737688&view=diff ============================================================================== --- ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/sagepay/SagePayServices.java (original) +++ ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/sagepay/SagePayServices.java Mon Apr 4 13:30:27 2016 @@ -29,8 +29,8 @@ import java.util.Set; import org.apache.http.HttpHost; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; -import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; +import org.apache.http.impl.client.CloseableHttpClient; import org.ofbiz.base.util.Debug; import org.ofbiz.base.util.UtilMisc; import org.ofbiz.base.util.UtilProperties; @@ -122,7 +122,7 @@ public class SagePayServices String clientIPAddress = (String) context.get("clientIPAddress"); Locale locale = (Locale) context.get("locale"); - HttpClient httpClient = SagePayUtil.getHttpClient(); + CloseableHttpClient httpClient = null; HttpHost host = SagePayUtil.getHost(props); //start - authentication parameters @@ -195,6 +195,7 @@ public class SagePayServices try { String successMessage = null; + httpClient = SagePayUtil.getHttpClient(); HttpPost httpPost = SagePayUtil.getHttpPost(props.get("authenticationUrl"), parameters); HttpResponse response = httpClient.execute(host, httpPost); Map<String, String> responseData = SagePayUtil.getResponseData(response); @@ -279,7 +280,13 @@ public class SagePayServices Debug.logError(ioe, "Error occurred in HttpClient execute or getting response (" + ioe.getMessage() + ")", module); resultMap = ServiceUtil.returnError(UtilProperties.getMessage(resource, "AccountingSagePayErrorHttpClientExecuteOrGettingResponse", UtilMisc.toMap("errorString", ioe.getMessage()), locale)); } finally { - httpClient.getConnectionManager().shutdown(); + // Incredible, you need to put a try catch block into a finally, how Java can be verbose :/ + try { + httpClient.close(); + } catch (IOException ioe) { + Debug.logError(ioe, "Error occurred in HttpClient execute or getting response (" + ioe.getMessage() + ")", module); + resultMap = ServiceUtil.returnError(UtilProperties.getMessage(resource, "AccountingSagePayErrorHttpClientExecuteOrGettingResponse", UtilMisc.toMap("errorString", ioe.getMessage()), locale)); + } } return resultMap; } @@ -301,7 +308,7 @@ public class SagePayServices String amount = (String) context.get("amount"); Locale locale = (Locale) context.get("locale"); - HttpClient httpClient = SagePayUtil.getHttpClient(); + CloseableHttpClient httpClient = null; HttpHost host = SagePayUtil.getHost(props); //start - authorization parameters @@ -325,6 +332,7 @@ public class SagePayServices try { String successMessage = null; + httpClient = SagePayUtil.getHttpClient(); HttpPost httpPost = SagePayUtil.getHttpPost(props.get("authoriseUrl"), parameters); HttpResponse response = httpClient.execute(host, httpPost); @@ -375,7 +383,13 @@ public class SagePayServices Debug.logError(ioe, "Error occurred in HttpClient execute or getting response (" + ioe.getMessage() + ")", module); resultMap = ServiceUtil.returnError(UtilProperties.getMessage(resource, "AccountingSagePayErrorHttpClientExecuteOrGettingResponse", UtilMisc.toMap("errorString", ioe.getMessage()), locale)); } finally { - httpClient.getConnectionManager().shutdown(); + // Incredible, you need to put a try catch block into a finally, how Java can be verbose :/ + try { + httpClient.close(); + } catch (IOException ioe) { + Debug.logError(ioe, "Error occurred in HttpClient execute or getting response (" + ioe.getMessage() + ")", module); + resultMap = ServiceUtil.returnError(UtilProperties.getMessage(resource, "AccountingSagePayErrorHttpClientExecuteOrGettingResponse", UtilMisc.toMap("errorString", ioe.getMessage()), locale)); + } } return resultMap; } @@ -396,7 +410,7 @@ public class SagePayServices String txAuthNo = (String) context.get("txAuthNo"); Locale locale = (Locale) context.get("locale"); - HttpClient httpClient = SagePayUtil.getHttpClient(); + CloseableHttpClient httpClient = null; HttpHost host = SagePayUtil.getHost(props); //start - release parameters @@ -418,6 +432,7 @@ public class SagePayServices try { String successMessage = null; + httpClient = SagePayUtil.getHttpClient(); HttpPost httpPost = SagePayUtil.getHttpPost(props.get("releaseUrl"), parameters); HttpResponse response = httpClient.execute(host, httpPost); @@ -469,7 +484,13 @@ public class SagePayServices Debug.logError(ioe, "Error occurred in HttpClient execute or getting response (" + ioe.getMessage() + ")", module); resultMap = ServiceUtil.returnError(UtilProperties.getMessage(resource, "AccountingSagePayErrorHttpClientExecuteOrGettingResponse", UtilMisc.toMap("errorString", ioe.getMessage()), locale)); } finally { - httpClient.getConnectionManager().shutdown(); + // Incredible, you need to put a try catch block into a finally, how Java can be verbose :/ + try { + httpClient.close(); + } catch (IOException ioe) { + Debug.logError(ioe, "Error occurred in HttpClient execute or getting response (" + ioe.getMessage() + ")", module); + resultMap = ServiceUtil.returnError(UtilProperties.getMessage(resource, "AccountingSagePayErrorHttpClientExecuteOrGettingResponse", UtilMisc.toMap("errorString", ioe.getMessage()), locale)); + } } return resultMap; } @@ -490,7 +511,7 @@ public class SagePayServices String txAuthNo = (String) context.get("txAuthNo"); Locale locale = (Locale) context.get("locale"); - HttpClient httpClient = SagePayUtil.getHttpClient(); + CloseableHttpClient httpClient = null; HttpHost host = SagePayUtil.getHost(props); //start - void parameters @@ -510,7 +531,7 @@ public class SagePayServices try { String successMessage = null; - + httpClient = SagePayUtil.getHttpClient(); HttpPost httpPost = SagePayUtil.getHttpPost(props.get("voidUrl"), parameters); HttpResponse response = httpClient.execute(host, httpPost); Map<String, String> responseData = SagePayUtil.getResponseData(response); @@ -561,7 +582,13 @@ public class SagePayServices Debug.logError(ioe, "Error occurred in HttpClient execute or getting response (" + ioe.getMessage() + ")", module); resultMap = ServiceUtil.returnError(UtilProperties.getMessage(resource, "AccountingSagePayErrorHttpClientExecuteOrGettingResponse", UtilMisc.toMap("errorString", ioe.getMessage()), locale)); } finally { - httpClient.getConnectionManager().shutdown(); + // Incredible, you need to put a try catch block into a finally, how Java can be verbose :/ + try { + httpClient.close(); + } catch (IOException ioe) { + Debug.logError(ioe, "Error occurred in HttpClient execute or getting response (" + ioe.getMessage() + ")", module); + resultMap = ServiceUtil.returnError(UtilProperties.getMessage(resource, "AccountingSagePayErrorHttpClientExecuteOrGettingResponse", UtilMisc.toMap("errorString", ioe.getMessage()), locale)); + } } return resultMap; } @@ -587,7 +614,7 @@ public class SagePayServices String relatedTxAuthNo = (String) context.get("relatedTxAuthNo"); Locale locale = (Locale) context.get("locale"); - HttpClient httpClient = SagePayUtil.getHttpClient(); + CloseableHttpClient httpClient = null; HttpHost host = SagePayUtil.getHost(props); //start - refund parameters @@ -611,7 +638,7 @@ public class SagePayServices try { String successMessage = null; - + httpClient = SagePayUtil.getHttpClient(); HttpPost httpPost = SagePayUtil.getHttpPost(props.get("refundUrl"), parameters); HttpResponse response = httpClient.execute(host, httpPost); Map<String, String> responseData = SagePayUtil.getResponseData(response); @@ -672,7 +699,13 @@ public class SagePayServices Debug.logError(ioe, "Error occurred in HttpClient execute or getting response (" + ioe.getMessage() + ")", module); resultMap = ServiceUtil.returnError(UtilProperties.getMessage(resource, "AccountingSagePayErrorHttpClientExecuteOrGettingResponse", UtilMisc.toMap("errorString", ioe.getMessage()), locale)); } finally { - httpClient.getConnectionManager().shutdown(); + // Incredible, you need to put a try catch block into a finally, how Java can be verbose :/ + try { + httpClient.close(); + } catch (IOException ioe) { + Debug.logError(ioe, "Error occurred in HttpClient execute or getting response (" + ioe.getMessage() + ")", module); + resultMap = ServiceUtil.returnError(UtilProperties.getMessage(resource, "AccountingSagePayErrorHttpClientExecuteOrGettingResponse", UtilMisc.toMap("errorString", ioe.getMessage()), locale)); + } } return resultMap; Modified: ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/sagepay/SagePayUtil.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/sagepay/SagePayUtil.java?rev=1737688&r1=1737687&r2=1737688&view=diff ============================================================================== --- ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/sagepay/SagePayUtil.java (original) +++ ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/sagepay/SagePayUtil.java Mon Apr 4 13:30:27 2016 @@ -35,13 +35,11 @@ import org.apache.http.HttpEntity; import org.apache.http.HttpHost; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; -import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; -import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; -import org.apache.http.params.BasicHttpParams; -import org.apache.http.params.HttpParams; import org.ofbiz.base.util.Debug; @@ -161,9 +159,6 @@ public class SagePayUtil httpPost.addHeader("Content-type", "application/x-www-form-urlencoded"); //postMethod.addHeader("Content-Length", "0"); - HttpParams params = new BasicHttpParams(); - httpPost.setParams(params); - List<NameValuePair> postParameters = new ArrayList<NameValuePair>(); Set<String> keys = parameters.keySet(); for (String key : keys) { @@ -178,8 +173,8 @@ public class SagePayUtil return httpPost; } - public static HttpClient getHttpClient() { - HttpClient httpClient = new DefaultHttpClient(); + public static CloseableHttpClient getHttpClient() { + CloseableHttpClient httpClient = HttpClients.createDefault(); return httpClient; } } |
Free forum by Nabble | Edit this page |