< prev index next >

src/jdk.zipfs/share/classes/jdk/nio/zipfs/JarFileSystem.java

Print this page

        

*** 60,79 **** JarFileSystem(ZipFileSystemProvider provider, Path zfpath, Map<String,?> env) throws IOException { super(provider, zfpath, env); if (isMultiReleaseJar()) { int version; ! Object o = env.get("multi-release"); if (o instanceof String) { String s = (String)o; if (s.equals("runtime")) { version = Runtime.version().feature(); } else { ! version = Integer.parseInt(s); } } else if (o instanceof Integer) { ! version = (Integer)o; } else if (o instanceof Version) { version = ((Version)o).feature(); } else { throw new IllegalArgumentException("env parameter must be String, Integer, " + "or Version"); --- 60,79 ---- JarFileSystem(ZipFileSystemProvider provider, Path zfpath, Map<String,?> env) throws IOException { super(provider, zfpath, env); if (isMultiReleaseJar()) { int version; ! Object o = getRuntimeVersion(env); if (o instanceof String) { String s = (String)o; if (s.equals("runtime")) { version = Runtime.version().feature(); } else { ! version = Version.parse(s).feature(); } } else if (o instanceof Integer) { ! version = Version.parse(((Integer)o).toString()).feature(); } else if (o instanceof Version) { version = ((Version)o).feature(); } else { throw new IllegalArgumentException("env parameter must be String, Integer, " + "or Version");
*** 81,90 **** --- 81,102 ---- createVersionedLinks(version < 0 ? 0 : version); setReadOnly(); } } + /** + * Utility method to get the release version for a multi-release JAR. It + * first checks the documented property {@code releaseVersion} and if not + * found checks the original property {@code multi-release} + * @param env ZIP FS map + * @return release version or null if it is not specified + */ + private Object getRuntimeVersion(Map<String, ?> env) { + Object o = env.get(ZipFileSystemProvider.RELEASE_VERSION); + return o != null ? o : env.get(ZipFileSystemProvider.MULTI_RELEASE); + } + private boolean isMultiReleaseJar() throws IOException { try (InputStream is = newInputStream(getBytes("/META-INF/MANIFEST.MF"))) { String multiRelease = new Manifest(is).getMainAttributes() .getValue(Attributes.Name.MULTI_RELEASE); return "true".equalsIgnoreCase(multiRelease);
< prev index next >