ref #8812 replacing deprecated usage of apache HttpClient by new classes
authorAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Wed, 5 Feb 2020 15:49:23 +0000 (16:49 +0100)
committerAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Wed, 5 Feb 2020 15:49:23 +0000 (16:49 +0100)
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteConfiguration.java
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmServerInfo.java

index a70147aec7ae54ec7551d04bb72a8ef562f63abe..aa565c108d085173b0c10734939e1e6291935870 100644 (file)
@@ -88,8 +88,8 @@ import eu.etaxonomy.cdm.persistence.hibernate.permission.voter.GrantAlwaysVoter;
 import eu.etaxonomy.cdm.persistence.hibernate.permission.voter.TaxonBaseVoter;\r
 import eu.etaxonomy.cdm.persistence.hibernate.permission.voter.TaxonNodeVoter;\r
 import eu.etaxonomy.taxeditor.remoting.source.ICdmRemoteSource;\r
-import eu.etaxonomy.taxeditor.service.CachedCommonServiceImpl;\r
 import eu.etaxonomy.taxeditor.service.AuthenticatingHttpInvokerRequestExecutor;\r
+import eu.etaxonomy.taxeditor.service.CachedCommonServiceImpl;\r
 import eu.etaxonomy.taxeditor.service.ICachedCommonService;\r
 import eu.etaxonomy.taxeditor.service.RemoteInvocationTermCacher;\r
 import eu.etaxonomy.taxeditor.session.CdmEntitySessionManager;\r
@@ -105,7 +105,16 @@ import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager;
 // TODO split into CdmRepository and proper @Configuration class\r
 public class CdmApplicationRemoteConfiguration implements ICdmRepository, ApplicationContextAware  {\r
 \r
-    private static final int HTTP_READ_TIMEOUT = 0;\r
+    /**\r
+     * Timeout for service lookup etc. This timeout should me more\r
+     * strict than {@link #HTTP_READ_TIMEOUT} to avoid connecting to\r
+     * cdm servers when the network quality is too bad.\r
+     */\r
+    public static final int HTTP_READ_TIMEOUT_MIN = 300;\r
+    /**\r
+     * Timeout for normal operation\r
+     */\r
+    public static final int HTTP_READ_TIMEOUT = 0;\r
 \r
     @SuppressWarnings("unused")\r
     private static final Logger logger = Logger.getLogger(CdmApplicationRemoteConfiguration.class);\r
index 066f0c93dd40bced2073444e58f1b32658a398a4..911b1743800af9397a84b1e661ab333f649634ce 100644 (file)
@@ -24,10 +24,10 @@ import org.apache.http.HttpEntity;
 import org.apache.http.HttpResponse;
 import org.apache.http.client.ClientProtocolException;
 import org.apache.http.client.ResponseHandler;
+import org.apache.http.client.config.RequestConfig;
 import org.apache.http.client.methods.HttpGet;
-import org.apache.http.impl.client.DefaultHttpClient;
-import org.apache.http.params.HttpConnectionParams;
-import org.apache.http.params.HttpParams;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
 import org.apache.http.util.EntityUtils;
 import org.apache.log4j.Logger;
 import org.json.JSONArray;
@@ -37,6 +37,7 @@ import org.json.JSONObject;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
+import eu.etaxonomy.cdm.api.application.CdmApplicationRemoteConfiguration;
 import eu.etaxonomy.cdm.api.application.CdmApplicationState;
 import eu.etaxonomy.cdm.config.CdmSourceException;
 import eu.etaxonomy.cdm.config.ConfigFileUtil;
@@ -73,8 +74,6 @@ public class CdmServerInfo {
     public final static int NULL_PORT = -1;
     public final static String NULL_PORT_STRING = "N/A";
 
-    public static final int TIME_OUT = 7000;
-
     private static final String CDM_REMOTE_SERVERS_CONFIG_FILE = "cdm_remote_servers.json";
 
 
@@ -186,13 +185,12 @@ public class CdmServerInfo {
     }
 
     private String getResponse(String url) throws CDMServerException {
-        DefaultHttpClient client = new DefaultHttpClient();
-       // client = HttpClientBuilder.create().build();
-       // client.getParams();
-        HttpParams params = client.getParams();
 
-        HttpConnectionParams.setConnectionTimeout(params, TIME_OUT);
-        HttpConnectionParams.setSoTimeout(params, TIME_OUT);
+        RequestConfig.Builder requestBuilder = RequestConfig.custom();
+        requestBuilder.setConnectTimeout(CdmApplicationRemoteConfiguration.HTTP_READ_TIMEOUT_MIN);
+        requestBuilder.setConnectionRequestTimeout(CdmApplicationRemoteConfiguration.HTTP_READ_TIMEOUT_MIN);
+        requestBuilder.setSocketTimeout(CdmApplicationRemoteConfiguration.HTTP_READ_TIMEOUT_MIN);
+        CloseableHttpClient client = HttpClientBuilder.create().setDefaultRequestConfig(requestBuilder.build()).build();
 
         HttpGet httpGet = new HttpGet(url);
 
@@ -219,10 +217,15 @@ public class CdmServerInfo {
             responseBody = client.execute(httpGet, responseHandler);
         } catch (ClientProtocolException e) {
             throw new CDMServerException(e);
-        } catch (IOException e) {
+        } catch (IOException e) { // java.net.ConnectException: Connection refused, java.net.SocketTimeoutException: Read timed out
             throw new CDMServerException(e);
         } finally{
-            client.close();
+            try {
+                client.close();
+                client = null;
+            } catch (IOException e) {
+                // IGNORE //
+            }
         }
         return responseBody;
     }
@@ -268,7 +271,7 @@ public class CdmServerInfo {
             return true;
         }
         Socket s = new Socket();
-        s.connect(new InetSocketAddress(server, port), TIME_OUT);
+        s.connect(new InetSocketAddress(server, port), CdmApplicationRemoteConfiguration.HTTP_READ_TIMEOUT_MIN);
         s.close();
         logger.info("[CDM-Server] Available @ " + server + ":" + port );
         updateInfo();