From 08ea977287323e63781dddf6f461c0011833bcc2 Mon Sep 17 00:00:00 2001 From: Jim Procter Date: Tue, 28 Jul 2020 11:32:46 +0100 Subject: [PATCH] JAL-2656 recognise non-HTTP URI input streams as gzipped by detecting the gzip magic header --- src/jalview/io/FileParse.java | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/src/jalview/io/FileParse.java b/src/jalview/io/FileParse.java index 128672a..f1d79fe 100755 --- a/src/jalview/io/FileParse.java +++ b/src/jalview/io/FileParse.java @@ -285,19 +285,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 -- 1.7.10.2