X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fext%2Fensembl%2FEnsemblRestClient.java;h=ab3b1975f05118925962e269f8f9c40a3347c378;hb=a862a922bf20918fc3f5066ac92e4c69da07e105;hp=8daf234a78315bf1a9e3a78634ae4074a94344bd;hpb=853624fb32058cccc544ae7d13af6ad4b0800b6c;p=jalview.git diff --git a/src/jalview/ext/ensembl/EnsemblRestClient.java b/src/jalview/ext/ensembl/EnsemblRestClient.java index 8daf234..ab3b197 100644 --- a/src/jalview/ext/ensembl/EnsemblRestClient.java +++ b/src/jalview/ext/ensembl/EnsemblRestClient.java @@ -1,5 +1,26 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.ext.ensembl; +import jalview.io.DataSourceType; import jalview.io.FileParse; import jalview.util.StringUtils; @@ -30,15 +51,19 @@ import com.stevesoft.pat.Regex; */ abstract class EnsemblRestClient extends EnsemblSequenceFetcher { + private static final int DEFAULT_READ_TIMEOUT = 5 * 60 * 1000; // 5 minutes + + private static final int CONNECT_TIMEOUT_MS = 10 * 1000; // 10 seconds + /* * update these constants when Jalview has been checked / updated for * changes to Ensembl REST API * @see https://github.com/Ensembl/ensembl-rest/wiki/Change-log * @see http://rest.ensembl.org/info/rest?content-type=application/json */ - private static final String LATEST_ENSEMBLGENOMES_REST_VERSION = "4.6"; + private static final String LATEST_ENSEMBLGENOMES_REST_VERSION = "4.8"; - private static final String LATEST_ENSEMBL_REST_VERSION = "4.7"; + private static final String LATEST_ENSEMBL_REST_VERSION = "4.8"; private static final String REST_CHANGE_LOG = "https://github.com/Ensembl/ensembl-rest/wiki/Change-log"; @@ -166,7 +191,7 @@ abstract class EnsemblRestClient extends EnsemblSequenceFetcher */ private boolean checkEnsembl() { - HttpURLConnection conn = null; + BufferedReader br = null; try { // note this format works for both ensembl and ensemblgenomes @@ -176,8 +201,9 @@ abstract class EnsemblRestClient extends EnsemblSequenceFetcher /* * expect {"ping":1} if ok + * if ping takes more than 2 seconds to respond, treat as if unavailable */ - BufferedReader br = getHttpResponse(ping, null); + br = getHttpResponse(ping, null, 2 * 1000); JSONParser jp = new JSONParser(); JSONObject val = (JSONObject) jp.parse(br); String pingString = val.get("ping").toString(); @@ -188,9 +214,15 @@ abstract class EnsemblRestClient extends EnsemblSequenceFetcher + t.getMessage()); } finally { - if (conn != null) + if (br != null) { - conn.disconnect(); + try + { + br.close(); + } catch (IOException e) + { + // ignore + } } } return false; @@ -214,22 +246,39 @@ abstract class EnsemblRestClient extends EnsemblSequenceFetcher // request failed return null; } - FileParse fp = new FileParse(reader, url.toString(), "HTTP_POST"); + FileParse fp = new FileParse(reader, url.toString(), DataSourceType.URL); return fp; } /** + * Gets a reader to the HTTP response, using the default read timeout of 5 + * minutes + * + * @param url + * @param ids + * @return + * @throws IOException + */ + protected BufferedReader getHttpResponse(URL url, List ids) + throws IOException + { + return getHttpResponse(url, ids, DEFAULT_READ_TIMEOUT); + } + + /** * Writes the HTTP request and gets the response as a reader. * * @param url * @param ids * written as Json POST body if more than one + * @param readTimeout + * in milliseconds * @return * @throws IOException * if response code was not 200, or other I/O error */ - protected BufferedReader getHttpResponse(URL url, List ids) - throws IOException + protected BufferedReader getHttpResponse(URL url, List ids, + int readTimeout) throws IOException { // long now = System.currentTimeMillis(); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); @@ -249,6 +298,9 @@ abstract class EnsemblRestClient extends EnsemblSequenceFetcher connection.setDoInput(true); connection.setDoOutput(multipleIds); + connection.setConnectTimeout(CONNECT_TIMEOUT_MS); + connection.setReadTimeout(readTimeout); + if (multipleIds) { writePostBody(connection, ids);