JAL-2656 recognise non-HTTP URI input streams as gzipped by detecting the gzip magic...
authorJim Procter <jprocter@issues.jalview.org>
Tue, 28 Jul 2020 10:32:46 +0000 (11:32 +0100)
committerJim Procter <jprocter@issues.jalview.org>
Tue, 28 Jul 2020 10:39:35 +0000 (11:39 +0100)
src/jalview/io/FileParse.java

index 36f9290..d0b61e4 100755 (executable)
@@ -293,19 +293,35 @@ public class FileParse
   {
     errormessage = "URL NOT FOUND";
     URL url = new URL(urlStr);
-    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
-    int rc = conn.getResponseCode();
-    if (rc != HttpURLConnection.HTTP_OK)
+    URLConnection _conn = url.openConnection();
+    if (_conn instanceof HttpURLConnection)
     {
-      throw new IOException(
-              "Response status from " + urlStr + " was " + rc);
+      HttpURLConnection conn = (HttpURLConnection) _conn;
+      int rc = conn.getResponseCode();
+      if (rc != HttpURLConnection.HTTP_OK)
+      {
+        throw new IOException(
+                "Response status from " + urlStr + " was " + rc);
+      }
+    } else {
+      try {
+      dataIn = checkForGzipStream(_conn.getInputStream());
+      dataName=urlStr;
+      } catch (IOException ex)
+      {
+        throw new IOException("Failed to handle non-HTTP URI stream",ex);
+      } catch (Exception ex)
+      {
+        throw new IOException("Failed to determine type of input stream for given URI",ex);
+      }
+      return;
     }
-    String encoding = conn.getContentEncoding();
-    String contentType = conn.getContentType();
+    String encoding = _conn.getContentEncoding();
+    String contentType = _conn.getContentType();
     boolean isgzipped = "application/x-gzip".equalsIgnoreCase(contentType)
             || "gzip".equals(encoding);
     Exception e = null;
-    InputStream inputStream = conn.getInputStream();
+    InputStream inputStream = _conn.getInputStream();
     if (isgzipped)
     {
       try