X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fext%2Fensembl%2FEnsemblRestClient.java;fp=src%2Fjalview%2Fext%2Fensembl%2FEnsemblRestClient.java;h=81bc560dfb15da43c32fa56ca3071ad897ee0eaf;hb=2af6c8f2c62b0e37c422d6d491a12ffe9ba026a7;hp=ad6c70cb28e99269c963fc78d34c1a257b8d3eb2;hpb=3ac6f45c254aaafa6bdf163bf66bb4031de21fa3;p=jalview.git diff --git a/src/jalview/ext/ensembl/EnsemblRestClient.java b/src/jalview/ext/ensembl/EnsemblRestClient.java index ad6c70c..81bc560 100644 --- a/src/jalview/ext/ensembl/EnsemblRestClient.java +++ b/src/jalview/ext/ensembl/EnsemblRestClient.java @@ -31,6 +31,7 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; +import java.net.ProtocolException; import java.net.URL; import java.util.HashMap; import java.util.List; @@ -296,29 +297,12 @@ abstract class EnsemblRestClient extends EnsemblSequenceFetcher int readTimeout) throws IOException { // long now = System.currentTimeMillis(); - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - - /* - * POST method allows multiple queries in one request; it is supported for - * sequence queries, but not for overlap - */ - boolean multipleIds = ids != null && ids.size() > 1; - connection.setRequestMethod( - multipleIds ? HttpMethod.POST : HttpMethod.GET); - connection.setRequestProperty("Content-Type", - getRequestMimeType(multipleIds)); - connection.setRequestProperty("Accept", getResponseMimeType()); - - connection.setUseCaches(false); - connection.setDoInput(true); - connection.setDoOutput(multipleIds); - - connection.setConnectTimeout(CONNECT_TIMEOUT_MS); - connection.setReadTimeout(readTimeout); - - if (multipleIds) + int maxRetries = 3; + int retriesLeft = maxRetries; + HttpURLConnection connection = null; + while (retriesLeft > 0) { - writePostBody(connection, ids); + connection = tryConnection(url, ids, readTimeout); } int responseCode = connection.getResponseCode(); @@ -346,6 +330,44 @@ abstract class EnsemblRestClient extends EnsemblSequenceFetcher } /** + * @param url + * @param ids + * @param readTimeout + * @return + * @throws IOException + * @throws ProtocolException + */ + protected HttpURLConnection tryConnection(URL url, List ids, + int readTimeout) throws IOException, ProtocolException + { + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + + /* + * POST method allows multiple queries in one request; it is supported for + * sequence queries, but not for overlap + */ + boolean multipleIds = ids != null && ids.size() > 1; + connection.setRequestMethod( + multipleIds ? HttpMethod.POST : HttpMethod.GET); + connection.setRequestProperty("Content-Type", + getRequestMimeType(multipleIds)); + connection.setRequestProperty("Accept", getResponseMimeType()); + + connection.setUseCaches(false); + connection.setDoInput(true); + connection.setDoOutput(multipleIds); + + connection.setConnectTimeout(CONNECT_TIMEOUT_MS); + connection.setReadTimeout(readTimeout); + + if (multipleIds) + { + writePostBody(connection, ids); + } + return connection; + } + + /** * Inspect response headers for any sign of server overload and respect any * 'retry-after' directive *