On Mon, 22 May 2023 17:49:12 GMT, Jesse Glick <d...@openjdk.org> wrote:
>> This patch appears to be work and may be preferable to what is currently >> proposed: >> >> >> diff --git >> src/java.base/share/classes/sun/net/www/protocol/file/FileURLConnection.java >> src/java.base/share/classes/sun/net/www/protocol/file/FileURLConnection.java >> index a9ce7cee9a1..55783474c22 100644 >> --- >> src/java.base/share/classes/sun/net/www/protocol/file/FileURLConnection.java >> +++ >> src/java.base/share/classes/sun/net/www/protocol/file/FileURLConnection.java >> @@ -53,7 +53,6 @@ public class FileURLConnection extends URLConnection { >> File file; >> String filename; >> boolean isDirectory = false; >> - boolean exists = false; >> List<String> files; >> >> long length = -1; >> @@ -93,16 +92,12 @@ public class FileURLConnection extends URLConnection { >> private boolean initializedHeaders = false; >> >> private void initializeHeaders() { >> - try { >> - connect(); >> - exists = file.exists(); >> - } catch (IOException e) { >> - } >> - if (!initializedHeaders || !exists) { >> + if (!initializedHeaders || !file.exists()) { >> length = file.length(); >> lastModified = file.lastModified(); >> + filename = file.toString(); >> >> - if (!isDirectory) { >> + if (!file.isDirectory()) { >> FileNameMap map = java.net.URLConnection.getFileNameMap(); >> contentType = map.getContentTypeFor(filename); >> if (contentType != null) { >> @@ -131,17 +126,17 @@ public class FileURLConnection extends URLConnection { >> >> public Map<String,List<String>> getHeaderFields() { >> initializeHeaders(); >> - return super.getHeaderFields(); >> + return properties.getHeaders(); >> } >> >> public String getHeaderField(String name) { >> initializeHeaders(); >> - return super.getHeaderField(name); >> + return properties.findValue(name); >> } >> >> public String getHeaderField(int n) { >> initializeHeaders(); >> - return super.getHeaderField(n); >> + return properties.getKey(n); >> } >> >> public int getContentLength() { > >> has this comment > > Interesting. And yet that does not appear to be true in `master`: > `getContentType` and `getContentLength` will return whatever was in effect at > the time `initializeHeaders()` was first called, which may have been before > any explicit call to `connect()`, or hours after an explicit call. Ah! It's true only if the first time connect is called, it's implicitly by `initializeHeaders()` (sigh)... ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/12871#discussion_r1200844827